1. Data Compression
Gi i thi u
Giải thuật nén RLE
Giải thuật nén Huffman
Winter 2006
Data Structure & Algorithm - Data Compression - Nguyen Tri Tuan, DH.KHTN Tp.HCM
29
Giải thuật nén Huffman
Gi i thi u
Huffman tĩnh (Static Huffman)
Huffman đ ng (Adaptive Huffman)
Winter 2006
Data Structure & Algorithm - Data Compression - Nguyen Tri Tuan, DH.KHTN Tp.HCM
30
15
2. Giải thuật nén Huffman – Giới thiệu
Hình thành
V nđ :
M t gi i thu t nén b o toàn thông tin;
Không ph thu c vào tính ch t c a d li u;
ng d ng r ng rãi trên b t kỳ d li u nào, v i hi u su t t t
Tư tư ng chính:
Phương pháp cũ: dùng 1 dãy c đ nh (8 bits) đ bi u di n 1 ký t
Huffman:
S d ng vài bits đ bi u di n 1 ký t (g i là “mã bit” – bits code)
Đ dài “mã bit” cho các ký t không gi ng nhau:
Ký t xu t hi n nhi u l n
bi u di n b ng mã ng n;
Ký t xu t hi n ít
bi u di n b ng mã dài
Mã hóa b ng mã có đ dài thay đ i (Variable Length Encoding)
David Huffman – 1952: tìm ra phương pháp xác đ nh mã t i ưu
trên d li u tĩnh
Winter 2006
Data Structure & Algorithm - Data Compression - Nguyen Tri Tuan, DH.KHTN Tp.HCM
31
Giải thuật nén Huffman – Giới thiệu (tt)
Gi s có d li u như sau:
f = “ADDAABBCCBAAABBCCCBBBCDAADDEEAA”
Bi u di n bình thư ng (8 bits/ký t ):
Sizeof(f) = 10*8 + 8*8 + 6*8 + 5*8 + 2*8
= 248 bits
Ký t
S
l n xu t hi n
trong file f
A
B
8
C
6
D
5
E
Winter 2006
10
2
Data Structure & Algorithm - Data Compression - Nguyen Tri Tuan, DH.KHTN Tp.HCM
32
16
3. Giải thuật nén Huffman – Giới thiệu (tt)
Bi u di n b ng mã có đ dài thay đ i (theo
b ng):
Sizeof(f) = 10*2 + 8*2 + 6*2 + 5*3 + 2*3
= 69 bits
Ký t
A
Mã
11
B
C
D
E
Winter 2006
10
00
011
010
Data Structure & Algorithm - Data Compression - Nguyen Tri Tuan, DH.KHTN Tp.HCM
33
Static Huffman
Thu t toán nén
T o cây Huffman
Phát sinh b ng mã bit
Lưu tr thông tin dùng đ gi i nén
Thu t toán gi i nén
Winter 2006
Data Structure & Algorithm - Data Compression - Nguyen Tri Tuan, DH.KHTN Tp.HCM
34
17
4. Static Huffman (tt)
Thu t toán nén:
[b1] Duy t file
lo i ký t
L p b ng th ng kê s l n xu t hi n c a m i
[b2] Phát sinh cây Huffman d a vào b ng th ng kê
[b3] T cây Huffman
[b4] Duy t file
phát sinh b ng mã bit cho các ký t
Thay th các ký t b ng mã bit tương ng
[b5] Lưu l i thông tin c a cây Huffman dùng đ gi i nén
Winter 2006
Data Structure & Algorithm - Data Compression - Nguyen Tri Tuan, DH.KHTN Tp.HCM
35
Static Huffman (tt)
[b1]
f = “ADDAABBCCBAAABBCCCBBBCDAADDEEAA”
Ký
t
S
l n xu t
hi n
A
8
C
6
D
5
E
[b2]
10
B
2
Ký
t
Mã bit
A
11
B
10
C
00
D
011
E
010
[b3]
[b4]
fnén = 11011011111110100000101111111010000000
1010100001111110110110100101111
Winter 2006
Data Structure & Algorithm - Data Compression - Nguyen Tri Tuan, DH.KHTN Tp.HCM
36
18
5. Static Huffman (tt)
T o cây Huffman:
Mô t cây Huffman: mã Huffman đư c bi u di n b ng
1 cây nh phân
M i nút lá ch a 1 ký t
Nút cha s ch a các ký t
c a nh ng nút con
M i nút đư c gán m t tr ng
s :
Nút lá có tr ng s b ng s
l n xu t hi n c a ký t
trong file
Nút cha có tr ng s b ng
t ng tr ng s c a các nút
con
Winter 2006
Data Structure & Algorithm - Data Compression - Nguyen Tri Tuan, DH.KHTN Tp.HCM
37
Static Huffman (tt)
T o cây Huffman: (tt)
Tính ch t cây Huffman:
Nhánh trái tương ng v i mã hoá bit ‘0’; nhánh ph i tương
ng v i mã hoá bit ‘1’
Các nút có t n s th p n m xa g c
mã bit dài
Các nút có t n s cao n m g n g c
mã bit ng n
S nút c a cây: (2n-1)
Winter 2006
Data Structure & Algorithm - Data Compression - Nguyen Tri Tuan, DH.KHTN Tp.HCM
38
19
6. Static Huffman (tt)
// C u trúc d li u lưu tr
#define MAX_NODES 511
cây Huffman
// 2*256 - 1
typedef struct {
char
c;
long
nFreq;
int
nLeft;
int
nRight;
} HUFFNode;
ký t
tr ng s
cây con trái
cây con ph i
//
//
//
//
HUFFNode HuffTree[MAX_NODES];
Winter 2006
Data Structure & Algorithm - Data Compression - Nguyen Tri Tuan, DH.KHTN Tp.HCM
39
Static Huffman (tt)
T o cây Huffman: (tt)
Thu t toán phát sinh cây:
[b1] Ch n trong b ng th ng kê 2 ph n t x,y có tr ng s th p
t o thành nút cha z:
z.c = min(x.c + y.c);
z.nFreq = x.nFreq + y.nFreq;
z.nLeft = x (*)
z.nRight = y (*)
[b2] Lo i b nút x và y kh i b ng;
[b3] Thêm nút z vào b ng;
[b4] L p l i bư c [b1] - [b3] cho đ n khi ch còn l i 1 nút duy
nh t trong b ng
nh t
(*) Qui ư c:
- nút có tr ng s nh n m bên nhánh trái; nút có tr ng s l n n m bên nhánh ph i;
- n u tr ng s b ng nhau, nút có ký t nh n m bên nhánh trái; nút có ký t l n n m
bên nhánh ph i
- n u có các node có tr ng s b ng nhau
ưu tiên x lý các node có ký t ASCII
nh trư c
Winter 2006
Data Structure & Algorithm - Data Compression - Nguyen Tri Tuan, DH.KHTN Tp.HCM
40
20
8. Static Huffman (tt)
Phát sinh mã bit cho các ký t :
Mã c a m i ký t đư c t o b ng cách duy t t nút g c đ n nút
lá ch a ký t đó;
Khi duy t sang trái, t o ra 1 bit 0;
Khi duy t sang ph i, t o ra 1 bit 1;
Ký
t
A
11
B
10
C
00
D
011
E
Winter 2006
Mã
010
Data Structure & Algorithm - Data Compression - Nguyen Tri Tuan, DH.KHTN Tp.HCM
43
Static Huffman (tt)
Lưu tr thông tin dùng đ gi i nén:
P.Pháp 1: lưu b ng mã bit
P.Pháp 2: lưu s l n xu t hi n
Ký
t
Ký
t
A
11
A
10
B
10
B
8
C
00
C
6
D
011
D
5
E
Winter 2006
Mã
010
E
2
S
l n xu t
hi n
Data Structure & Algorithm - Data Compression - Nguyen Tri Tuan, DH.KHTN Tp.HCM
44
22
9. Static Huffman (tt)
Thu t toán gi i nén:
[b1] Xây d ng l i cây Huffman (t thông tin đư c lưu)
[b2] Kh i t o nút hi n hành pCurr = pRoot
[b3] Đ c 1 bit b t file nén fn
[b4] N u (b==0) thì pCurr = pCurr.nLeft
ngư c l i pCurr = pCurr.nRight
[b5] N u pCurr là nút lá thì:
- Xu t ký t t i pCurr ra file
- Quay l i bư c [b2]
ngư c l i
- Quay l i bư c [b3]
[b6] Thu t toán s d ng khi h t file fn
Winter 2006
Data Structure & Algorithm - Data Compression - Nguyen Tri Tuan, DH.KHTN Tp.HCM
45
Static Huffman (tt)
Cây Huffman và qui trình gi i nén cho chu i đư c mã hoá “1000110”
Winter 2006
Data Structure & Algorithm - Data Compression - Nguyen Tri Tuan, DH.KHTN Tp.HCM
46
23