5. Ý nghĩa khoa học của luận văn
2.2.2. Thuật toán nén
Gọi bảng chữ cái hiện tại là S bao gồm các ký tự đã được nhận dạng, xây dựng nên cây Huffman, và một ký hiệu đặc biệt không nằm trong bảng chữ cái (- phím shift). Trọng số của ký hiệu luôn là 0, còn ứng với các ký tự có trong bảng chữ cái, trọng số chính là số lần xuất hiện của ký tự ấy từ đầu chuỗi đến ký tự đang duyệt.
Khởi tạo: S bao gồm một ký hiệu (S = ), cây Huffman cũng bao gồm một nút gốc và nút .
Vòng lặp:
o Đọc một ký tự đầu vào, nếu đã hết d ữ liệu, thoát khỏi vòng lặp. o Xây dựng lại cây Huffman:
Nếu một ký tự mới được xuất hiện lần đầu, cập nhật ký tự này vào bảng S, và cho trọng số của ký tự mới là 1
Nếu ký tự này đã xuất hiện trước đó, trọng số của nó được tãng lên 1. Ký hiệu trọng số này được đặt cạnh chữ cái. Với mỗi chữ cái si
thuộc bảng S, ký hiệu mã gốc của ký tự đó khi chưa mã hóa là g(si).
Ví dụ thuật toán mã hóa Huffman động với chuỗi đầu vào “ABBAC”:
STT Input Output Bảng chữ cái Dựng cây
0 {}
1 ‘A’ 0g(A) {,A(1)}
2 ‘B’ 0g(B) {,A(1),B(1)}
4 ‘A’ 01 {,A(2),B(2)}
5 ‘C’ 00g(C) {,C(1),A(2),B(2)}
Hình 10 . Mã hóa bằng phương pháp Huffman động
Thuật toán:
1. Khởi tạo cây Huffman T có chứa duy nhất nút SHIFT. 2. while more characters remain do
3. s next_symbol_in_text () 4. if s has been seen before then
5. output h(s)
6. else
7. output h(SHIFT) followed by g(s)
8. end if
9. T update_tree (T) 10. end while