确定给定算法的big-O

时间:2014-09-29 16:19:31

标签: algorithm big-o nested-loops

我得到了这个算法(伪代码,不是任何特定语言):

foo1(l,m,n){
    for ( i = 1; i < l, i++){
        for( j = 1; j < m ; j++){
            for ( k = 1; k < n; k++){
            //Constant time inner loop
            }
        }
    }
}

我试图找到内循环相对于 l,m, n 运行的次数,并提出它的功能。我也试图找出算法的大O符号。

看看这个算法,我以为内循环会运行l * m * n次。我想出了这个,因为例如,如果 l,m,n 分别是 3,6,9 ,那么内部循环将运行(9 * 6 * 3)倍。因此,返回内循环运行次数的函数将类似于:

f = l*m*n 

现在,大O是我正在努力的地方(不一定是这个问题)但是我想进一步了解如何解决大O问题以最好地确定算法的正确大O.

对于这个特定情况,我认为big-O将是n ^ 3,但这只是基于猜测。我如何确定这个问题的大O实际上是什么,更常见的是我可能遇到的其他算法?

1 个答案:

答案 0 :(得分:1)

你正在理解big-O的正确轨道。上面的伪代码确实具有 O(l m n)的复杂性。因为你可能正在寻找一些参考文献,我希望你看看下面的精彩帖子堆栈溢出本身:

Plain English explanation of Big-O

在我看来,这是开始使用Big-O概念的最佳指南之一。

如果你进一步深入研究 this MIT Lecture。这肯定会让你对Big-O概念有一个很好的了解。我认为这两个参考文献将清除你的很多概念,肯定会有助于建立你的理解。

快乐的倾斜!