渐近符号以及此示例程序使用的顺序

时间:2014-12-29 09:23:35

标签: algorithm asymptotic-complexity

我已经通过了渐近符号。但我没有看到任何清晰的视觉表示和渐近符号的示例。任何人都帮助我得到相同的清晰表示。

我附上了同样的程序。请告诉我它遵循的符号以及如何找出它正在使用的顺序(O(n),nlogn或O(n2)等)。我已经通过System.currentTimeMillis()方法检查了该程序所用的时间。

示例程序是

public class ArrayPrblem {

public static void main(String[] args){
    int arr[] = {10,2,11,4,3,7,6};
    int brr[] = {11,3,12,4,7,9,12};
    for(int i=0;i<arr.length;i++){
        for(int j=0;j<brr.length;j++){
            if(i<j && arr[i] > brr[j]){
                System.out.println(""+(arr[i]+","+brr[j]));
            }
        }
    }
    System.out.println(+System.currentTimeMillis());
}

}

请建议我如何使用此渐近符号编写优秀的优化程序。

先谢谢

1 个答案:

答案 0 :(得分:0)

假设arrbrr不是硬编码,而是参数,程序的复杂程度为O(n*m),其中n的大小为arrm的大小为brr。如果它们大致(渐近)长度相同,则表示复杂度为O(n^2)

您可以注意到i0arr.length,并且每次迭代都有j,从{{1开始到0。这为您提供了brr.length次迭代的总计。


作为旁注,如果brr.length * arr.length = m*narr是硬编码的 - 复杂性是恒定的并且被标记为brr - 因为它总是比预先知道的花费更少的时间恒定。