【问题标题】:refine merge-sort to count number of inversions细化合并排序以计算反转次数
【发布时间】:2015-07-08 10:12:35
【问题描述】:

我正在开发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 

这有意义吗?

最终,我必须进行倒数计数,直到算法终止。有人可以就这个问题给我一个提示吗?

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

干杯, 安德鲁

【问题讨论】:

标签: algorithm mergesort divide-and-conquer inversion


【解决方案1】:

如果您只在数组大小为 1 时进行计数,那么您只是在查看成对反转。我认为您只想在所有递归调用中保留一个计数器,并在合并步骤期间将左子数组中的一个元素与右子数组中的一个元素进行比较,而右子数组中的一个元素较小(假设您'按升序排序)。

【讨论】:

    猜你喜欢
    • 2013-07-12
    • 1970-01-01
    • 2012-12-27
    • 2014-08-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-07-22
    相关资源
    最近更新 更多