Data Structure Structure & Algor Algorithm ithm - Nguy Nguyen en Tri Tri Tua uann - Kh Khoa oa CNT CNTT T H KHTN Tp.HCM
NÉN D LIU NÉN HUFFMAN Bài gi ging C Cu trúc d d li liu & Gi Gii thu thut
1
2
Ni dung trình bày
Gi i thiu nén d liu G thut nén RLE Static Huffman (Nén Huffman t ĩ nh) ĩ nh) Adaptive Huffman (Nén Huffman ng)
2
Ni dung trình bày
Gi i thiu nén d liu G thut nén RLE Static Huffman (Nén Huffman t ĩ nh) ĩ nh) Adaptive Huffman (Nén Huffman ng)
Gii thiu 3
Các thut ng thư ng ng dùng Data Compression Lossless Compression Loss Com ression Encoding Decoding Run / Run Length LZ77 , LZ78 RLE, Arithmetic, Huffman, LZ77,
Gii thiu (tt) 4
Mc ích ca nén d liu:
Gi Gim kích thư thư c d d li liu Khi lưu tr Khi truyn d liu
Tăng tính b bo m mt
Gii thiu (tt) 5
Có hai hình thc nén:
Nén bo toàn thông tin (Lossless Compression): Không mt mát thông tin nguyên thy Hiu sut nén không cao: 10% – 60% Các gii thut tiêu biu: RLE, Arithmetic, Huffman, LZ77, LZ78, …
Nén không bo toàn thông tin (Lossy Compression): Thông tin nguyên thy b mt mát Hiu sut nén cao 40% – 90% Các gii thut tiêu biu: JPEG, MP3, MP4, …
Đnh ngh ĩ a 6
Hiu sut nén (%): T l % kích thư c d liu gim ư c sau khi áp dng thut toán nén
D (%) = (N – M)/N*100
N: kích thư c data trư c khi nén M: kích thư c data sau khi nén
Hiu sut nén tùy thuc
Phươ ng pháp nén
c trưng ca d liu
ng dng 7
Nén tp tin: Dùng khi cn Backup, Restore,… d liu Dùng các thut toán nén bo toàn thông tin uan tâm n nh d n format ca t Khôn Các phn mm: PKzip, WinZip, WinRar,…
tin
Gii thut nén RLE 8
RLE = Run Length Encoding: mã hoá theo dài lp li ca d liu Tư tư ng Hình thc biu din thông tin dư tha ơ n gin: “ư ng chy” (run) – là dãy các ký t lp li liên tip ư ng c y ư c u n ng n gn: < n p> < t> Khi dài ư ng chy l n → Tit kim áng k Ví d Data = AAAABBBBBBBBCCCCCCCCCCDEE (# 25 bytes) Datanén = 4A8B10C1D2E (# 10 bytes)
Gii thut nén RLE 9
Tư tư ng
Khi vn dng thc t, cn có bin pháp x lý tránh trư ng h p “phn tác dng” i v i các “run c bit – 1 ký t”
X (# 1 bytes) → 1X (# 2 bytes)
10
Gii thut nén Huffman
Gi i thiu
Huffman t ĩ nh (Static Huffman)
Huffman ng (Adaptive Huffman)
Gii thut Huffman – Gii thiu 11
Hình thành
Vn : Mt gii thut nén bo toàn thông tin; Không ph thuc vào tính cht ca d liu; ng dng rng rãi trên bt kỳ d liu nào, v i hiu sut tt
Gii thut Huffman – Gii thiu 12
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: S dn vài bits biu din 1 k t ( i là “mã bit” – bits code) dài “mã bit” cho các ký t không ging nhau: Ký t xut hin nhiu ln → biu din bng mã ngn; Ký t xut hin ít → biu din bng mã dài → Mã hóa bng mã có 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 d liu t ĩ nh
Gii thut Huffman – Gii thiu 13
Gi s có d liu 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 Ký t A B C D E
S ln xut hin trong file f 10 8 6 5 2
Gii thut Huffman – Gii thiu 14
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 Ký t A B C D E
Mã 11 10 00 011 010
15
Static Huffman
Thut toán nén To c y Hu man Phát sinh bng mã bit Lưu tr thông tin dùng gii nén Thut toán gii nén
Static Huffman – Thut toán 16
Thut toán nén: [b1] Duyt file → Lp bng thng kê s ln xut hin ca mi loi ký t [b2] Phát sinh cây Huffman d a vào bng thng kê [b3] T cây Huffman → phát sinh bng mã bit cho các ký t [b4] Duyt file → Thay th các ký t bng mã bit tươ ng ng [b5] Lưu li thông tin ca cây Huffman dùng gii nén
Static Huffman – Thut toán 17
f = “ADDAABBCCBAAABBCCCBBBCDAADDEEAA” [b1]
Ký t
1 CEDBA
Level 1
31
Root node
2 Level 2
3
CED 02
BA 18
0
1
4 Level 3
5
6
7
C 06
ED 07
B 08
A 10
0
1
0
1
8 Level 4
[b2]
9
E 02
D 05
0
1
[b3] [b4]
Node Character Frequency Code
f = “11011011111110100000101111111010000000 1010100001111110110110100101111”
A B C
S ln xut hin 10 8 6
E
2
Ký t Mã bit A 11 B 10 C 00 D 011 E 010
Static Huffman – Cây Huffman 18
To cây Huffman
Mô t cây Huffman: mã Huffman ư c biu din bng 1 cây nh phân
Mi nút lá cha 1 ký t Nút cha s cha các k t ca nhng nút con Mi nút ư c gán mt trng s: Nút lá có trng s bng s ln xut hin ca ký t trong file Nút cha có trng s bng tng trng s ca các nút con
1
Level 1
CEDBA
2
Level 2
3
CED 02
BA 18
0
1
4
5
Level C 06 3 0 Level 4
31
6
7
ED 07
B 08
A 10
1
0
1
8
9
E 02
D 05
0
1
Node Character Frequency Code
Static Huffman – Thut toán 19
To cây Huffman:
Tính cây Huffman: Nhánh trái tươ ng ng v i mã hoá bit ‘0’; nhánh phi tươ ng ng v i mã hoá bit ‘1’ Các nút có tn s thp nm xa gc → mã bit dài Các nút có tn s cao nm gn gc → mã bit ngn S nút ca cây: (2n-1)
Static Huffman – D liu 20
// Cu trúc d liu lư u tr cây Huffman #define MAX_NODES 511 // 2*256 - 1 typedef struct { char c; // ký t long nFreq; // tr ng s int nLeft; // cây con trái int nRight; // cây con ph i } HUFFNode; HUFFNode HuffTree[MAX_NODES];
Static Huffman – Phát sinh cây 21
To cây Huffman:
Thut toán phát sinh cây: [b1] Chn trong bng thng kê 2 ph n t x,y có trng s thp nht → to thành nút cha z: .
=
.
.
z.nFreq = x.nFreq + y.nFreq; z.nLeft = x (*) z.nRight = y (*)
[b2] Loi b nút x và y khi bng; [b3] Thêm nút z vào b ng; [b4] Lp li bư c [b1] - [b3] cho n khi ch còn li 1 nút duy nht trong bng
Static Huffman – Phát sinh cây 22
(*) Qui ư c: nút có trng s nh nm bên nhánh trái; nút có trng s l n nm bên nhánh phi; nu trng s bng nhau, nút có ký t nh nm bên nhánh trái; nút có ký t l n nm bên nhánh phi
Static Huffman – Ví d 23
Ký t SLXH A 10 B 8 C 6 D 5 E 2
ED 07 1
E 02
D 05
0
1
Ký t SLXH A 10 B 8 ED 7 C 6
Ký t SLXH BA 18 CED 13
CEDBA 31 1
BA 18 1
CED 13
BA 18
B 08
A 10
0
1
0
1
Minh ha quá trình to cây
CED 13 0
C 06
ED 07
0
1
Ký t SLXH CED 13 A 10 B 8
Static Huffman – Ví d 24
1 CEDBA
Level 1
31
Root node
2 Level 2
3
CED 02
BA 18
0
1
4 Level 3
5
6
C 06
ED 07
B 08
A 10
0
1
0
1
8 Level 4
7
9
E 02
D 05
0
1
Node Character Frequency
Cây Huffman sau khi to
Code
Static Huffman – Phát sinh mã 25
Phát sinh mã bit cho các ký t: Mã ca mi ký t ư c to bng cách duyt t nút gc n nút lá cha ký t ó; Khi duyt sang trái, to ra 1 bit 0; Khi duyt sang phi, to ra 1 bit 1;
Static Huffman – Phát sinh mã 26
Phát sinh mã bit cho các ký t: 1
Level 1
Ký t A B C D E
Mã bit 11 10 00 011 010
CEDBA
Root node
2
Level 2
3
CED 13
BA 18
0
1
4
5
Level C 06 3 0 Level 4
31
6
7
ED 07
B 08
A 10
1
0
1
8
9
E 02
D 05
0
1
Node Character Frequency Code
Static Huffman – Lưu tr 27
Lưu tr thông tin dùng gii nén
P. Pháp 1: lưu bng mã bit Ký t A B C D E
Mã bit 11 10 00 011 010
P. Pháp 2: lưu s ln xut hin Ký t S ln xut hin A 10 B 8 C 6 D 5 E 2
Static Huffman – Gii nén 28
Thut toán gii nén: [b1] Xây dng li cây Huffman (t thông tin ư c lưu) [b2] Kh i to nút hin hành pCurr = pRoot [b3] c 1 bit b t file nén f n b4 Nu (b==0) thì Curr = Curr.nLeft
ngư c li pCurr = pCurr.nRight
[b5] Nu pCurr là nút lá thì: - Xut ký t ti pCurr ra file - Quay li bư c [b2]
ngư c li - Quay li bư c [b3]
[b6] Thut toán s dng khi ht file f n
Static Huffman – Gii nén 29
0
0
1
1
0
1
T
E 0
1
0
1
A
S
N
O
30
Adaptive Huffman
Gi i thiu tư ng Cây Huffman ng Thut toán nén (Encoding) Thut toán gii nén (Decoding)
Adaptive Huffman – Gii thiu 31
Hn ch ca Huffman t ĩ nh: Cn duyt file 2 ln khi nén chi phí cao Cn phi lưu tr thông tin gii nén tăng kích thư c d liu nén D liu cn nén phi có sn không nén ư c trên d liu phát sinh theo th i gian thc (online)
Adaptive Huffman – Ưu đim 32
Không cn tính trư c s ln xut hin ca các ký t Quá trình nén: ch cn 1 ln duyt file Không cn lưu thông tin phc v cho vic gii nén n “on- ne” r n u s n eo g an thc
Adaptive Huffman – Ý tưng 33
Huffman t ĩ nh: cây Huffman ư c to thành t bng thng kê s ln xut hin ca các ký t
Nén “on-line” không có trư c bng thng kê To cây như th nào ? Phươ ng pháp: kh i to cây “ti thiu” ban u và “ c p nh t cây d n d n” (~ thích nghi – Adaptive) da trên d liu phát sinh trong quá trình nén/gii nén
Adaptive Huffman – Ý tưng 34
Quá trình nén/gii nén ca Adaptive Huffman s ư c thc hin cùng lúc v i quá trình cp nht cây. Nén Adaptive Huffman: Kh i to cây c ký t u vào Nén ký t và cp nht cây
Gii nén Adaptive Huffman: Kh i to cây c ký t t d liu nén Gii nén và cp nht cây
35
Adaptive Huffman Cây Huffman đng
Mt cây nh phân có n nút lá ư c gi là cây Huffman nu tha: Các nút lá có trng s Wi >= 0, i ∈ [1..n] Các nút nhánh có tr n s bn tn tr n s các nút con ca nó Tính cht Anh/Em (Sibling Property):
Mi nút, ngoi tr nút gc, u tn ti 1 nút anh/em (có cùng nút cha) Khi sp xp các nút trong cây theo th t tăng dn ca trng s thì mi nút luôn k v i nút anh/em ca nó
36
Adaptive Huffman Cây Huffman đng (tt)
thun l i khi to cây, ta quy ư c: Các nút s ư c gán mt s th t gim dn. Các nút m i ư c thêm vào luôn có s th t nh hơ n nhng node ang có trên cây. Trong quá trình to cây, tính anh em phi ư c bo toàn: nhng nút có s th t l n phi có trng s >= nhng nút có trng s nh Nu không vi phm cn iu chnh
Adaptive Huffman – To cây 37
Cách thc to cây:
Kh i to cây “ti thiu”, ch có nút Escape (0-node) hay nút NYT (Not yet transmitted): nút không con, không ký t. Cp nht 1 ký t c vào cây: Nu c chưa có trong cây thêm m i nút lá Nu c ã có trong cây tăng trng s nút c lên 1 (+1) Cp nht trng s ca các nút liên quan trong cây
Adaptive Huffman - Thêm nút lá 38
Khi thêm nút lá cho ký t c: To 2 nút: mt nút cho ký t c (W = 1) và mt nút Escape m i (W = 0) Hai nút m i ư c thêm vào làm con ca nút Escape hin ti Kim tra vi phm tính cht anh em và Cp nht trng s các nút có liên quan
Adaptive Huffman – Ví d 39
Kh i to cây:
Thêm A:
Cp nht cây
D liu nén
ESC W = 0; #50
D liu nén W = 1; #50 ESC W = 0; #48
A
A W = 1; #49
40
Adaptive Huffman Cp nht trng s
Bt u t nút m i thêm hoc ư c cp nht i ngư c lên n nút gc và tăng trng s các nút lên 1 cp nht
Adaptive Huffman– Ví d (tt) 41
D liu nén W = 1; #50 ESC W = 0; #48
A
A W = 1; #49
Thêm B:
D liu nén
Nén B Cp nht cây
W = 2;
W = 1;
ESC W = 0; #46
#48
#50
A0B
A W = 1; #49
B W = 1; #47
42
Adaptive Huffman Kim tra tính cht anh em
Tính cht anh em vi phm khi:
Tn ti mt nút X có trng s W + 1 có s th t nh hơ n mt nút có Y trng s W
iu chnh: i ch (d liu) nút X có hin ti v i nút có s th t l n nh t có trng s W. Cp nht trng s các nút có liên quan, kim tra lan truyn n các nút khác.
Adaptive Huffman – Ví d (tt) 43
Thêm B
D liu nén A0B01
W = 2;
ESC W = 0; #46
W = 3;
#50
#48
A W = 1; #49
B W = 2; #47
W = 1;
ESC W = 0; #46
W = 3;
#50
#48
B W = 2; #49
A W = 1; #47
Adaptive Huffman– Ví d (tt) 44
Thêm CC
D liu nén A0B0100C001
W = 3;
W = 2; #46
ESC W = 0; #44
W = 5;
#50
#48
B W = 2; #49
A W = 1; #47
C W = 2; #45
W = 3;
W = 1; #46
ESC W = 0; #44
W = 5;
#50
#48
B W = 2; #49
C W = 2; #47
A W = 1; #45
Adaptive Huffman – Ví d (tt) 45
iu chnh cây W = 5;
#50
B W = 2; #48
W = 3;
W = 1; #46
ESC W = 0; #44
#49 C W = 2; #47
A W = 1; #45
Adaptive Huffman – Ví d (tt) 46
Thêm AA: D liu nén ? Cây Huffman ?