切換
舊版
前往
大廳
主題

ZeroJudge - d371: 3. Huffman 編碼中的編碼效能問題 解題心得

Not In My Back Yard | 2019-09-08 23:29:05 | 巴幣 0 | 人氣 389

題目連結:


題目大意:
給定一正整數 n (n ≦ 2 ^ 16),代表有 n 個符號。接著的一列給定 n 個正整數(值介於 1 ~ 65536 之間),代表各個符號的出現頻率。

現在以霍夫曼編碼(Huffman Coding,見維基),求最後編碼後的位元數(編碼後的密文長度)為多少?



範例輸入:
5
16 8 8 4 4


範例輸出:
88


解題思維:
因為有霍夫曼編碼,所以可以參考以前的文章。只是在取兩個最小數相加後所產生的新節點,需要指回原先的兩個最小數(以便回溯)。

做完編碼後,遞迴探訪到葉節點(此時即為最初儲存字元頻率的節點),算出每個葉節點的頻率 × 此葉節點所在之樹深度(從根節點為 0 開始算)。最後之總和即為所求。

此次分享到此為止,如有任何更加簡潔的想法或是有說明不清楚之地方,也煩請各位大大撥冗討論。

創作回應

更多創作