包含while循环的算法的时间复杂度

时间:2018-03-15 17:22:42

标签: algorithm asymptotic-complexity

如何用渐近符号分析foo函数的运行时间?

我这样想: i=0是常数时间,n%2==0是常数时间,n=n/2是常数时间,i++是常数时间。但我不能说“while循环运行n次“。n=n/2表达式。

我不知道这个while循环的重复次数。例如,如果n是5,while循环不运行,如果b是4,while循环将跑了2次。如果b为14,while循环仍将运行2次。

 foo(n):
    i=0
    while(n%2==0)
        n=n/2
        i++
    return i

1 个答案:

答案 0 :(得分:1)

最好看Best, worst and average case。在您的问题中,最佳案例有一个恒定的时间O(1),最坏的情况和平均情况都有O(log(n))时间。最好的情况是显而易见的,它是数字时的奇数。最坏的情况也很明显,当你的数字像n=2^k时就会发生。如果您的数字类似于n=p*2^k,其中p为奇数,则会产生平均值。但是在这种情况下的运行时间与最坏情况类似,因为循环迭代次数因范围除以2而下降。

您可以分析此代码,类似于Binary Search Algorithm。即使您可能在第一次比较中找到结果,但平均情况的运行时间为O(log(n))

此致

相关问题