包含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 循环