关于弗洛伊德算法发现的怪现象: + _+ t$ \: i" Q9 d* Y( D4 X: U* {" p* _7 _0 U. H1 ]
我在用实际顶点代入验证的基础上证实如下现象,无法用理论解释,个人感到弗洛伊德算法象哥德巴赫猜想一样,无法证明的。 ) V1 V- |, q2 q+ ~" h/ k, G V$ M3 }原来的弗洛伊德算法是: . O% n2 y3 D# l6 B/ i. `For k:=1 to n( A4 q% r! u# U
For i:=1 to n/ T6 Q* B5 O, _0 B, q6 a7 j
For j:=1 to n! d, L0 d' \$ E _
If D[i,j]>D[i,k]+D[k,j] Then D[i,j]:=D[i,k]+D[k,j];' j7 t" {! P* f9 U. L( g
我改成下面的形式,结果具体值代入仍是正确的,当然无法证明: & K/ n! u0 p4 m% z# N. tFor j:=1 to n' y' n9 ^0 u# H' x: h k
For i:=1 to n + n; j, ~- b. z3 xFor k:=1 to n/ [) |8 N+ T3 U! o
If D[i,j]>D[i,k]+D[k,j] Then D[i,j]:=D[i,k]+D[k,j];4 b1 }- k" Z+ \9 [4 \; I, w# j/ ^
我再改成如下形式,结果仍是正确的:' s, `6 t1 r. g. n
For j:=1 to n ' j: U1 ]8 \7 D4 o/ b9 Q3 HFor i:=1 to j-1 / @2 y `! T q EFor k:=1 to n ; A: p5 j0 B0 Y* @( F' r* jIf D[i,j]>D[i,k]+D[k,j] Then D[i,j]:=D[i,k]+D[k,j];3 y; K7 z9 V" X% s* \9 T$ _
如果我改成如下形式,结果出错,不行了: 1 Y, h4 ` v- \! c6 u/ H& ^* LFor j:=1 to n $ e# ]" D# l% V8 E4 yFor i:=j+1 to n e3 v; E, Q5 u5 Q3 B
For k:=1 to n0 B- B, P6 I$ k$ l. n
If D[i,j]>D[i,k]+D[k,j] Then D[i,j]:=D[i,k]+D[k,j];/ X/ {9 [. s5 Z) O; X; C
无法证明,只能用具体值来代入验证。! I9 X8 X" U+ [1 L- G
/ B( T: |4 l' P1 B) P