在Floyd的循环查找算法中跳过多个节点

时间:2012-06-12 06:42:55

标签: algorithm data-structures floyd-cycle-finding

今天我正在阅读Floyd的链接列表中检测循环的算法。 我只是想知道如果我们跳过多个节点会不会更好,(比如2) 更快的环路检测?

例如:

fastptr=fastptr->next->next->next.

请注意,更改fastptr时会考虑副作用。

1 个答案:

答案 0 :(得分:4)

你的建议仍然是正确的,但它不会改变算法的速度。如果你看看wiki中的乌龟和野兔算法:

  

算法的关键见解是,对于任何整数i≥μ和k   ≥0,x i = x i +kλ,其中λ是长度   找到循环,μ是循环的起始位置。特别是,   每当i =kλ≥μ时, x i =   X <子> 2I

在粗体部分,您还可以说 x i = x 3i ,或任何其他系数,但关键洞察力是找到,你会发现多少次跳跃并不重要,算法顺序取决于 i 的位置。