使用bucketing计算反转

时间:2015-03-08 06:44:00

标签: algorithm buckets bucket-sort

我试图在数组中计数反转(如果a [i]> a [j]和i

我的问题是,可以使用一种形式的分组技术来获得有关数据知识的O(n)效率。例如,我已经知道数组是1-32的排列,因此最大元素是32(这意味着我们可以用bucketing做一些事情)。

我一直在考虑这个问题,并注意到如果我们在一个桶中插入一个元素,那么所有桶的总和大于它在插入时的数量就是它的反转计数。但是如果我们每次都在每个桶中添加元素的数量,那么它会导致我失去O(n)效率。任何关于如何计算以消除这种惩罚的建议。

请注意,排列可以是任意长度,但在执行期间,我们知道排列中的元素数量。因此," n"的价值在执行期间是已知的,并且排列由来自" 1"的元素组成。到" n"。

排序:可以按O(n)时间复杂度对此数据集进行排序,因为我们可以创建32个桶,并且我们知道每个桶只有一个元素。因此,对于该具体示例,桶排序的效率O(n + M)是O(n + 1)= O(n)。

1 个答案:

答案 0 :(得分:2)

根据http://arxiv.org/pdf/1503.01192.pdf,“众所周知”你无法比O(n log n)更有效地找到反演次数。