Time complexity 3-sum的性能分析
我有一个方法,可以在一个数组中找到3个加起来就是所需数字的数字 代码:Time complexity 3-sum的性能分析,time-complexity,asymptotic-complexity,big-o,Time Complexity,Asymptotic Complexity,Big O,我有一个方法,可以在一个数组中找到3个加起来就是所需数字的数字 代码: publicstaticvoidthreesum(int[]arr,int-sum){ 快速排序(arr,0,arr.length-1); 对于(int i=0;ij时,内部forloop才会运行,因此您可以想到n^2*(n/2),但在大O表示法中,您可以忽略这一点。这是一个O(n^3)复杂度,因为有三个嵌套的forloop。只有当k>j时,内部forloop才会运行,因此您可以考虑n^2*(n/2),但在大O表示法中,您可
publicstaticvoidthreesum(int[]arr,int-sum){
快速排序(arr,0,arr.length-1);
对于(int i=0;ij;k--){
如果((arr[i]+arr[j]+arr[k])==和){
System.out.println(Integer.toString(i)+“+”+Integer.toString(j)+“+”+Integer.toString(k)+“=”+和);
}
}
}
}
}
我不确定这种方法的重要性。我现在很难对这件事了如指掌。我猜是O(n^2)或O(n^2logn)。但这些完全是猜测。我无法证明这一点。有人能帮我把这件事想清楚吗 您在阵列上有三个循环(i、
j
和k
循环),其大小主要取决于阵列的大小n
。因此,这是一个O(n3)操作。您在阵列上运行了三次(i、j
和k
循环),其大小主要取决于阵列的大小。因此,这是一个O(n3)操作。这是一个O(n^3)复杂度,因为有三个嵌套的forloop。只有当k>j
时,内部forloop才会运行,因此您可以想到n^2*(n/2),但在大O表示法中,您可以忽略这一点。这是一个O(n^3)复杂度,因为有三个嵌套的forloop。只有当k>j
时,内部forloop才会运行,因此您可以考虑n^2*(n/2),但在大O表示法中,您可以忽略这一点。即使您的快速排序是O(nlogn)
,但有3个嵌套for循环,这一事实使它黯然失色。因此,时间复杂度w.r.t元素数(n)是O(n^3)
即使您的快速排序是O(nlogn)
,但有3个嵌套for循环这一事实使其黯然失色。因此,时间复杂度w.r.t元素数(n)是O(n^3)
系统地说,增长复杂度的顺序可以精确地推断如下:
有条不紊地说,增长复杂性的顺序可以准确地推断如下: 它的O(n^3)复杂性它的O(n^3)复杂性
public static void threeSum(int[] arr, int sum) {
quicksort(arr, 0, arr.length - 1);
for (int i = 0; i < arr.length - 2; i++) {
for (int j = 1; j < arr.length - 1; j++) {
for (int k = arr.length - 1; k > j; k--) {
if ((arr[i] + arr[j] + arr[k]) == sum) {
System.out.println(Integer.toString(i) + "+" + Integer.toString(j) + "+" + Integer.toString(k) + "=" + sum);
}
}
}
}
}