根据输入大小给出以下代码片段的复杂性 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)?
我是否可以在任何地方了解如何计算简单算法的复杂性?
答案 0 :(得分:4)
当你怀疑时,
for(int j =1;j<=n;j=j*2)
这是O(logn),因为每次迭代j都乘以2.所以总时间是O(nlogn)。
至于在哪里看,我喜欢算法简介,但只要简单算法的分析,任何好的教科书都可以。