我得到了这个算法(伪代码,不是任何特定语言):
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实际上是什么,更常见的是我可能遇到的其他算法?
答案 0 :(得分:1)
你正在理解big-O的正确轨道。上面的伪代码确实具有 O(l m n)的复杂性。因为你可能正在寻找一些参考文献,我希望你看看下面的精彩帖子堆栈溢出本身:
Plain English explanation of Big-O
在我看来,这是开始使用Big-O概念的最佳指南之一。
如果你进一步深入研究 this MIT Lecture。这肯定会让你对Big-O概念有一个很好的了解。我认为这两个参考文献将清除你的很多概念,肯定会有助于建立你的理解。
快乐的倾斜!