利用哈夫曼編碼英文字母表
1. 哈夫曼編碼。對教材P167中習題5.18,思考並完成問題a-d。
(下表給出了英文字母(包括用於分割單詞的空格)在某文集中的出現頻率。
空格 18.3% | r 4.8% | y 1.6%
e 10.2% | d 3.5% | p 1.6%
t 7.7% | l 3.4% | b 1.3%
a 6.8% | c 2.6% | v 0.9%
o 5.9% | u 2.4% | k 0.6%
i 5.8% | m 2.1% | j 0.2%
n 5.5% | w 1.9% | x 0.2%
s 5.1% | f 1.8% | q 0.1%
h 4.9% | g 1.7% | z 0.1%
(a)這些字母的最優Huffman編碼是什麼?
空格:111
a:1010
b:100101
c:00101
d:10111
e:010
f:110100
g:100110
h:0001
i:0111
j:1101110011
k:11011101
l:10110
m:110110
n:0110
o:1000
p:100100
q:1101110001
r:0000
s:0011
t:1100
u:00100
v:1101111
w:110101
x:1101110010
y:100111
z:1101110000
(b)每個字母的編碼平均需要多少位?
(3*2+4*8+5*4+6*7+7+8+10*4)/27≈6,即每個字母的編碼平均需要6位
(c)假設我們對以上的頻率表計算其熵H您認為該值會比以上的計算結果大還是小?為什麼?
熵約為5.74,結果肯定比熵要大,因為在計算熵的時候允許有小數個位元,而實際上每個字元的編碼長度都必需為整數。
(d)您是否認為這就是英文文字壓縮的下線?除了字母及其出現頻率,還有哪些英文字身的特徵需要在文字壓縮中被重點考慮?
還可以考慮整個 英文出現的概率,還可以從詞根上來考慮等等。
相關推薦
利用哈夫曼編碼英文字母表
1. 哈夫曼編碼。對教材P167中習題5.18,思考並完成問題a-d。 (下表給出了英文字母(包括用於分割單詞的空格)在某文集中的出現頻率。 空格 18.3% | r 4.8% | y 1.6% e
第六週作業1——利用哈夫曼編碼英文字母表
作業要求: 對教材P167中習題5.18,思考並完成問題a-d。(原書PDF下載地址:) 習題如下: 解: (a): 畫出這些字母的最優二叉樹:(根節點值為101不是100,應該是空格的出現頻率
資料結構————檔案壓縮(利用哈夫曼編碼實現)
檔案壓縮原理: 首先檔案壓縮是通過HuffmaCode實現的、整體思路通過讀取檔案獲取字元出現頻率,通過字元出現頻率可以構建HuffmanTree,每個檔案中出現的字元通過HuffmanTree獲取HuffmanCode,從而將檔案中的字元同過HuffmanTree獲取相應編碼,並寫入壓
利用哈夫曼編碼壓縮檔案
利用哈夫曼編碼壓縮解壓檔案1. 引言本文為大一下學期C語言課程的期末大作業,經過修改後釋出。文中要用到的測試檔案1.lst見連結: https://pan.baidu.com/s
利用哈夫曼樹編碼解碼
哈夫曼(Haffman)樹(最優樹) 定義: 給定n個權值作為n個葉子結點,構造一棵二叉樹,若該樹的帶權路徑長度達到最小,稱這樣的二叉樹為最優二叉樹,也稱為哈夫曼樹(Huffman Tree)。哈夫曼樹是帶權路徑長度最短的樹,權值較大的結點離根較近。 構造過程: 以 1,7,3,4,9,8為例: 第
哈夫曼編碼壓縮,解壓,壓縮比,編碼表,儲存到檔案
//mian.c #include "FunctionReference.h" int main() { HuffmanTree HT; //哈夫曼樹 int sum; //統計的字元總數 int n;
哈夫曼編碼(Huffman coding)的那些事,(編碼技術介紹和程序實現)
信號 truct 依次 while 交換 需要 .text 示例 system 前言 哈夫曼編碼(Huffman coding)是一種可變長的前綴碼。哈夫曼編碼使用的算法是David A. Huffman還是在MIT的學生時提出的,並且在1952年發表了名為《
哈夫曼編碼解碼 C++實現
錯誤 urn using 過程 簡單 cin n) struct ren 哈夫曼編碼是一個通過哈夫曼樹進行的一種編碼,一般情況下,以字符:‘0’與‘1’表示。編碼的實現過程很簡單,只要實現哈夫曼樹,通過遍歷哈夫曼樹,這裏我們從每一個葉子結點開始向上遍歷,如果該結點為父節點的
哈夫曼編碼
http sdn chm cstring htc 位數 child 個數 ostream 在電文傳輸中,需要將電文中出現的每個字符進行二進制編碼。在設計編碼時需要遵守兩個原則: (1)發送方傳輸的二進制編碼,到接收方解碼後必須具有唯一性,即解碼結果與發送方發送的電文完全一樣
【BZOJ 4198】[Noi2015]荷馬史詩 哈夫曼編碼
clu tor space zoj col 具體實現 %d sca bool 合並果子加強版....... 哈夫曼樹是一種特別的貪心算法,它的作用是使若幹個點合並成一棵樹,每次合並新建一個節點連接兩個合並根並形成一個新的根,使葉子節點的權值乘上其到根的路徑長的和最短(等價
轉載:哈夫曼樹的構造和哈夫曼編碼(C++代碼實現)
作者 pos blank 字符 element start man null == 作者:qiqifanqi 原文:http://blog.csdn.net/qiqifanqi/article/details/6038822 #include<stdio.h>
【視頻編解碼·學習筆記】7. 熵編碼算法:基礎知識 & 哈夫曼編碼
html 節點 表示 效率 article tchar vector nod code 一、熵編碼概念: 熵越大越混亂 信息學中的熵: 用於度量消息的平均信息量,和信息的不確定性 越是隨機的、前後不相關的信息,其熵越高 信源編碼定理: 說明了香農熵越信源符號概率之間的
哈夫曼編碼大全
cad 節點 pos ada 哈夫曼 描述 多少 一個數 關於 題目: 哈夫曼編碼大全 描述: 關於哈夫曼樹的建立,編碼,解碼。 輸入 第一行輸入數字N,代表總共有多少個字符以及權值 第二第三行分別是一行字符串,以及每個字符對應的權值 接下來輸入一個數M,表示接下來有M
5.2哈夫曼樹——哈夫曼樹與哈夫曼編碼
node i++ insert 編碼 urn all IV right style #include <stdio.h> #include <stdlib.h> struct TreeNode{ int Weight; Huffm
HDU 1053 Entropy(哈夫曼編碼 貪心+優先隊列)
req else archive there format printf mod imp phi 傳送門: http://acm.hdu.edu.cn/showproblem.php?pid=1053 Entropy Time Limit: 2000/1000 MS (Ja
bzoj 4198 [ Noi 2015 ] 荷馬史詩 —— 哈夫曼編碼(k叉哈夫曼樹)
log mes com can rest opera 編碼 type pro 題目:https://www.lydsy.com/JudgeOnline/problem.php?id=4198 第一次寫哈夫曼樹!看了很多博客。 哈夫曼樹 & 哈夫曼編碼:https:/
SDUT 3345 數據結構實驗之二叉樹六:哈夫曼編碼
g++ mit mil ade 入隊 一位 hat 一個 隊列 數據結構實驗之二叉樹六:哈夫曼編碼 Time Limit: 1000 ms Memory Limit: 65536 KiB Problem Description 字符的編碼方式有多種,除了大家
樹-哈夫曼編碼
creat ++ .com truct col sca 哈夫曼編碼 最優 序號 哈夫曼樹(最優二叉樹) 每個葉子節點都有權值,權值越大的葉節點越靠近根節點,而權值越小的葉節點越遠離根節點 建立規則: 依據給出的n個權值,選擇最小的兩個權值作為一棵新的二叉樹的左右子樹,並且新
哈夫曼編碼--貪心策略
round 心算 ase value 刪除 huffman sin fine pac 哈夫曼編碼還是在暑假時候看的,那時候並沒有看懂因為比較菜(雖然現在也是很菜的),在《趣學算法》一書中這個問題講解十分到位,我這篇博客真的是難以望其項背,只能對其進行一點借鑒和摘抄吧 哈夫曼
java使用優先級隊列實現哈夫曼編碼
哈夫曼編碼 左右 integer string enc ash 小根堆 rac sta 思路: 構建小根堆 根據小根堆實現哈夫曼樹 根據哈夫曼樹對數據進行編碼 代碼實現如下: /** * @Author: DaleyZou * @Description: 使用jav