Algorithm 连接这两个概念需要帮助

Algorithm 连接这两个概念需要帮助,algorithm,data-structures,queue,linked-list,Algorithm,Data Structures,Queue,Linked List,最近学习了“环形队列”的概念,因为我更熟悉用于链表周期检测的龟兔算法,我想知道环形队列的工作原理是否与链表中的上述循环检测算法有某种联系,因为它们都是围绕一个循环进行遍历的,然后两个指针相遇。我想你在这里只看到了模式 循环缓冲区只是一种数据结构。龟兔算法也适用于不仅仅是循环队列的事情,甚至在“指针”是隐式的情况下(比如为函数寻找固定点)。我不确定这些是否直接相关 在链表检测算法中,我们试图通过选择一种方案来检测链表中循环的可能性,该方案在存在链表时强制两个指针碰撞 在循环缓冲区中,指针冲突表示缓

最近学习了“环形队列”的概念,因为我更熟悉用于链表周期检测的龟兔算法,我想知道环形队列的工作原理是否与链表中的上述循环检测算法有某种联系,因为它们都是围绕一个循环进行遍历的,然后两个指针相遇。

我想你在这里只看到了模式


循环缓冲区只是一种数据结构。龟兔算法也适用于不仅仅是循环队列的事情,甚至在“指针”是隐式的情况下(比如为函数寻找固定点)。

我不确定这些是否直接相关

在链表检测算法中,我们试图通过选择一种方案来检测链表中循环的可能性,该方案在存在链表时强制两个指针碰撞

在循环缓冲区中,指针冲突表示缓冲区已满或为空

我的猜测是,我们在这里可以得出的唯一联系是,循环数据结构易于检测某些条件,只有两个指针在局部移动,而不是更“全局”的算法。例如,在链表中查找循环也可以通过DFS完成。

a是一种数据结构,是一种。。。算法,所以任何类比都有局限性

但我会尝试:

+-------------------+-----------------------------------+---------------------------+
|                   |          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    |
+-------------------+-----------------------------------+---------------------------+
  • 第一幕:圆形缓冲乌龟开始睡觉,这与弗洛伊德的算法不同,在弗洛伊德的算法中,它也会移动(尽管移动缓慢)
  • 高潮:如果兔子遇到乌龟,那么这个循环已经“找到”。尽管乌龟一直在睡觉,但这保证在循环缓冲区中发生(缓冲区是循环的,所以缓冲区中的所有点都是循环的一部分)。这与Floyd的算法不同,在Floyd算法中,会议可能不会发生,因为链表可能没有循环。此外,循环(如果存在)可能不包括起点,这就是为什么睡觉的乌龟不适合它的情节
  • 第二幕/结束:当兔子在一个圆形缓冲区中遇到(正在睡觉的)乌龟时,它会把乌龟叫醒,然后它们一起走,永远地穿越这个循环。在弗洛伊德的算法中,两者的相遇是故事的结束,尽管故事也可能以兔子到达终点线(遇见其他人?)而结束