我可以使用Tortoise and Hare算法编写代码,它有效。但这对我来说没有直观的意义。感觉它可以分解为正确的周期长度和野兔步长。
有没有其他解释来帮助我理解?
如果有一个循环,你可以把它想象成一条无限重复的数字线。
在龟兔算法开始时,我们将兔子放在前面一个节点。但是一旦它们进入循环,你可以想到兔子被放置在后面。
和野兔的典型步骤分别为 1 和 2。无论兔子落后多远,它都减少到两个选择——后退 1 步或后退 2 步。
如果野兔后退 1 步,它将在下一步与相遇。招式1,野兔招式2。
如果野兔后退 2 步,将向前移动 1,野兔将向前移动 2。现在,野兔只后退一步,他们将在下一步见面。
对我来说,这是有道理的,它似乎可以推广到野兔采取的任何大小步骤。对我来说,关键的见解是将我的思维方法从循环转变为无限重复的数字线。
我刚刚看到今天使用它的某人的解决方案。我将解释我从中理解的内容。
假设和野兔都从大小为 5 的列表中的第 1 位开始。前进 1 步,野兔一次前进 2 步。
第一次迭代: = 2, 野兔 = 3, 野兔落后 4 步 (4,5,1,2(
第二次迭代: =3, 野兔 = 5, 野兔落后 3 步 (1,2,3(
第三次迭代: = 4, 野兔 = 2, 野兔落后 2 步 (3,4(
第四次迭代: = 5, 野兔 = 4, 野兔落后 1 步 (5(
第五次迭代: = 1, 野兔 = 1, 野兔追上了。
每次迭代,差距减少 1。所以最终野兔追上了。