[英]Time-complexity of mergesort with alternative merge-function
我目前有這段代碼:
public static void main(String[] args) throws FileNotFoundException {
Scanner sc = new Scanner(new File(args[0]));
int amount = sc.nextInt();
int[] array = new int[amount];
for (int i = 0; i < amount; i++) {
array[i] = sc.nextInt();
}
System.out.println("FINAL ANSWER " + find(array, 0, array.length - 1));
}
static int find(int arr[], int l, int r) {
int answer = 0;
if (l < r) {
int m = (l + r) / 2;
int a = find(arr, l, m);
int b = find(arr, m + 1, r);
answer = a + b + answer(arr, l, m, r);
}
return answer;
}
static int answer(int arr[], int l, int m, int r) {
int ans = 0;
for (int i = m; i < r; i++) {
for (int j = l; j < m + 1; j++) {
if (arr[i + 1] > arr[j]) {
ans++;
}
}
}
return ans;
}
我知道 mergesort 的時間復雜度為O(nlog(n)) ,但是我已經用帶有兩個 for 循環的 function 替換了合並函數。 那么現在是O(n^2)因為l
、 m
和r
取決於n嗎?
function answer
的復雜度為O( (rm) * (m+1-l) )
。 外部 for 循環從m
到r
,因此rm
迭代。 內部 for 循環從l
到m+1
,所以m+1-l
次迭代。
給定最壞情況l=0
、 r=n
和m=n/2
, function 可以近似為O(n^2)
。
但是,您需要添加 function find
的運行時。 所以整體時間復雜度為:
O(n^2 * log(n))
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.