C# 规模有限;添加、删除和洗牌

C# 规模有限;添加、删除和洗牌,c#,java,big-o,abstract-data-type,C#,Java,Big O,Abstract Data Type,将O(1)添加到队列中。那么,去除效率是多少?我对此有点困惑。将其设为O(1)是有意义的,因为我们正在从头部移除,但如果队列达到其最大限制5,那么在插入新元素之前,队列将必须以1的速度退出队列,并向前移动/移动前4个元素,以将新元素插入后部(第5个位置)。还是O(1)吗?或者可能是O(n),因为洗牌方法 我不需要代码或深入的解释,只要一个逻辑解释就可以了。如果队列是作为循环缓冲区实现的,例如.NETqueue类,那么这仍然是一个O(1)操作,即使您都在末尾添加一个项目,并从头部删除一个项目。作为

将O(1)添加到队列中。那么,去除效率是多少?我对此有点困惑。将其设为O(1)是有意义的,因为我们正在从头部移除,但如果队列达到其最大限制5,那么在插入新元素之前,队列将必须以1的速度退出队列,并向前移动/移动前4个元素,以将新元素插入后部(第5个位置)。还是O(1)吗?或者可能是O(n),因为洗牌方法


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

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

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