如何分析在不同情况下行为可能发生变化的程序的复杂性?

时间:2014-05-06 06:45:08

标签: time-complexity code-complexity

当我遇到这个问题时 - using two stacks to implement a queue,我想知道如何分析它的复杂性。

this为例:

  • 对于queue(),复杂度始终为O(1),因为它只是插入收件箱。
  • 对于dequeue(),大部分时间复杂度也是O(1),但是当outbox为空时,它需要一个循环来将所有元素从收件箱移动到发件箱。那么这个操作的复杂性是什么?

分析此类问题时的想法是什么?

1 个答案:

答案 0 :(得分:0)

正如Dave L.在他的解释中所述,“每个元素将被推动两次并弹出两次,给予摊销的恒定时间操作”。这是因为每个需要将n个元素从一个堆栈移动到另一个堆栈的队列(需要O(n)时间)后面会出现n-1个队列,这个队列只需要O(1)时间。

因此,表达dequeue()复杂性的一种方法是说它已经用O(1)的最佳cas和O(n)的最坏情况分摊了常数时间。