Algorithm 跳过Floyd'中的多个节点;s循环查找算法

Algorithm 跳过Floyd'中的多个节点;s循环查找算法,algorithm,data-structures,floyd-cycle-finding,Algorithm,Data Structures,Floyd Cycle Finding,今天我在读弗洛伊德的链表循环检测算法。 我只是想知道,如果我们跳过多个节点,不是会更好吗 为了更快的环路检测 例如: fastptr=fastptr->next->next->next. 请注意,更改fastptr时将考虑副作用。您的建议仍然正确,但不会改变算法的速度。如果您看一下中的龟兔算法: 该算法的关键之处在于,对于任何整数≥ μ和k ≥ 0,席=席+K,其中, 要找到的回路,μ为回路的起始位置。特别地, 每当i=kλ≥ μ、 因此,xi= x2i 在粗体部分,您也可以

今天我在读弗洛伊德的链表循环检测算法。 我只是想知道,如果我们跳过多个节点,不是会更好吗 为了更快的环路检测

例如:

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

请注意,更改
fastptr

时将考虑副作用。您的建议仍然正确,但不会改变算法的速度。如果您看一下中的龟兔算法:

该算法的关键之处在于,对于任何整数≥ μ和k ≥ 0,席=席+K,其中, 要找到的回路,μ为回路的起始位置。特别地, 每当i=kλ≥ μ、 因此,xi= x2i


在粗体部分,您也可以说xi=x3i,或任何其他系数,但关键的洞察是找到i,找到它的跳跃次数并不重要,算法的顺序取决于i

的位置。您的建议仍然是正确的,但它不会改变算法的速度。如果您看一下中的龟兔算法:

该算法的关键之处在于,对于任何整数≥ μ和k ≥ 0,席=席+K,其中, 要找到的回路,μ为回路的起始位置。特别地, 每当i=kλ≥ μ、 因此,xi= x2i


在粗体部分,您也可以说xi=x3i,或任何其他系数,但关键的洞察是找到i,它与您将找到多少次跳跃并不重要,算法的顺序取决于i的位置,如果您跳过超过1次,您可能会在最早的时候漏掉循环检测。@leppie,您能举一个这样的例子吗?更糟糕的是,您可能根本检测不到循环。考虑长度为6的环,当龟在节点1时,兔子在节点0处。如果兔子在乌龟的每一步中移动三步,则随后的乌龟/兔子位置为2/3、3/0、4/3、5/0、0/3、1/0、2/3无限远,并且从未检测到环路的存在。。。。除了我看不到一种方法来获得这样一个无限循环的必要初始条件。该死的,现在我要彻夜未眠地思考这个问题。如果你跳过1个以上,你可能会错过最早的循环检测。@leppie,你能举一个这样的例子吗?更糟糕的是,你可能根本检测不到循环。考虑长度为6的环,当龟在节点1时,兔子在节点0处。如果兔子在乌龟的每一步中移动三步,则随后的乌龟/兔子位置为2/3、3/0、4/3、5/0、0/3、1/0、2/3无限远,并且从未检测到环路的存在。。。。除了我看不到一种方法来获得这样一个无限循环的必要初始条件。该死的,现在我要彻夜未眠地想着这件事。