【发布时间】:2014-11-16 04:03:52
【问题描述】:
我正在阅读 wikipedia 的龟兔算法。我想知道python伪代码是否错误。数组似乎失败了:[1, 2, 2, 3, 4, 5, 6, 7, 8, 9, ....] 一开始,这两个值相遇,算法继续寻找注定失败的循环的开始。
我知道有i ≥ μ 的条件,是否应该将此约束添加到代码中以查找循环的开始?
如果添加了这个约束,算法应该终止并在失败时返回未找到循环还是继续进行另一次迭代?因为如果输入是 [1, 2, 2, 3, 4, 5, 3, 4, 5, 3, 4, 5, ....] 怎么办?
这个算法如何保证在第一个交汇点,两个指针都在某个循环内?
【问题讨论】:
-
那么当你运行代码时会发生什么?
-
我没有实现它,但我相信它会是无限循环。
-
那么如何实现它。或者你真的认为一个超过 50 年的算法是错误的并且没有被忽视?此外,它适用于任何乘数。选择 2 是因为它将允许以最快的方式检测循环。
-
该算法不适用于数组,而是迭代序列。您的反例不是迭代序列,因为您有 f(2) = 2 和 f(2) = 3。
标签: algorithm