【发布时间】:2017-01-19 11:58:19
【问题描述】:
我已经看过question,它讨论了在链表中查找循环的算法。我已经阅读了Floyd's cycle-finding algorithm 解决方案,在很多地方都提到我们必须采取两个指针。一个指针(slow/tortoise)增加 1,另一个指针(faster/hare)增加 2。当它们相等时,我们找到循环,如果更快的指针达到 null,则链表中没有循环。
现在我的问题是为什么我们将更快的指针增加 2。为什么不做别的?增加 2 是必要的,或者我们可以将其增加 X 以获得结果。如果我们将更快的指针增加 2 是否有必要找到一个循环,或者可能存在需要增加 3 或 5 或 x 的情况。
【问题讨论】:
-
不幸的是,您链接到的第一篇文章(弗洛伊德算法)是由不太关心教别人如何理解算法的人撰写的。我可以接受该算法有效,但我还没有找到一个很好的 english 描述为什么 它有效。希望这个答案能得到那个描述。
-
@Lasse 我的情况也是如此,我知道它有效,但不明白这背后的逻辑和原理。
-
看看Brent's algorithm,反正比较好。
-
@LasseVågsætherKarlsen 看到这个answer
标签: algorithm data-structures linked-list cycle floyd-cycle-finding