algorithm - 连接这两个概念需要帮助

标签 algorithm data-structures queue linked-list

最近接触到“Ring Queue”的概念,由于比较熟悉链表循环检测的龟兔赛跑算法,不知Ring Queue的工作原理是否与上述链表中的循环检测算法有某种联系因为它们都在围绕一个循环进行遍历,所以两个指针相遇。

最佳答案

A 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. 第一幕:故事开始时循环缓冲区乌龟 sleep ,不像 Floyd 的算法,它也会移动(尽管速度很慢)。
  2. 高潮:如果兔子遇到乌龟,循环就已经“找到”了。这保证发生在循环缓冲区中,尽管乌龟一直在 sleep (缓冲区是循环的,因此其中的所有点都是循环的一部分)。这与 Floyd 的算法不同,在 Floyd 的算法中,可能不会发生 session ,因为链表可能没有循环。此外,循环(如果存在)可能不包括起点,这就是为什么睡着的乌龟不适合它的情节。
  3. 第二幕/结尾:当兔子在环形缓冲区中遇到(沉睡的)乌龟时,乌龟会被唤醒,然后它们一起走,永远穿越循环.在 Floyd 的算法中,两人的相遇就是故事的结局,尽管故事也可能以兔子到达终点线(遇到其他人?)而结束。

关于algorithm - 连接这两个概念需要帮助,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5007809/

相关文章:

algorithm - (logn + 3n) 的大 O 表示法是什么

python - 我将如何在实时场景中使用 concurrent.futures 和队列?

java - 关于ConcurrentLinkedQueue

c# - 使用二维数组中的点列表绘制样条曲线

arrays - 查找数组中指定元素的第一次出现

java - 访问Hashmap中的Hashmap,并以某种格式打印出来

java - 如何在同一条语句中初始化队列

algorithm - 使用布隆过滤器有什么好处?

python - 为什么斐波那契函数的性能时间图不平滑?

java - 如何在 O(n) 时间内就地反转某个给定大小的 block 中的单链表?