在弗洛伊德算法的第一部分中,野兔为乌龟的每一步移动两步。如果乌龟和兔子相遇,那就有一个循环,会合点是循环的一部分,但不一定是循环中的第一个节点。
我无法理解为什么如果圆圈存在,两个指针必须满足?用“三步”代替“两步”怎么样?
我希望有人可以向我证明......
答案 0 :(得分:4)
请注意,当乌龟和兔子都处于循环中时,它们的相对速度变为1,几乎是以这种速度追逐站立的乌龟,因此野兔将以N <= Cycle_Len
步骤遇见乌龟。
你可以用“三步”替换“两步”,但你必须检查它们是否在每个野兔子步骤中相遇
答案 1 :(得分:1)
要添加到问题的第二部分,如果野兔在3
步移动并且在1
步移动,则无法保证检测到包含偶数节点的循环。然而,如果乌龟以2
步移动,则可以进行循环检测。
一般情况下,如果野兔以H
步移动,而龟移动T
步,则可以保证在H = T + 1
时检测到一个循环。
考虑野兔相对于乌龟的移动。
H - T
个节点。给定一个长度为N =(H - T) * k
的周期,其中k
为正数
整数,野兔会跳过每个H - T - 1
个节点(再次,相对
对乌龟来说,如果他们不可能见面
乌龟在任何一个节点中。
保证会议的唯一可能性是H - T - 1 = 0
。