确定此功能的Big-O增长率

时间:2016-03-02 07:31:46

标签: math big-o time-complexity asymptotic-complexity

我无法确定如何确定这些类型函数的增长率。

void A(int n){
 int i=1, s=1;
 while(s<=n){
   i++;
   s=s+i;
   cout<<"hi";
   }
}

这是O(sqrt(n)),但我无法弄清楚如何?

1 个答案:

答案 0 :(得分:2)

如果你在每次迭代中查看s的值,你会看到它是1,3,6,10,15等。这些数字被称为三角形数字,是k形式的数字(k + 1)/ 2(证明这是一种归纳练习。)

一旦s超过n,循环就会停止运行。在迭代k上,s的值是k(k + 1)/ 2,因此您可以通过求解k(k + 1)/ 2中的k来计算迭代次数。尝试这样做,看看你发现了什么。这是否解释了平方根?