我无法理解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)操作。
答案 0 :(得分:1)
推送和弹出操作是O(1)。包含推送的for循环是O(n),push是O(1)。
麻省理工学院总是把好东西放到学习http://web.mit.edu/16.070/www/lecture/big_o.pdf。