我无法理解算法分析。我似乎可以识别线性或平方算法但是完全丢失了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)是线性的?
答案 0 :(得分:1)
首先,我们假设Q最初是空的。
Q只会以与主循环执行速度相同的速度增长。例如,如果我们到目前为止迭代了3次,那么Q最多是3个元素。因此,当内部while循环执行时,它最多只能执行当前值'i'。这意味着内部循环不是n ^ 2上的真实情况(这不是你声称的东西)。然而,由于Q最多只能是'i'元素大,因此我们知道O(计算)< = O(2N)。因为在O表示法中我们真的不关心标量,所以它是O(N)。
除非我错了:)