我对合并排序中的合并函数的运行时分析存在一些混淆。合并排序合并运行时间anaylsis
Merg(A,p,q,r)
1 n1=q-p+1
2 n2=r-q
3 let L[1..n1+1] and R[1..n2+1] be new arrays
4 for i=1 to n1
5 L[i] = A[p+i-1]
6 for j =1 to n2
7 R[j] = A[q+j]
8 L[n1+1] = infinity
9 R[n2+1] = infinity
10 i =0
11 j=0
12 for k=p to r
13 if L[i]<=R[j]
14 A[k]=L[i]
15 i=i+1
16 else A[k] = R[j]
17 j=j+1
在我的书,它说以下内容:看到,合并过程运行在O(n)的时间,其中n = R-P + 1,观察到每个线1-3和8-11的需要一定的时间,第4-7行的for循环占用O(n1 + n2)= O(n)时间,并且对于第12-17行的循环有n次迭代,每次迭代需要恒定的时间
我的问题是为什么第12-17行每次迭代需要不变的时间,并且不会影响运行时间,但是第4至7行的 不需要一定的时间。对我来说,似乎两个循环都在做同样的事情。有人可以帮我澄清一下吗?谢谢!
OH WOW。 IM哑巴哈哈。出于某种原因,我想他们是嵌套的,这会使它成为O(n^2),但它确实是2n,它只是O(n)。书的解释绝对不是以最好的方式写的,但我现在明白了。谢谢! – Wonger