分析大哦符号伪代码

时间:2010-04-09 15:26:10

标签: big-o analysis

我无法理解算法分析。我似乎可以识别线性或平方算法但是完全丢失了nlogn或logn算法,这些似乎主要源于while循环?这是我看到的一个例子:

Algorithm Calculate(A,n) 
Input: Array A of size n 
t←0 
for i←0 to n-1 do 
   if A[i] is an odd number then 
      Q.enqueue(A[i]) 
   else 
      while Q is not empty do 
         t←t+Q.dequeue() 
while Q is not empty do 
  t←t+Q.dequeue() 
return t 

我最好的猜测是for循环执行n次,它嵌套while循环q次使NQ和最后while循环也Q次导致O(NQ + Q)是线性的?

1 个答案:

答案 0 :(得分:1)

首先,我们假设Q最初是空的。

Q只会以与主循环执行速度相同的速度增长。例如,如果我们到目前为止迭代了3次,那么Q最多是3个元素。因此,当内部while循环执行时,它最多只能执行当前值'i'。这意味着内部循环不是n ^ 2上的真实情况(这不是你声称的东西)。然而,由于Q最多只能是'i'元素大,因此我们知道O(计算)< = O(2N)。因为在O表示法中我们真的不关心标量,所以它是O(N)。

除非我错了:)