15
Winter 2006 Data Structure & Algorithm - Data Compression - Nguyen Tri Tuan, DH.KHTN Tp.HCM 29
Data Compression
Gii thiu
Gii thut nén RLE
Gii thut nén Huffman
Winter 2006 Data Structure & Algorithm - Data Compression - Nguyen Tri Tuan, DH.KHTN Tp.HCM 30
Gii thut nén Huffman
Gii thiu
Huffman tĩnh (Static Huffman)
Huffman động (Adaptive Huffman)
16
Winter 2006 Data Structure & Algorithm - Data Compression - Nguyen Tri Tuan, DH.KHTN Tp.HCM 31
Gii thut nén Huffman – Gii thiu
Hình thành
Vn đề:
Mt gii thut nén bo toàn thông tin;
Không phthuc vào tính cht ca dliu;
ng dng rng rãi trên bt kdliu nào, vi hiu sut tt
Tư tưởng chính:
Phương pháp cũ: dùng 1 dãy c đnh (8 bits) để biu din 1 ký t
Huffman:
Sdng vài bits để biu din 1 ký t(gi là mã bit” bits code)
Độ dài “mã bit” cho các ký tkhông ging nhau:
Ký txut hin nhiu ln biu din bng mã ngn;
Ký txut hin ít biu din bng mã dài
Mã hóa bng mã đdài thay đổi (Variable Length Encoding)
David Huffman – 1952: tìm ra phương pháp xác đnh mã ti ưu
trên dliu tĩnh
Winter 2006 Data Structure & Algorithm - Data Compression - Nguyen Tri Tuan, DH.KHTN Tp.HCM 32
Gii thut nén Huffman – Gii thiu (tt)
Gis dliu như sau:
f = “ADDAABBCCBAAABBCCCBBBCDAADDEEAA”
Biu din bình thường (8 bits/ký t):
Sizeof(f) = 10*8 + 8*8 + 6*8 + 5*8 + 2*8
= 248 bits
2E
5D
6C
8B
10 A
Sln xut hin
trong file f
t
17
Winter 2006 Data Structure & Algorithm - Data Compression - Nguyen Tri Tuan, DH.KHTN Tp.HCM 33
Gii thut nén Huffman – Gii thiu (tt)
Biu din bng mã có đdài thay đổi (theo
bng):
Sizeof(f) = 10*2 + 8*2 + 6*2 + 5*3 + 2*3
= 69 bits
010 E
011D
00C
10B
11A
Ký t
Winter 2006 Data Structure & Algorithm - Data Compression - Nguyen Tri Tuan, DH.KHTN Tp.HCM 34
Static Huffman
Thut toán nén
To cây Huffman
Phát sinh bng mã bit
Lưu trthông tin dùng để gii nén
Thut toán gii nén
18
Winter 2006 Data Structure & Algorithm - Data Compression - Nguyen Tri Tuan, DH.KHTN Tp.HCM 35
Static Huffman (tt)
Thut toán nén:
[b1] Duyt file Lp bng thng kê sln xut hin ca mi
loi ký t
[b2] Phát sinh cây Huffman da vào bng thng kê
[b3] Ty Huffman phát sinh bng mã bit cho các ký t
[b4] Duyt file Thay thếcác ký tbng mã bit tương ng
[b5] Lưu li thông tin ca cây Huffman dùng để gii nén
Winter 2006 Data Structure & Algorithm - Data Compression - Nguyen Tri Tuan, DH.KHTN Tp.HCM 36
Static Huffman (tt)
f = “ADDAABBCCBAAABBCCCBBBCDAADDEEAA”
2E
5D
6C
8B
10 A
Sln xut
hin
t
010 E
011D
00C
10B
11A
Mã bit
t
[b1]
[b2]
[b3]
f
nén
= 11011011111110100000101111111010000000
1010100001111110110110100101111
[b4]
19
Winter 2006 Data Structure & Algorithm - Data Compression - Nguyen Tri Tuan, DH.KHTN Tp.HCM 37
Static Huffman (tt)
To cây Huffman:
Mô tcây Huffman: mã Huffman được biu din bng
1 cây nhphân
Mi nút lá cha 1 ký t
Nút cha scha các ký t
ca nhng nút con
Mi nút được gán mt trng
s:Nút lá trng sbng s
ln xut hin ca ký t
trong file
Nút cha có trng sbng
tng trng sca các nút
con
Winter 2006 Data Structure & Algorithm - Data Compression - Nguyen Tri Tuan, DH.KHTN Tp.HCM 38
Static Huffman (tt)
To cây Huffman: (tt)
Tính cht cây Huffman:
Nhánh trái tương ng vi mã hoá bit ‘0’; nhánh phi tương
ng vi mã hoá bit ‘1’
Các nút có tn sthp nm xa gc mã bit dài
Các nút có tn scao nm gn gc mã bit ngn
Snút ca cây: (2n-1)