【发布时间】:2020-04-07 07:12:06
【问题描述】:
为什么弗洛伊德的循环检测算法假设乌龟在遇到兔子之前最多会绕循环一圈?为什么它不能做多圈? 直观和正式的解释将不胜感激。
【问题讨论】:
-
如果你用笔和纸试一试,你会立刻看到。
标签: algorithm linked-list
为什么弗洛伊德的循环检测算法假设乌龟在遇到兔子之前最多会绕循环一圈?为什么它不能做多圈? 直观和正式的解释将不胜感激。
【问题讨论】:
标签: algorithm linked-list
我想我可以提供一个直观的解释。
我们可以有两种情况:要么有一个循环,要么没有。
如果没有循环:
hare 将在 tortoise 之前到达列表末尾,因此我们完成了。
如果有循环:
它的长度必须是n,我们记得hare 的“速度”是tortoise's 的两倍。
一旦tortoise 进入循环,hare 就在循环中的某个位置(可能已经绕了几次)。在任何情况下,它都是x 节点在tortoise 之后(请记住x <= n-1,因为如果它们在同一个节点上,我们将在这里结束)。
由于hare的“速度”是tortoise的两倍,它会在x“步数”内“赶上”。
QED。
【讨论】: