假设给出了一个由一些完全有序集合中抽取的n个不同元素的数组A.例如,也可能会提供用于计算数组中所有元素的顺序的快速算法?
137 13 7 42 38
的目标是产生用于此的数组元素的匹配阵列乙使得B [i]为,比A小原始数组中元素的数目[I的]。例如,在上述阵列中,我们会想产生
A = 137 13 7 42 38
B = 4 1 0 3 2
由于137是其他大于四个元件(13,7,42,38),13只比元件中的一个(7大),7大于没有其他元素等。
在最常见的情况下,数组中的元素是只能比较的任意对象,任何解决此问题的方法都必须在Ω(n lg n ),因为一旦我们有了这个表,我们就可以在O(n)时间内对数组进行排序,方法是创建一个新的n个元素数组,然后将每个元素放在表中指定的位置。但是,我不知道的是,如果元素不是任意值,我们可以构造这张表的速度有多快。
我的问题是这样的:假设给出了一个n个不同的数组整数值,并且想要为该数组构建一个顺序统计表。什么是最有效的算法?如果有帮助,你可以假设整数为正,并且其中最大的有值U
目前,我有最好的复杂度为O(N LG N)解决方案,它通过使阵列的复制工作,对它进行排序,然后对原始数组中的每个整数进行二进制搜索以在新数组中找到它的位置。这是一个很好的解决方案,但我真的希望能有更好的方式来做到这一点。
不是一个完整的回答,但是你可以使用http://en.wikipedia.org/wiki/Radix_sort这是整数O(kN)。 – eulerfx 2011-03-17 20:32:03
@ eulerfx- IIRC基数排序在O(n lg U)中运行,其中U是您正在排序的最大整数。我相信如果你使用van Emde Boas树,你可以把它降到O(n lg lg U),尽管常数因子可能要高很多。 – templatetypedef 2011-03-17 20:51:19