【发布时间】:2016-06-26 20:00:19
【问题描述】:
我正在寻找一种算法来解决这个问题:
给定 2 个数组,A 和 B,它们都是 [1..n] 的排列,这两个数组之间的反转次数是多少?
这里的反转是当一对元素 (i,j) 成立时:
if A.indexOf(i) > A.indexOf(j) && B.indexOf(i) < B.indexOf(j)
或
if A.indexOf(i) < A.indexOf(j) && B.indexOf(i) > B.indexOf(j)
我知道当您可以假设第一个数组已排序时,有多种方法可以做到这一点,例如在执行 MergeSort 时计算反转,但我有 2 个未排序的数组。
例子:
A = [6,3,4,1,2,5] and B = [3,5,2,6,1,4]
No. of inversions = 9
6 has a lower index than 3 in A, but a higher index than 3 in B. This is an inversion.
我希望使用分而治之的方法以 O(n log n) 的时间复杂度实现这一目标。
【问题讨论】:
-
为什么您删除了关于使用 OpenCL 实施呼吸优先搜索的其他问题?
-
我联系了我的老师,感谢他,我已经得到了解决方案,所以我觉得这里不再需要这个问题了。
-
最好为未来的访客介绍您自己的答案,而不是删除一个好问题。
标签: algorithm mergesort divide-and-conquer