試題 基礎練習 Huffuman樹

2022-06-27 13:00:13 字數 1273 閱讀 7356

題目鏈結

問題描述

huffman樹在編碼中有著廣泛的應用。在這裡,我們只關心huffman樹的構造過程。

給出一列數=,用這列數構造huffman樹的過程如下:

1. 找到中最小的兩個數,設為pa

和pb,將pa

和pb從中刪除掉,然後將它們的和加入到中。這個過程的費用記為pa

+ pb

。2. 重複步驟1,直到中只剩下乙個數。

在上面的操作過程中,把所有的費用相加,就得到了構造huffman樹的總費用。

本題任務:對於給定的乙個數列,現在請你求出用該數列構造huffman樹的總費用。

例如,對於數列=,huffman樹的構造過程如下:

1. 找到中最小的兩個數,分別是2和3,從中刪除它們並將和5加入,得到,費用為5。

2. 找到中最小的兩個數,分別是5和5,從中刪除它們並將和10加入,得到,費用為10。

3. 找到中最小的兩個數,分別是8和9,從中刪除它們並將和17加入,得到,費用為17。

4. 找到中最小的兩個數,分別是10和17,從中刪除它們並將和27加入,得到,費用為27。

5. 現在,數列中只剩下乙個數27,構造過程結束,總費用為5+10+17+27=59。

輸入格式

輸入的第一行包含乙個正整數n(n

<=100)。

接下來是n個正整數,表示p

0, p

1, …, pn

-1,每個數不超過1000。

輸出格式

輸出用這些數構造huffman樹的總費用。

樣例輸入

55 3 8 2 9

樣例輸出

59思路:

改動陣列,使陣列大小一步步變小,在這個過程中,陣列

儲存的資料為上述的構造資料:

對陣列操作n-1次,每次操作:首先對陣列排序,最小的兩個數之和temp

=a[0]+a[1],將temp加入陣列,設定a[1]=temp,同時刪除a[0](將後面的資料往前移動一位即可:for(int i=0;i

陣列大小減一(也即n--),最後陣列中只有乙個資料即為所求。

**:

#includeusing namespace std;

int a[110];

intmain()

sort(a,a+n);

while(n>1)

n--;//

陣列大小減小

sort(a,a+n);

}cout

}

試題 基礎練習 Huffuman樹

huffman樹在編碼中有著廣泛的應用。在這裡,我們只關心huffman樹的構造過程。給出一列數 用這列數構造huffman樹的過程如下 1.找到中最小的兩個數,設為pa和pb,將pa和pb從中刪除掉,然後將它們的和加入到中。這個過程的費用記為pa pb。2.重複步驟1,直到中只剩下乙個數。在上面的...

試題 基礎練習 Huffuman樹

試題 基礎練習 huffuman樹 資源限制 時間限制 1.0s 記憶體限制 512.0mb 問題描述 huffman樹在編碼中有著廣泛的應用。在這裡,我們只關心huffman樹的構造過程。給出一列數 用這列數構造huffman樹的過程如下 1.找到中最小的兩個數,設為pa和pb,將pa和pb從中刪...

基礎練習 Huffuman樹

基礎練習 huffuman樹 時間限制 1.0s 記憶體限制 512.0mb 問題描述 huffman樹在編碼中有著廣泛的應用。在這裡,我們只關心huffman樹的構造過程。給出一列數 用這列數構造huffman樹的過程如下 1.找到中最小的兩個數,設為p a和pb,將p a和pb從中刪除掉,然後將...