Giả sử có một thông báo C là một chuỗi các ký tự, trongđó mỗi ký tự xuất hiện độc lập với cùng một xác xuất tại bất kỳ vị trí nào trong thông báo.. input: chuỗi ký tự C tần suất w[c], c
Trang 1NỘI DUNG TRÌNH BÀY
1 Giới thiệu bài toán
2 Giải thuật Huffman Giải thuật Huffman
3. Tính đúng đắn của giải thuật Huffman
4 Cài đặt thuật toán
Trang 2Giả sử có một thông báo C là một chuỗi các ký tự, trong
đó mỗi ký tự xuất hiện độc lập với cùng một xác xuất tại bất
kỳ vị trí nào trong thông báo Yêu cầu đặt ra là mã hóa
thông báo thành một chuỗi các ký tự 0, 1
input: chuỗi ký tự C
tần suất w[c], cC output: mã nhịp phân của thông báo C
1.Giới thiệu bài toán
GiẢI THUẬT MÃ HÓA HUFFMAN
Trang 3Ví dụ: Xét thông báo gồm 5 ký tự a,b,c,d,e với tần suất các
ký tự:
Ký tự Tần suất(wi) Mã 1 (li)
Chiều dài trung bình của dãy nhị phân là: ltb= wili=3
GiẢI THUẬT MÃ HÓA HUFFMAN (tt)
Trang 4Cách khác là: xây dựng từ mã không là tiền tố của nhau.
Chiều dài trung bình của dãy nhị phân là: ltb= wili 2.2
Vậy có cách mã hóa nào có ltb<2.2?
Ký tự Tần suất(wi) Mã 1 Mã 2 (li)
GiẢI THUẬT MÃ HÓA HUFFMAN (tt)
Trang 5Vào năm 1952, D Huffman đã phát minh ra một cách tổng quát để tìm ra bảng mã này một cách tốt nhất
Bước 1: Đếm số lần xuất hiện của mỗi kí tự trong tệp (tính tần suất xuất hiện của ký tự)
Bước 2: Xây dựng cây nhị phân với các tần suất được chứa trong các nút Một nút mới được tạo ra với 2 nút con là các nút có tần suất bé nhất, với giá trị tần suất của nút mới bằng tổng tần suất của 2 nút con
Lặp lại như vậy cho đến khi tất cả các nút tổ hợp thành 1 cây duy nhất
2 Giải thuật Huffman
GiẢI THUẬT MÃ HÓA HUFFMAN (tt)
Trang 60.08 0.12 0.15 0.25 0.4
0.2
d
0.08
a 0.12
Ví dụ:
b e
0.4 0.25
c 0.15
0.35
c 0.15 0.2
d
0.08
a 0.12
b 0.4
e
0.25
b 0.4
0.6
0.35
c 0.15 0.2
d
0.08
a 0.12
e 0.25
Trang 7Chiều dài trung bình của mã là:
ltb=0.12*4+0.4*1+0.15*3+0.08*4+0.25*2= 2.15 < 2.2
Quy ước: 0: đi đến cây con trái; 1: đi đến cây con phải
Cây mã hóa Huffman:
1.0
0.6
0.35
c 0.15 0.2
d
0.08
a 0.12
e 0.25 b
0.4
GiẢI THUẬT MÃ HÓA HUFFMAN (tt)
Trang 8Tính tham lam được thể hiện?
Ta giả sử rằng C là một tập hợp gồm n ký tự và mỗi ký
tự cC là phần tử với tần số xác định f[c] Giải thuật xây dựng cây T tương ứng với mã tối ưu theo cách từ trên xuống
Nó bắt đầu với một tập gồm |C| lá và thực hiện một chuỗi gồm |C|-1 phép “kết hợp” để tạo ra cây cuối cùng Tại mỗi bước 2 phần tử có tần số nhỏ nhất được lấy ra để kết hợp với nhau, kết quả là một phần tử mới được tạo ra mà tần số của nó là tổng của các tần số của 2 phần tử được kết hợp
GiẢI THUẬT MÃ HÓA HUFFMAN (tt)
Trang 93 Tính đúng đắn của giải thuật Huffman
Để chứng minh thuật toán Huffman là đúng, ta chỉ ra
rằng bài toán xác định mã tiền tố tối ưu thể hiện sự lựa chọn tham lam
Bổ đề 16.2
Cho C là một bảng mẫu tự mà mỗi ký tự c có tần số là f[c] Cho x và y là 2 ký tự trong C có tần số thấp nhất Thì tồn tại mã tiền tố tối ưu đối với C mà trong đó những từ
mã của x và y có chiều dài giống nhau và chỉ khác duy nhất ở bit cuối cùng
GiẢI THUẬT MÃ HÓA HUFFMAN (tt)
Trang 10GiẢI THUẬT MÃ HÓA HUFFMAN (tt)
Bổ đề 16.3
Cho C là một bảng mẫu tự cho trước với tần số f[c] xác định với mỗi ký tự Cho x và y là hai ký tự trong C với tần số nhỏ nhất Cho C’ là bảng mẫu tự C với x và y bị xoá
và có thêm ký tự mới z, vì vậy C’=C-{x,y}+{z}; xác định f của C’ cũng là của C, loại trừ rằng f[z]=f[x]+f[y] Cho T’ là cây
bất kỳ biểu diễn mã tiền tố tối ưu của bảng mẫu tự C’ Thì cây T, thu được từ T’ bằng việc thay thế nút lá z với một nút trong có x và y là con, biểu diễn mã tiền tố tối ưu cho bảng mẫu tự C
Bổ đề 16.4
Thủ tục Huffman hình thành nên mã tiền tố tối ưu
Trang 114 Xây dựng giải thuật mã hóa Huffman
HUFFMAN(C)
1 n ← |C|
2 Q ← C
3 for i =1 to n - 1
4 do allocate a new node z
5 left[z] ← EXTRACT-MIN (Q)
6 right[z] ← EXTRACT-MIN (Q)
7 f [z] ← f [x] + f [y]
8 INSERT(Q, z)
9 return EXTRACT-MIN(Q)
Độ phức tạp tính toán: O(nlgn)
GiẢI THUẬT MÃ HÓA HUFFMAN (tt)
Trang 12Cơ sở lý thuyết của phương pháp tham lam