优化合并排序以计算反转次数

时间:2015-04-29 08:35:42

标签: algorithm mergesort divide-and-conquer inversion

我正在使用merge sort的改进版本,以便它counts the number of inversions

注意:我不希望你完成我的作业,但我对此有一些想法,并且很想知道它们是否有意义。

由于合并排序为O(nlogn,我需要调整它而不会恶化其整体性能。我认为我必须插入一个需要恒定时间(1)的测试

(1)我用A[i] > A[j] given that i<j

测试反转(上部)

要找到插入测试的合适位置,我问自己:when during the execution of merge sort is guaranteed that the test runs unrelated to n?

我认为唯一真实的地方是the list is split into one-element lists

因此,我建议进行以下算法调整

use divide-and-conquer and split the list to one elements lists
test A[i] > A[j] as i<j is true for two adjacent lists 

这有意义吗?

最终,我必须携带反转计数,直到算法终止。有人可以给我一个关于这个问题的提示吗?

(直观地说,当合并完成时算法终止,我会将计数给予合并部分。)

干杯, 安德鲁

1 个答案:

答案 0 :(得分:1)

如果只计算数组大小为1时,则只考虑成对反转。我想你只想在所有的递归调用中保持一个计数器,并在合并步骤中将左子阵列中的元素与右子阵列中的元素进行比较,并将右边的元素进行比较(假设您“按升序排序。”