假設給出了一個由一些完全有序集合中抽取的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