簡體   English   中英

具有替代合並功能的合並排序的時間復雜度

[英]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)因為lmr取決於n嗎?

function answer的復雜度為O( (rm) * (m+1-l) ) 外部 for 循環從mr ,因此rm迭代。 內部 for 循環從lm+1 ,所以m+1-l次迭代。

給定最壞情況l=0r=nm=n/2 , function 可以近似為O(n^2)

但是,您需要添加 function find的運行時。 所以整體時間復雜度為:

  • O(n^2 * log(n))

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM