最坏的运行时间Big O.

时间:2014-09-28 19:28:30

标签: java big-o complexity-theory

你能解释一下我如何能得到这个算法的最坏情况Big O.我正在阅读我的教科书,我遇到了类似这样的算法,但仍然不理解它背后的逻辑。

int t=0;
for(int x=0;x<num.length;x++){
    for(int y=0;y<num.length;y++){
        for(int p=0;p<num.length;p++){
            for(int w=0;w<num.length;w++){
                if(num[p][w]>num[x][y])
                {
                    t=num[x][y];
                    num[x][y]=num[p][w];
                    num[p][w]=t;
                }
            }
        }
    }
} 

2 个答案:

答案 0 :(得分:6)

逻辑非常简单。让我们从最内循环开始:

此循环运行num.length次。假设O(n)

,大O表示法中最糟糕的运行时复杂性为n = num.length
for(int w=0;w<num.length;w++){
    ...
}

现在当你在长度p周围放置另一个for循环时,它将运行上述for循环p次。所以它是O(pn)。在您的情况下,p = num.length = n因此应为O(n*n) = O(n^2)

您的示例中有4个嵌套循环,因此答案为O(n^4)

为什么我忽略了最内循环的内容?由于完成了一定数量的操作,请将该数字设为c。 big-O表示法使用的渐近分析表示如下:O(c) is equivalent to O(1)。这来自definition of big-O

答案 1 :(得分:0)

如果你要比较一个元素; ==或&lt;或者&gt;对于列表或大小为n的数组,最坏的情况是O(n)。

因此,一个for循环的成本是:O(n),但是你有4个for循环,每个循环最坏情况为O(n)。

总成本为:n * n * n * n =最差情况O(n ^ 4)。