我正在研究Floyd Warshall算法,并提出了一个问题。为什么此算法只需要O(v ^ 2)空间?
天真的,我知道它在O(v ^ 3)中可以很好地工作,但是当我看到O(v ^ 2)的伪代码时,我很好奇它可能如何工作。
D ← W;
for k ← 1 to n do
for i ← 1 to n do
for j ← 1 to n do
dij ← min(d_ij, d_ik + d_kj);
return D;
在这里,我们比较d_ij和d_ik + d_kj,但是由于没有超级脚本,因此有可能在(对于i)和(对于j)迭代期间将d_ik或d_kj更新为第k个超级脚本。弗洛伊德·沃沙尔(Floyd Warshal)总是比较第k-1个超级脚本的加法,但有时却没有。这怎么可能是真的?