2012-10-31 35 views
0

所以我遍歷一個BinaryTree並且節點包含字符串以及如果字符串在讀取文件時出現多次。我只查找讀取文件時出現最多的前10個單詞,所以基本上我只是比較一個int值。Java:插入/替換到特定大小的排序數組中

我的問題是我想弄清楚一種方法來比較和插入一個新的節點,如果他們的計數值更大的有效方法。所以說 我有一棵樹...

5 
/\ 
3 10 
/  \ 

說數組的大小隻有尺寸3.我從1開始,因爲數組是空的,直到5它看起來像後打5 ...

[1],[3],[5]

當我到了10是大於一切的,但我想保持它排序,所以我需要轉移3比1, 5至3和10至5.我想知道是否有更有效的方法來做到這一點,然後在每次更高的麻木後轉移呃。它讀取超過10k +文字的文本文件,所以我希望它儘可能快。

如果不同的數據結構會更好,請讓我知道。我正在考慮一個隊列或鏈表,但是我認爲數組沒有浪費空間,因爲它只有10的大小。我是一名學生,所以也要溫和:-x。

回答

1

一種方法是使用一對數據結構。建議使用Map和Min-Heap的方法如下:

  • 當您正在讀取文件中的單詞時,請在散列映射(word,word_count)中保留其計數。
  • 保持大小爲10的小堆。每當更新地圖中的單詞時,請增加其數量。現在將這個計數與你最小堆的最上面的元素進行比較。如果word_count> value_at_top,則替換頂部元素和heapify。
  • 一旦你從文件中讀取完成,這堆將包含在堆
0

嗯,你總是可以只是把它變成一個無序ArrayList和運行排序:

List<Node> myArrayList = new ArrayList<Node>(); 
//Arbitrarily add subtract, replace, etc. 
Collections.sort(myArrayList); 

這就是我的建議!

+0

我怎麼會只保留10個號碼的10個最常見的元素?問題是如果我這樣做,我必須遍歷ArrayList並將其與每個元素進行比較,當我有一個whos值更大時。 – Pegleg