lq_jichu_Main28(Huffuman樹)

問題描述

Huffman樹在編碼中有著廣泛的應(yīng)用。在這里,我們只關(guān)心Huffman樹的構(gòu)造過程。

給出一列數(shù){pi}={p0,p1, …,pn-1},用這列數(shù)構(gòu)造Huffman樹的過程如下:

1. 找到{pi}中最小的兩個數(shù),設(shè)為papb,將papb從{pi}中刪除掉,然后將它們的和加入到{pi}中。這個過程的費用記為pa+pb。

2. 重復(fù)步驟1,直到{pi}中只剩下一個數(shù)。

在上面的操作過程中,把所有的費用相加,就得到了構(gòu)造Huffman樹的總費用。

本題任務(wù):對于給定的一個數(shù)列,現(xiàn)在請你求出用該數(shù)列構(gòu)造Huffman樹的總費用。

例如,對于數(shù)列{pi}={5, 3, 8, 2, 9},Huffman樹的構(gòu)造過程如下:

1. 找到{5, 3, 8, 2, 9}中最小的兩個數(shù),分別是2和3,從{pi}中刪除它們并將和5加入,得到{5, 8, 9, 5},費用為5。

2. 找到{5, 8, 9, 5}中最小的兩個數(shù),分別是5和5,從{pi}中刪除它們并將和10加入,得到{8, 9, 10},費用為10。

3. 找到{8, 9, 10}中最小的兩個數(shù),分別是8和9,從{pi}中刪除它們并將和17加入,得到{10, 17},費用為17。

4. 找到{10, 17}中最小的兩個數(shù),分別是10和17,從{pi}中刪除它們并將和27加入,得到{27},費用為27。

5. 現(xiàn)在,數(shù)列中只剩下一個數(shù)27,構(gòu)造過程結(jié)束,總費用為5+10+17+27=59。

輸入格式

輸入的第一行包含一個正整數(shù)nn<=100)。

接下來是n個正整數(shù),表示p0,p1, …,pn-1,每個數(shù)不超過1000。

輸出格式

輸出用這些數(shù)構(gòu)造Huffman樹的總費用。

樣例輸入

5

5 3 8 2 9

樣例輸出

59


解題思路:

? ? ? ? 用一個List保存輸入的數(shù)據(jù),循環(huán)對list進(jìn)行操作,先找到兩個最小值,list中找最小值的方法是Collections.min(list),注意這里要用Integer接收,因為在移除時如果是int,remove()移除掉的是下標(biāo),而Integer移除的就是最小的數(shù)。再將兩個最小數(shù)之和加入到list中,再加到sum中,直到list中只有一個元素。最后輸出sum即可。

源代碼:


Main28
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容