能否有人帮我解释一下 Brent 的循环检测算法。我不太明白为什么要 "搜索比 λ 和 μ 都大的最小的 2 的幂次方 2^i"?幂次方2是如何在循环检测中发挥作用的呢?它与 Floyd 的循环检测算法有关吗?从基础知识上来说,我无法理解。请帮忙!
这种方法使用递增的步长(1、2、4、8……)尽快进入循环。当P = 2^k变得大于λ和μ时,乌龟(T)就在循环中,而兔子(H)最多走P步就能再次遇到(站着的)乌龟。仿真似乎会有用。让我们假设列表为0-1-2-3-4-5-6-7-3。
P=1 T=0 H=0; H makes 1 step and doesn't meet T
P=2 T=1 H=1; H makes 2 steps and doesn't meet T
P=4 T=3 H=3; H makes 4 steps and doesn't meet T
P=8 T=7 H=7; H makes 5 steps and meets T !!!!!
注意: 当P=4时,T在循环内部,但兔子没有经过整个周期(P>=μ但P<λ)
因此,我们发现μ<8且λ=5。然后我们想找到μ(循环入口点)
T=0 H=0; H makes 5 steps; H=5
while T <> H
move both
T=1 H=6
T=2 H=7
T=3 H=3 !!!!!!!