1.3 Thuật toán tham lam
1.3.4 Thuật toán Huffman
Trong khoa học máy tính và lý thuyết thơng tin, mã Huffman là một thuật tốn mã hóa dùng để mã hóa dữ liệu. Nó dựa trên bảng tần suất xuất hiện các kí tự cần mã hóa để xây dựng một bộ mã nhƒ phân cho các kí tự đó sao cho dung lượng (số bít) sau khi mã hóa là nhỏ nhất.
Thuật tốn mã hóa Huffman đưa những ký tự được xuất hiện nhiều về dạng biểu diễn tổn thất ít bộ nhớ nhất, cịn những ký tự ít xuất hiện sœ phải biểu diễn dưới dạng dài hơn. Vấn đề cần phải giải quyết là tìm đ ợc một bảng mãƣ hóa ở dạng tiền tố sao cho chiều dài trung bình của bảng mã ấy là nhỏ nhất có thể. Để giải bài tốn xây dựng bảng mã ở dạng tiền tố, có thể sử dụng cây nhƒ phân, đ a các chữ cái về vƒ trí các nútƣ lá.
Tính chất thuật tốn Huffman:
- Nhánh trái tương ứng với mã hóa bít “0”.
- Nhánh phải tương ứng với mã hóa bít “1”.
- Các nút có tần số thấp nằm ở xa gốc -> mã bít dài.
- Các nút có tần số cao nằm ở gần gốc -> mã bít ngắn.
- Số nút của cây: (2n-1)
Thuật toán Huffman:
- Xây dựng bảng thống kê tần số xuất hiện của các ký tự cần mã húa - Măi phn t c xem như là đ§nh của một cây
- Lặp cho đến lúc ch§ cịn một cây
o Chọn 2 cây có trọng số bé nhất ghép thành một cây mới - Từ đ§nh duyệt cây
o Về phải chọn bit 1
o Đến lá thì dãy bit đã duyệt chính là mã mới của ký tự Ví d: Vi chuăi u vo có tần số xuất hiện là
Bảng 1. 4 Bảng thống kê tần số xuất hiện của các ký tự
Bảng 1. 5 Các bước sử dụng thuật toán Huffman
Sử dụng thuật tốn của Huffman, chúng ta có thể lập bảng sau.
Ký tự A B C D -
Tần số 0.35 0.1 0.2 0.2 0.15
Mã 11 100 00 01 101