Re: [请益] linked list里如何找cycle?

楼主: nikeasyanzi (nikeasyanzi)   2013-10-07 22:19:13
想请问版上先进
如果只是单纯singal linking list
那可以用floyd's algorithm 即可解
但万一是任意node 允许连到两个以上相异点 类似m-way tree
parent 可能不只有一个child
用floyd's algorithm不就解不了?
只能用kruskal algorithm 一个个edge加入来检查cycle这样 是嬷?
还是有其他更好的算法??
恳请赐教!
※ 引述《FRAXIS (喔喔)》之铭言:
: ※ 引述《pikahacker (喵)》之铭言:
: : 如果有人给妳一个linked list
: : 有办法在O(N)时间内,得知linked list中有没有cycle?
: 这种题目算是面试常见题吧..
: 有时候除了要判断有没有cycle,还会问cycle起点在哪?
: 这种问题都会要求O(n)时间O(1)变量,且串行是唯读的。
: 还有一个变型,给定两条单向炼结串行L和L',但是L和L'可能在中途会
: 指向同一个节点,然后就重合到串行的尾巴(因为是单向的)。
: 要怎么判断有无重合?重合的起点在哪? 要求O(n)的时间和O(1)变量。
: 另外也有一个相关问题
: 给定一个长度为n+1的阵列 a1 ... an+1,1 <= ak <= n for all k
: 除了一对ai=aj之外,其他ak的值都是相异的
: ai是多少?i和j是多少? 只能使用O(n)的时间和O(1)变量,阵列是唯读。
作者: scwg ( )   0000-00-00 00:00:00
这边讨论的 singly linked list 是用走一步走两步线性解的吧对任意 non-weighted graph 用 bfs 或 dfs 都可以只是要额外空间 (或时间), 用不到 Floyd-Warshall 啊..
作者: singlovesong (~"~)   0000-00-00 00:00:00
linked list 不准有两个next吧?
楼主: nikeasyanzi (nikeasyanzi)   0000-00-00 00:00:00
回scwg大:没错 若任意的graph 用DFS BFS 是可以的回singal link list是有定义只有一个node没错只是小弟想询问 万一不是link list 怎么办因为floyd 似乎只适用在只有一个child 的graph上!!??
作者: scwg ( )   0000-00-00 00:00:00
你看的是哪里的 floyd o_O
作者: guest2 (wayne)   0000-00-00 00:00:00
我猜是指Tortoise and Hare Algorithm (floyd algo.)

Links booklink

Contact Us: admin [ a t ] ucptt.com