文章目录
floyda判圈算法
Floyd判圈算法(Floyd Cycle Detection Algorithm),又称龟兔赛跑算法(Tortoise and Hare Algorithm),是一个可以在有限状态机、迭代函数或者链表上判断是否存在环,求出该环的起点与长度的算法。该算法据高德纳称由美国科学家罗伯特·弗洛伊德发明
设圈长为n,线性长为m,
兔子(hare)和乌龟(tortoise)同时从A点出发,兔子的速度为乌龟速度2倍。设兔为q,龟为p
当乌龟到达B点时,兔子到达点D
step1
设环初始点为0 则点D坐标h和m对n同余(可以看作一个在环上走了F,一个从表起点到环起点走了F,之所以说同余是因为这个F可能已经是绕了环走了好几圈了)
此时p往前走n-h,q走2*(n-h)q与p相逢于同一点
step2
q放于该点,p放于表起始点,则两者可通过都1步步走到达环的起始位置。(m和h对n同余)
(看完上面,可以试着脑补一下,我的朋友)
<