Big-O表示法:算法的顺序是什么?

时间:2015-01-29 02:58:20

标签: c++ algorithm stack big-o asymptotic-complexity

我无法理解Big-O表示法。这是我写的算法,它应该是(C ++)Stack的size()函数的替代品,我需要确定它的运行时间,假设有 n 调用它时堆栈中的元素。

Algorithm size():
    Input: none
    Output: A constant value of the size of an n-element stack.
Let V be a vector of n type objects.
Let S be the name of the stack that is being operated on by this function.
K ← 0                       
V
while !empty() 
    V.push_back(top())      //Keep track of elements in V
    S.pop()             //Remove element from stack
    K ← K + 1           //Count the size of the stack
return K                //Return the size of the stack  
for i ← K – 1, i > 0, i-- do            
    S.push(V[i])            //Retain initial contents of stack

如果我错了,请纠正我:

  • 在K←0行中,我认为这是O(1)操作。

  • 创建向量V也是O(1)操作。

  • while循环是一个O(n)操作,因为它会一直运行,直到它清空包含 n 内容的堆栈。

  • 将值推回V是O(n)操作。

  • 从堆栈中弹出内容S是O(n)操作。

  • 返回K是O(1)操作。

  • for循环是O(n)操作。

  • 将内容推回S是O(n)操作。

1 个答案:

答案 0 :(得分:1)

推送和弹出操作是O(1)。包含推送的for循环是O(n),push是O(1)。

麻省理工学院总是把好东西放到学习http://web.mit.edu/16.070/www/lecture/big_o.pdf