Time complexity 此do while循环的时间复杂度是多少?
我很难看到这里的模式。Time complexity 此do while循环的时间复杂度是多少?,time-complexity,big-o,Time Complexity,Big O,我很难看到这里的模式。 即使插入n的数字,然后绘制出每个基本操作。 提前谢谢 编辑:我想要最坏的情况。第一步是将n除以2。所以你得到了n/2。现在,用2再次除以它,如果n/2>1,则得到n/4。如果n/4>1你再做一次,你会得到n/8,或者最好写成n/(2^3)。。。现在如果n/(2^3)>1你再做一次,你会得到n/(2^4)。。。所以,如果你做了k次,你会得到n/(2^k)。如何计算kto,从而得到n/(2^k)≤ 1?简单: int count=0; do { count++;
即使插入n的数字,然后绘制出每个基本操作。
提前谢谢
编辑:我想要最坏的情况。第一步是将
n
除以2
。所以你得到了n/2
。现在,用2
再次除以它,如果n/2>1
,则得到n/4
。如果n/4>1
你再做一次,你会得到n/8
,或者最好写成n/(2^3)
。。。现在如果n/(2^3)>1
你再做一次,你会得到n/(2^4)
。。。所以,如果你做了k次
,你会得到n/(2^k)
。如何计算k
to,从而得到n/(2^k)≤ 1
?简单:
int count=0;
do
{
count++;
n=n/2;
}while (n>1);
因此,您的算法需要O(ln(n))
迭代才能退出循环
在你的代码中,
k
是count
你熟悉对数吗?试试2、4、8、16、32、64……实际上,它是O(1),因为INT\u MAX
是一个常数,增长非常缓慢。请参阅:
n/(2^k) ≤ 1
n ≤ 2^k
ln(n) ≤ k