龟兔算法背后的直觉



我可以使用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。所以最终野兔追上了。

最新更新