Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Algorithm 弗洛伊德';s循环检测算法:为什么乌龟最多只能跑一圈?_Algorithm_Linked List - Fatal编程技术网

Algorithm 弗洛伊德';s循环检测算法:为什么乌龟最多只能跑一圈?

Algorithm 弗洛伊德';s循环检测算法:为什么乌龟最多只能跑一圈?,algorithm,linked-list,Algorithm,Linked List,为什么弗洛伊德的周期检测算法假设乌龟在遇到兔子之前最多只绕一圈?为什么它不能跑多圈? 无论是直观的还是正式的解释都将不胜感激。我想我可以提供直观的解释 我们可以有两种情况:要么有循环,要么没有循环 如果没有循环: 兔子将在乌龟之前到达列表的末尾,因此我们完成了 如果有一个循环: 它的长度必须是n,我们记得兔子的“速度”是乌龟的两倍。 一旦乌龟进入循环,兔子就在循环中的某个地方(可能已经绕了几圈)。在任何情况下,它都是x节点,位于乌龟后面(请记住x如果你用笔和纸尝试,你会立即看到它。

为什么弗洛伊德的周期检测算法假设乌龟在遇到兔子之前最多只绕一圈?为什么它不能跑多圈?
无论是直观的还是正式的解释都将不胜感激。

我想我可以提供直观的解释

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

如果没有循环:
兔子将在乌龟之前到达列表的末尾,因此我们完成了

如果有一个循环:
它的长度必须是
n
,我们记得
兔子的“速度”是
乌龟的两倍。


一旦
乌龟
进入循环,兔子
就在循环中的某个地方(可能已经绕了几圈)。在任何情况下,它都是
x
节点,位于
乌龟
后面(请记住
x如果你用笔和纸尝试,你会立即看到它。