为什么这个运行时间为o(n)?使用两个队列来实现堆栈弹出

时间:2015-10-26 22:07:41

标签: performance time asymptotic-complexity

For pop operation : 
If Q1 is empty , an underflow has occurred , throw an error
Else , we copy all but the last element of Q1 to Q2 , we return the last element copied .         
We then copy back the elements from Q2 to Q1.

我认为这将是不变的增长率,因为如果它有一个项目,那么总是会产生恒定的时间?

2 个答案:

答案 0 :(得分:1)

  

我们将Q1的最后一个元素复制到Q2

复制元素的时间取决于元素的数量。为O(n)。

  

然后我们将元素从Q2复制回Q1

也是O(n)操作。两个O(n)操作仍然是O(n)。

  

因为如果它有一个项目,那么总是会产生恒定的时间吗?

当然,如果你总是有一个项目,它会在恒定的时间内运行。当你有n个项目时,Big-O符号表示系统的行为,而n很大。

答案 1 :(得分:1)

复制元素本身需要O(n)运行时复杂度。如果你熟悉渐近符号意味着什么,你知道它是指“基本”操作的数量。您必须一次一个一个地复制内存。即使您复制的内存块仍然至多是一个恒定的数量,我们称之为k。进行N/k操作意味着您仍然具有O(n)复杂性。现在您可以看到第一步需要O(n),第二步需要O(1)(返回并指定?),最后一步需要再次O(n),在对它们求和之后会得到{ {1}}。