算法大欧米茄

时间:2014-09-21 15:36:58

标签: big-o

我无法分析以下内容。

for b = 1 to n
     for u =  b to n
        for i = b to u
            Print

我无法确定最坏情况的运行时间。 第一个循环运行n次,第二个循环运行(n(n + 1))/ 2次。 然后我相信第三个循环运行(n + 1)/ 2次。

但是我被告知它的运行时间为O(n ^ 3)。 因此,它的最佳案例运行时不能比最坏情况的运行时更大! 如果可能的话,我希望能朝着正确的方向前进! 谢谢!

1 个答案:

答案 0 :(得分:0)

第三个循环在激活时执行打印 u-b + 1 次{3}。

当第二个循环被激活时,第三个循环被激活所有u从b到n,即执行Print 1 + 2 + 3 + ... n-b + 1次(替换u = 1,2,3 ...... {3}中的n。使用triangular numbers的公式,此计数等于(n-b + 1)(n-b + 2)/ 2 {2}。

当第一个循环被激活时,第二个循环被激活,所有b从1到n,即执行Print n(n + 1)/ 2 +(n-1)n / 2 +(n-2)( n-1)/ 2 + ... 1次(在{2}中替换b = 1,2,3 ... n;计数正在减少)。

使用tetrahedral numbers的公式,这等于 n(n + 1)(n + 2)/ 6 {1}。

如果您在使用此方法时遇到问题,可以手动模拟打印件。

对于n = 1

*

对于n = 2

*
* *

*

对于n = 3

*
* *
* * *

*
* *

*

对于n = 4

*
* *
* * *
* * * *

*
* *
* * *

*
* *

*

...

您可以清楚地看到尺寸逐渐减小的三角形图案。三角形的面积随着边的平方而增长。 总体积随着边的立方体增长