使用Big-O表示法计算算法的运行时间

时间:2015-05-29 05:08:31

标签: algorithm runtime big-o

这是一个问题:

for(i=1;i<=n,i++){

      for(j=2*i;j<=n,j++){

        puts("hello"):
       }
}

这是我的解决方案:外部循环具有1+n+1+n运行时间,第二个for循环具有n*(1+n/2+1+n/2)运行时间,第三个语句具有n*n/2运行时间。第二和第三个国家让我很困惑,我不知道我的计算是否正确,任何澄清都会受到赞赏,谢谢你们。

1 个答案:

答案 0 :(得分:1)

由于您被允许使用Big-O表示法,因此您无需记下所有详细信息。

当输入大小为n时,设T(n)为算法的运行时间。

首先,puts("hello")是O(1)。从代码中可以清楚地看到,puts("hello")的执行时间少于n^2次。另请注意,如果将外环更改(缩小)为

for (i = 0; i < n / 4; ++i)

对于每个i,内部循环将执行至少n / 2次,这意味着语句puts("hello")将至少执行n/4 * n/2 = n^2/8

现在如上所述,我们有n^2/8 <= T(n) <= n^2。因此我们得到T(n)= O(n ^ 2)(分析很紧,这意味着我们有T(n) = \Theta(n^2))。

如果您在理解Big-O和Theta的概念时遇到问题,可以参考此视频:https://youtu.be/6Ol2JbwoJp0