假設我有一個TreeMap<String, Treeset<Song>>
,其中對象Song有三個字符串字段和一個內部CompareTo方法。地圖的鍵是歌詞中的獨特單詞,不是常用單詞,如「她」,「the」,「if」或「on」。在地圖上有多個歌曲副本,因爲平均有60個單詞映射到單個歌曲。查找地圖中的前十個值
對於額外的學分,教授要求我們提出一個算法來找到地圖中的前10個值。我沒有及時解決問題,這就是我在這裏問的原因。
我難以忍受的部分是,與有序數組或列表不同,您不能只依次獲取最高值。於是,我想到了:
Create a PriorityQueue<Node> with the Comparator sorting the Nodes based
on the Set size
iterate over the map
for each map node
create a Node object with the key-value pair
insert Node into the queue
即使時Queue將結束所有的鍵值對,頂的大小將在上面,我可以檢索前十。
這似乎是一個非常迂迴的方式,因爲這個特定的地圖有31,000多個節點映射到超過637,000個值。有沒有更好的辦法?
原來這個算法在O(N)時間內效果很好,這是由於數據集上的順序循環造成的。此部分的總執行時間爲45毫秒。 – Jason 2010-11-10 02:15:34