【发布时间】:2011-06-27 19:50:34
【问题描述】:
最近接触了“Ring Queue”的概念,由于我比较熟悉链表循环检测的 Tortoise and Hare 算法,不知道 Ring Queue 的工作原理是否和 Linked List 中的上述循环检测算法有某种联系因为它们都在围绕一个循环进行遍历,所以两个指针相遇。
【问题讨论】:
标签: algorithm data-structures queue linked-list
最近接触了“Ring Queue”的概念,由于我比较熟悉链表循环检测的 Tortoise and Hare 算法,不知道 Ring Queue 的工作原理是否和 Linked List 中的上述循环检测算法有某种联系因为它们都在围绕一个循环进行遍历,所以两个指针相遇。
【问题讨论】:
标签: algorithm data-structures queue linked-list
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 |
+-------------------+-----------------------------------+---------------------------+
【讨论】:
我不确定这些是否直接相关。
在链表检测算法中,我们试图通过选择一种方案来检测链表中存在循环的可能性,如果存在链表则强制两个指针发生冲突。
在循环缓冲区中,指针冲突意味着缓冲区已满或为空。
我对我们可以在这里得出的唯一联系的猜测是,循环数据结构可以检测某些条件,只有两个指针在本地移动,而不是更“全局”的算法。例如,在链表中查找循环也可以通过 DFS 完成。
【讨论】:
我认为您在这里只是看到了模式。
循环缓冲区只是一个数据结构。 Tortoise & Hare 算法也适用于不仅仅是循环队列的事情,甚至在“指针”是隐式的情况下(比如为函数寻找固定点)。
【讨论】: