【问题标题】:Calculate the time complexity of the following function计算以下函数的时间复杂度
【发布时间】:2015-09-26 01:40:27
【问题描述】:

如何计算以下函数的时间复杂度?

int Compute (int n)
{
   int j = 0;
   int i = 0;
   while (i<=n)
   {
       i = 2*j + i + 1;
       j++;
   }
   return j-1;
}

现在,我知道循环的时间复杂度为 O(n),但在这种情况下,i 的增长速度要快得多。逐次迭代我发现,对于每第 m 次迭代i = m^2。但我仍然对如何计算 Big-O 感到困惑。

【问题讨论】:

    标签: time-complexity big-o


    【解决方案1】:

    如果您查看 i 和 j 的值进行几次迭代:

    i=1
    j=1
    
    i=4
    j=2
    
    i=9
    j=3
    
    i=16
    j=4
    

    等等。通过数学归纳,我们可以证明 i 取平方值:( 2*n + n^2 + 1 = (n+1)^2 )

    因为我们只在 i

    【讨论】:

    • 我认为O(sqrt(n) - 2) = O(sqrt(n)) 是正确的。但是we stop when i&lt;=n 应该是i &gt; n
    • 已更正。谢谢@KubaSpatny
    • 我也找到了模式,但找不到连接。感谢您的澄清!
    猜你喜欢
    • 2021-06-10
    • 1970-01-01
    • 2022-01-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-08-01
    • 2018-05-28
    相关资源
    最近更新 更多