【问题标题】:Brent's cycle detection algorithm布伦特循环检测算法
【发布时间】:2012-06-03 14:37:49
【问题描述】:

谁能帮我解决布伦特的循环检测算法。我不明白为什么“搜索两个大于 λ 和 μ 的 2^i 的最小幂”? 2 的幂如何在循环检测中发挥作用。它是否与弗洛伊德的循环检测算法有关?我无法从基础知识中得到它。请帮忙 !

【问题讨论】:

  • @WillNess 这与素数有什么关系?我认为应该删除素数标签。
  • @gsingh2011 用于素数分解算法。也许应该添加/替换素数分解标记... :)

标签: algorithm primes


【解决方案1】:

此方法使用递增的步骤 (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 在循环内,但 hare 不会经历整个循环(P >= μ but P

所以我们发现 μ

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 !!!!!!!

我们刚刚发现 μ=3

【讨论】:

  • 谢谢...帮助很大:)
  • 你能解释一下为什么这里使用“二的幂”吗?如果我们的目标是尽快让兔子进入循环,为什么不使用“3 的幂”或“5 的幂”呢?如果使用“5 的幂”,这个算法仍然有效吗?最后,为什么 λ 等于遇到海龟之前的最后一步?我们有什么证据可以把这个数字作为周期的长度?谢谢。
  • @carawan,我想 3 的幂和 5 的幂也可以,尽管我没有证据。我确实进行了一些简单的测试。
    如果较慢的迭代器根本不动,那么算法就会被破坏,因为较慢的迭代器可能在循环之外。
    如果较慢的迭代器尾随较快的迭代器,并且跟随距离始终低于固定限制(如 99),则算法被破坏,因为循环大小可能超过 99。
    如果跟随距离增长逐渐地,并且追随者确实移动了,那么我认为他们最终会相遇。
猜你喜欢
  • 2011-09-17
  • 1970-01-01
  • 2012-06-18
  • 2011-11-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-10-26
相关资源
最近更新 更多