2014-01-27 63 views
0

霍夫曼實現我想要實現霍夫曼不排序。 這個想法是我添加前兩個元素,並添加在array.eg的最後獲得的結果。不排序

(1)數據[256] = {1 2 3 4 5}。我們添加前兩個元素,我們得到「3」我們把在最後陣列的這樣{1 2 3 4 5 3 }。這是第一次執行。我的邏輯 data[data_size].freq=data[f].freq+data[s].freq; data_size++;做得很好。 (2)現在在第二次執行中,我想添加前一次加法(位於locataion data_size)和數組的下一個元素所獲得的結果。這樣的邏輯去做它必須是這樣的:data[data_size].freq=data[data_size].freq+data[s].freq; 現在的結果將是{1 2 3 4 5 3 **6**}我沒有進行排序,這必須withou任何排序實施。添加的元素必須停留在數組的最後位置。但是加法必須總是在data[data_size].freq的元素之間(這是通過在第一次執行中添加前兩個元素並且在第一次執行後得到的,它必須是通過將兩個元素中的第一個元素和奇數我的意思是「s」)和data[s].freq(它是「s」位置的元素)。

我有想法做,但問題是如果我在第一個位置添加(第一次執行的地方,我得到的第一個元素獲得最後的數組索引通過索引0和1的元素添加)像:

newItem.freq =數據[I] .freq +數據[j]的.freq; data [dataSize ++] = newItem;

現在我要做的:

newItem.freq = data[dataSize].freq + data[j].freq; 
here i have problem in writting it's code. 

回答

1

您應該使用優先queue.All的元素都在優先級隊列第一個地方。然後,在每個步驟中取兩個最小的元素,合併,並將結果推回隊列。

+0

可否請您解釋一下任何代碼作爲參考? – user3206225