最近拿起了“Ring Queue”的概念,因为我比较熟悉Tortoise和Hare算法的链表循环检测,我想知道Ring Queue的工作原理是否与Linked List中的上述循环检测算法有某种联系因为他们都在围绕一个周期进行遍历,所以两个指针相遇。
答案 0 :(得分:5)
circular-buffer是数据结构,Floyd's algorthm是...算法,因此任何类比都有限制。
但我会尝试:
+-------------------+-----------------------------------+---------------------------+
| | Circular buffer | Floyd's algorithm |
+-------------------+-----------------------------------+---------------------------+
| Tortoise | Start pointer | Slow pointer |
| Hare | End pointer | Fast pointer |
| Act I | Tortoise sleeps, hare walks | Tortoise walks, hare runs |
| Act II | Hold hands; walk together forever | No act II |
| Ends Romantically | Yes | Only if a cycle exists |
+-------------------+-----------------------------------+---------------------------+
答案 1 :(得分:0)
我认为你只是在这里看到模式。
循环缓冲区只是一种数据结构。乌龟& Hare算法也适用于不仅仅是循环队列的东西,甚至在“指针”是隐式的情况下(比如找到函数的固定点)。
答案 2 :(得分:0)
我不确定这些是否直接相关。
在链表检测算法中,我们试图通过选择一种方案来检测链表中循环的可能性,如果有列表则强制两个指针发生冲突。
在循环缓冲区中,指针冲突意味着缓冲区已满或者它是空的。
我对这里唯一可以得出的连接的猜测是,循环数据结构可以检测某些条件,只有两个指针在本地移动,而不是更“全局”的算法。例如,在链表中查找循环也可以通过DFS完成。