这个do-while循环的时间复杂度是多少?

时间:2017-10-01 23:38:40

标签: time-complexity big-o

int count=0;
do
{
count++;
n=n/2;
} while (n>1);

我在这里看到模式时遇到了麻烦,即使插入n的数字然后绘制出每个基本操作。提前谢谢!

编辑:我想要最糟糕的情况。

1 个答案:

答案 0 :(得分:2)

第一步是将n2分开。所以你得到n/2。现在,您再次使用2将其除以n/2 > 1,然后获得n/4。如果n/4 > 1再次执行此操作,并且您获得n/8,或者更好地将其写为n/(2^3) ...现在如果n/(2^3) > 1再次执行此操作,您将获得n/(2^4) {1}} ...因此,如果您执行k次,则会获得n/(2^k)。如何计算k以获得n/(2^k) ≤ 1?易:

n/(2^k) ≤ 1
n ≤ 2^k
ln(n) ≤ k

因此,您的算法需要O(ln(n))次迭代才能退出循环。

在您的代码中,kcount