【问题标题】:Floyd's cycle-finding algorithm proof (Detecting loops in linked lists)Floyd 的寻环算法证明(Detecting loops inlinked lists)
【发布时间】:2017-05-28 22:39:35
【问题描述】:

该算法使用快速和慢速指针来检测链表中的循环。我的问题是,如何证明循环中两个指针碰撞的点到循环起点的距离等于链表头到循环起点的距离?

【问题讨论】:

  • 这个问题更适合cs.stackexchange.com
  • 这两个距离通常不相同
  • @MattTimmermans 如果它们不相等,那么您将如何检测循环的开始?如果你不断地将两个指针加一并且距离不相等,那么这意味着被重置到链表头部的指针将再次进入循环。那你会怎么做呢?

标签: algorithm pointers linked-list floyd-cycle-finding


【解决方案1】:

将慢速指针的速度视为“x”,将快速指针的速度视为“2x”。使用简单的相对运动,您可以证明如果存在循环,这两者最终会相遇。
现在,考虑时间相同,所以快指针行进的距离是慢指针的两倍。
如果慢速行进 a+b 的距离,那么快速行进 a+2b+c。该链接将使您更好地理解。
2*(a+b)=a+2b+c
求解这个方程得到 a=c。
这个问题已经回答过了,您可以参考以下链接:
https://cs.stackexchange.com/questions/10360/floyds-cycle-detection-algorithm-determining-the-starting-point-of-cycle

【讨论】:

猜你喜欢
  • 2017-05-29
  • 1970-01-01
  • 2016-01-18
  • 1970-01-01
  • 1970-01-01
  • 2014-05-09
  • 2012-07-25
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多