代码片段part2的复杂性

时间:2011-08-20 14:55:36

标签: algorithm complexity-theory

根据输入大小给出以下代码片段的复杂性 N:

for(int i=0;i<n;i++) // n*
    for(int j =1;j<=n;j=j*2) // n/2 (its half n, but I assume it still counts as n, or is it log(n)?)
        a[i]=a[j-1]/2; // 1

for(int i=0;i-n;i++) // n*
    if(a[i] %2==0)  // 1*
        a[i]=2*a[i]; // 1

你从下往上开始。 是复杂性:n ^ 2 + n所以它是O(n ^ 2)?

我是否可以在任何地方了解如何计算简单算法的复杂性?

1 个答案:

答案 0 :(得分:4)

当你怀疑时,

for(int j =1;j<=n;j=j*2)

这是O(logn),因为每次迭代j都乘以2.所以总时间是O(nlogn)。

至于在哪里看,我喜欢算法简介,但只要简单算法的分析,任何好的教科书都可以。