乌龟和野兔算法

时间:2014-11-16 04:03:53

标签: algorithm

我正在阅读来自wikipedia的Tortoise和野兔算法。我想知道python伪代码是否错误。对于数组似乎失败:[1, 2, 2, 3, 4, 5, 6, 7, 8, 9, ....]一开始,两个值相遇,算法继续找到注定要失败的循环的开始。
我理解有i ≥ μ的条件,是否应该将此约束添加到代码中以查找循环的开始?
如果添加了此约束,算法是否应该终止并且在失败时返回没有找到循环或继续进行另一次迭代?如果输入是[1, 2, 2, 3, 4, 5, 3, 4, 5, 3, 4, 5, ....]怎么办?
这个算法如何保证在第一个会合点,两个指针都在一些周期内?

1 个答案:

答案 0 :(得分:4)

乌龟和兔子算法运行两个指针,一个位于偏移i,另一个位于偏移2i,两者都是从一开始的,所以最初是12,并且旨在检测链表式数据结构中的循环。

而且,为了清楚起见,它比较了指针而不是他们指向的数据值,我不确定你是否理解这一点,因为你没有这样做的机会&#39 ; t,我只是想提到它。

最初的起点是第一个元素上的乌龟和第二个元素上的野兔(假设它们当然存在 - 如果它们不存在,则不能循环),所以它不正确说明他们在一开始就是平等的。如果野兔循环,指针值只能变得相等,因此从后面捕获乌龟。