【问题标题】:limited size; add, remove and shuffle尺寸有限;添加、删除和随机播放
【发布时间】:2014-03-19 19:57:58
【问题描述】:

添加到队列将是 O(1)。那么去除效率如何呢?我对此感到有些困惑。它是 O(1) 是有意义的,因为我们正在从头部移除,但是如果队列达到它的最大限制 5,因此在插入新元素之前,队列必须出列 1 并移动/移动顶部4 个元素朝前插入新元素在后面(第 5 个位置)。它仍然是O(1)吗?或者可能是因为洗牌方法的 O(n)。

我不需要代码或深入的解释,只要一个合乎逻辑的解释就可以了。

【问题讨论】:

    标签: c# java big-o abstract-data-type


    【解决方案1】:

    如果队列被实现为一个循环缓冲区,例如 .NET Queue 类,那么这仍然是一个 O(1) 操作,即使你在末尾添加一个项目并删除头部的一项。作为一个循环缓冲区,它不需要移动所有的项目,它只需要调整两个整数索引,表示队列的开始/结束在缓冲区中的位置。

    最重要的是,如果容量为 5,那么您可以说,即使您确实需要移动所有项目,您也不会移动超过 5 个。一切都是 O( 1)当n很小时。大 O 仅在 'n' 可以扩展到大数字时才相关。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-04-14
      • 1970-01-01
      • 2020-02-08
      相关资源
      最近更新 更多