Thuật toán Shannon-Fano phát triển độc lập bởi Shannon ở Bell Labs và Robert Fano tại MIT. Để minh họa thuật toán, chúng ta giả sử các ký hiệu được mã hoá là các ký tự trong từ HELLO. Tần xuất xuất hiện của các ký tự là:
92
Các ký hiệu H E L O
Tần xuất xuất hiện 1 1 2 1
Các bước của thuật toán mã hóa Shannon-Fano có thểđược trình bày theo cách từ
trên xuống:
1. Phân loại các ký hiệu theo tần xuất xuất hiện của chúng
2. Phân chia theo đệ quy các ký hiệu thành hai phần, với mỗi khoảng cùng số lượng của số lần xuất hiện, cho đến khi tất cả các phần có chứa chỉ có một ký hiệu.
Một cách tự nhiên của việc thực hiện các thủ tục trên là xây dựng một cây nhị
phân. Theo quy ước, chúng ta gán bit 0 cho nhánh trái của nó và bit 1 cho các nhánh phải.
Hình 3.40: Cây mã hóa cho từ HELLO bởi thuật toán Shannon-Fano
Ban đầu, các ký hiệu được sắp xếp là LHEO. Hình 3.40 cho thấy, việc chia đầu tiên tạo ra làm 2 phần: (a) L với tần suất xuất hiện là 2, ký hiệu là L: (2) ; và (b) H, E và O với tổng số lần xuất hiện là 3, ký hiệu là H, E, O: (3). Lần phân chia thứ hai sinh ra H: (1) và E, O: (2) và lần phân chia cuối cùng là E: (l) và O: (1).
Bảng 3.3 tóm tắt kết quả, hiển thị mỗi ký hiệu, tần xuất xuất hiện của chúng, nội
dung thông tin ( 1
2
lo g
i
p ), từ mã kết quả, và số bit cần thiết để mã hóa cho mỗi ký hiệu trong từ HELLO. Tổng số bit sử dụng được hiển thị ở phía dưới và entropy trong trường hợp này được tính:
93 = 0.4 x 1.32 + 0.2 x 2.32 + 0.2 x 2.32 + 0.2 x 2.32 = 1.92 = 0.4 x 1.32 + 0.2 x 2.32 + 0.2 x 2.32 + 0.2 x 2.32 = 1.92 Symbol Count 1 2 log i i p p Code Số bít được dùng L 2 1.32 0 2 H 1 2.32 10 2 E 1 2.32 110 3 O 1 2.32 111 3 Tổng số bít 10
Bảng 3.3: Kết quả thực hiện bởi thuật toán Shannon-Fano cho từ HELLO.
Điều này cho thấy số bit trung bình tối thiểu của để mã mỗi ký hiệu trong từ
HELLO là 1,92. Trong ví dụ này, các thuật toán Shannon-Fano sử dụng một giá trị trung bình là 10 / 5 = 2 bit để mã mỗi ký tự, khá gần với giới hạn thấp là1,92. Rõ ràng, kết quả
là thỏa đáng.
Lưu ý rằng kết quả của thuật toán Shannon-Fano không nhất thiết là duy nhất. Ví dụ, nếu cách chia đầu tiên trong ví dụ trên thành hai phần L, H: (3) và E, 0: (2). Điều này sẽ cho kết quả mã hóa ở hình 3.41. Bảng 3.4 cho thấy các từ mã thu được khác với trước (Bảng 3.3). Các thuật toán Shannon-Fano đạt yêu cầu mã hóa cho nén dữ liệu, nhưng việc nén này sẽđược thực hiện tốt hơn bởi phương pháp mã hóa Huffman.
Hình 3.41: Một dạng cây mã hóa khác cho từ HELLO theo thuật toán Shannon-Fano
Symbol Count 1
2log log
i i p
p Code Số lượng bit dùng
L 2 1.32 00 4
H 1 2.32 01 2
E 1 2.32 10 2
0 1 2.32 11 2
Tổng số bít: 10
94