【问题标题】:Help Needed in Connecting These Two Concepts连接这两个概念所需的帮助
【发布时间】:2011-06-27 19:50:34
【问题描述】:

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

【问题讨论】:

    标签: algorithm data-structures queue linked-list


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

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

      在链表检测算法中,我们试图通过选择一种方案来检测链表中存在循环的可能性,如果存在链表则强制两个指针发生冲突。

      在循环缓冲区中,指针冲突意味着缓冲区已满或为空。

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

      【讨论】:

        【解决方案3】:

        我认为您在这里只是看到了模式。

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

        【讨论】:

          猜你喜欢
          • 2014-06-20
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2015-07-07
          • 2013-05-08
          • 1970-01-01
          • 2018-02-11
          • 2022-01-10
          相关资源
          最近更新 更多