關於floyd
floyd是一種可以計算圖中所有端點之間的最短的“演算法”,其虛擬碼如下:
for(所有起點i)
for(所有終點j)
如果i=j: i到j最短路設為0
如果i與j相連: i到j最短路設為已知i到j的距離
如果都不滿足: i到j距離設為無限
for(列舉所有中間點k)
for(列舉所有起點i)
for(列舉所有終點j)
如果(從i到k的最短路+從k到j的最短路<目前得出從i到j的最短路): 更新i到j最短路
別問我複雜度,看看這華麗的三重迴圈就知道了
大家也許注意到我標題中用的是帶引號的“ 演算法 ”。其實,我覺得真正意義上,這不算一個演算法,之能稱之為一種“暴力”,尤其其時間複雜度為恐怖的 N^3
。
這樣的一種“演算法”,美曰其名叫“重機槍” (醜曰其名叫“全國中小學生宇宙超級無敵大列舉”) 。