弗洛伊德周期检测算法:为什么最多只做一圈?



为什么弗洛伊德周期检测算法假设在与野兔相遇之前最多绕周期一圈?为什么它不能跑多圈? 直观和正式的解释将不胜感激。

我想我可以提供一个直观的解释。

我们可以有两种情况:要么有循环,要么没有。

如果没有周期:
hare将在tortoise之前到达列表的末尾,所以我们完成了。

如果有周期:
它的长度必须n,我们记得hare的"速度"是tortoise's的两倍。
一旦tortoise进入循环,hare就会在循环中的某个地方(可能已经绕了几次)。无论如何,它是tortoise后面x节点(记住x <= n-1因为如果它们在同一个节点上,我们将在这里结束)。
由于hare的"速度"是tortoise的两倍,它将在x"步"内"追上"它。
QED。

最新更新