stack - 堆栈、队列、集合和双端队列的 Big-O 是什么?

标签 stack set queue big-o deque

与插入、搜索、索引、空间和删除复杂性相关的堆栈、队列、集合和双端队列的 Big-O 效率是多少?

最佳答案

这实际上取决于每个数据结构的实现。我将讨论一些,以便您了解如何确定这一点。

让我们假设 Stack 类是使用 Node 实现的(它也可以用 LinkedListArrayListarrray 等来实现)。

Node top, bottom;
public Stack(Node n){
    top = bottom = n;
}

Stack 有 3 个主要方法:peek , push , 和 pop .
public int peek(){
    return top.value; //only return value
}

没有涉及太多处理。它只是返回一个原始值。这是 O(1) 对于时间和空间。
public void push(Node n){
    n.next = top;
    top = n;
}

仍然没有真正的处理。这是 O(1) 对于时间和空间。让我们跳过 pop()并尝试更有趣的事情。让我们尝试一个名为 contains(int v) 的方法.它将搜索堆栈以查看它是否包含 Node其中包含一个等于 v 的值.
public bool contains(int v){
    Node current = top;
    while(current != null){
        if(current.value == v){
            return true;
        }
        current = current.next;
    }
    return false;
}

基本上,我们将遍历 Node 引用,直到找到值或到达终点。在某些情况下,您会在早期发现值(value),而在某些情况下,您会发现值(value)。但是,我们关心最坏的情况!最糟糕的情况是我们必须检查每一个 Node .说有 节点,那么我们有 O(n) .

你可以将这些分析技巧应用到其他数据结构上,剩下的就可以自己解决了。还不错。祝你好运。 :)

关于stack - 堆栈、队列、集合和双端队列的 Big-O 是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25413130/

相关文章:

c++ - C++中如何匹配两个数组的内容

bash - 1 : command not found

java - ArrayBlockingQueue add 方法是即时的吗?

c++ - 我正在返回一个值,但编译器告诉我 "function must return a value"

windows - Windows x86 堆栈中的堆栈是如何定义的?

c - C 中数组和指针的基本行为

algorithm - 找到曼哈顿距离中两组之间的距离

c++ - 计算对C++的堆栈需求;如何获得可读的符号表?

c++ - 如何打印队列?

node.js - 使用 Node JS 库的 Azure 服务总线队列的最大吞吐量?