什么是检测链表中是否存在循环的最佳(停机)算法? [编辑] 分析时间和空间的渐进复杂度会更好,这样答案可以更好地进行比较。 [编辑] 最初的问题没有涉及出度> 1的节点,但有一些讨论。 那个问题更多的是“检测有向图中循环的最佳算法”。
在这种情况下,OysterD的代码将是最快的解决方案(顶点着色)。那真的会让我惊讶。我的解决方案最多只需通过列表两次(如果最后一个节点链接到倒数第二个节点),而在常见情况下(没有循环),它只需要通过一次。没有哈希,没有内存分配等。
在这种情况下,OysterD的代码将是最快的解决方案(顶点着色)。那真的会让我很惊讶。我的解决方案最多只需通过列表两次(如果最后一个节点链接到倒数第二个节点),在常见情况下(没有循环)只需通过一次。没有哈希,没有内存分配等等。是的。我注意到表述不完美,并进行了重新措辞。我仍然相信聪明的哈希可能会更快 - 仅仅是一点点。我相信你的算法是最好的解决方案。只是为了强调我的观点:现代垃圾收集器使用顶点着色来检测依赖关系中的循环,因此有一个非常实际的用例。它们主要使用位标志来执行着色。