计算while循环的运行时间

时间:2018-10-17 19:03:16

标签: c++ algorithm time-complexity

我只是从算法开始,我正尝试在下面的while循环中以'n'表示运行时间。

int k=1;
while(k<n-k){
k+=k;
}

这里n> 2。我知道k的值每次都会翻倍,并且一旦k值大于n / 2时,循环只会运行一次。但是我很难用“ n”来表示。

3 个答案:

答案 0 :(得分:3)

有必要列出要点:

  • kubectl top node/pod在每次循环迭代中加倍

  • 您的循环条件可以重写为:k *

基本问题是:我必须对while(2*k < n)进行加倍,直到 k加倍等于多少次?大于k

这很容易。这正是对数的工作方式。以数字n为例。我必须翻倍才能达到1000次?答案是将log 2 1000向上舍入。

本质上,您的算法是2,这意味着您的算法以对数时间复杂度运行。


*正如FrançoisAndrieux 在他的评论中正确指出的那样,尽管从数学上讲这是正确的,但由于数据类型的表示限制,在编程中并非总是如此。对于较大的log_2(n) - 1,表达式k可能会导致溢出并使整个表达式无效,而对于相同的输入,表达式2*k会正确运行。

答案 1 :(得分:1)

替换

  while(k<n-k)
     k+=k;

等价

  while(2*k<n)
    k*=2

最后一个绝对是O(log(n))-它执行了log2(n)-1个步骤

答案 2 :(得分:1)

表达式compose简化为k < n-k

时间复杂度应为k < n/2,以2为基数

O(log(n))