我已经通过了渐近符号。但我没有看到任何清晰的视觉表示和渐近符号的示例。任何人都帮助我得到相同的清晰表示。
我附上了同样的程序。请告诉我它遵循的符号以及如何找出它正在使用的顺序(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());
}
}
请建议我如何使用此渐近符号编写优秀的优化程序。
先谢谢
答案 0 :(得分:0)
假设arr
和brr
不是硬编码,而是参数,程序的复杂程度为O(n*m)
,其中n
的大小为arr
,m
的大小为brr
。如果它们大致(渐近)长度相同,则表示复杂度为O(n^2)
。
您可以注意到i
从0
到arr.length
,并且每次迭代都有j
,从{{1开始到0
。这为您提供了brr.length
次迭代的总计。
作为旁注,如果brr.length * arr.length = m*n
和arr
是硬编码的 - 复杂性是恒定的并且被标记为brr
- 因为它总是比预先知道的花费更少的时间恒定。