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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了包含while循环的算法的时间复杂度相关的知识,希望对你有一定的参考价值。

我有这个算法,我想分析时间复杂度,但是我不确定我是正确的:

n = int(input("Enter Target Value: "))
x = 1
count = 0
while n != x:
    if n % 2 == 0:
        n /= 2
        count +=1
    else:
        n -= 1
        count +=1
print(count)

对于while循环,n / 2将具有O(logn)的时间复杂度,并且n-1将是O(n),因此O(logn)+ O(n)仍将是O(logn)。 for循环。 3的初始化将为O(1),因此此算法的运行时复杂度将为O(logn)。我对么?谢谢

答案

结果是正确的,但推理是不正确的。 n-=1语句将不会执行O(n)次,并且O(logn)+ O(n)实际上是O(n),而不是O(logn) )

想象n以其二进制表示形式。然后,n-=1操作将被执行与该表示中只有1位一样多的次数。 n/=2语句的执行次数与表示中的位一样多,而不管它们是0还是1。这是因为1位将首先通过n-=1转换为0位。操作,然后下一次迭代将为n/=2操作选择相同的位(已变为0),该位实际上会删除该位。

因此,在最坏的情况下,n的所有有效位均为1位。然后,您具有n-=1操作的O(logn)执行和n/=2操作的O(logn)执行。总的来说,循环进行2O(logn)次迭代,从而使该算法具有O(logn)时间复杂度。

以上是关于包含while循环的算法的时间复杂度的主要内容,如果未能解决你的问题,请参考以下文章

汽车加油问题(贪心算法),O(n) 复杂度的嵌套 while 循环

以下代码片段的算法复杂度

时间复杂度和空间复杂度分析

算法复杂度O(logn)详解

如何计算嵌套在 for 循环中的 while 循环的时间复杂度?

算法 基础