在乌龟和野兔算法中,为什么我们总是让野兔前进两步然后向前迈出一步然后比较它们,我们也可以让野兔向前迈出一步然后再检查它是否相等再增加两只乌龟如果它们相等,那么再次检查它们!我认为这有助于更快地找到循环?
例如。这个假的
tortoise := firstNode
hare := firstNode
forever:
if hare == end
return 'No Loop Found'
hare := hare.next
if hare == end
return 'No Loop Found'
if hare==tortoise
return true
hare = hare.next
tortoise = tortoise.next
if hare == tortoise
return 'Loop Found'
提前致谢
答案 0 :(得分:5)
路径由尾部和循环组成;兔子和乌龟都必须在它们到达环路之前穿过尾巴。由于野兔一次移动两步,它首先进入循环,然后围绕循环运行直到乌龟到达。直到乌龟到达环路的地方,它们两个都不可能占据同一个小区。
一旦乌龟到达循环的开始,野兔就在循环中的某个地方,有效k
在乌龟后面为k
步伐,其中k
肯定小于循环大小。对于乌龟制造的每一步,野兔制造两只,这使野兔更接近乌龟。因此,在乌龟移动一步之后,它们之间的距离为k-1
,然后下一步为k-2
,依此类推,直到野兔在k
步之后赶上。