1. 程式人生 > >利用哈夫曼編碼英文字母表

利用哈夫曼編碼英文字母表

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