- Thuật toán nén động
3. 5 PHƯƠNG PHÁP LOẠI TRỪ NHỮN GÔ TRỐNG
4.1.1 Thuật toán Fano Shannon
Thực chất thuật toán Fano - Shannon là phương pháp mã hoá trên cơ sở thống kê tần số xuất hiện của các ký hiệu trong tệp dữ liệu. Thuật toán này nhằm mục đích tạo ra cây Fano - Shannon theo các bước sau:
a. Thiết lập bảng tần số xuất hiện của từng ký hiệu trong tệp nguồn. b. Sắp xếp bảng tần số theo thứ tự giảm dần của tần số xuất hiện, ký hiệu xuất hiện nhiều nhất sẽ đứng đầu bảng, ký hiệu xuất hiện ít nhất sẽ đứng cuối bảng.
c. Chia bảng ra thành 2 phần sao cho tổng tần số của nưẻa trên và tổng tần số của nửa dưới gần nhau nhất.
d. Nửa trên được gán bởi số 0, nửa dưới được gán bởi số 1. Điều đó có nghĩa là mã của các ký hiệu thuộc nửa trên bắt đầu bằng bit 0, mã của các ký hiệu thuộc nửa dưới bắt đầu bằng bit 1.
e. Mỗi nửa lại tiếp tục chia làm 2 phần theo cách trên. Sau mỗi lần như vậy lại thêm 0 hoặc 1 vào đằng sau mã mẹ.
Quá trình trên được thực hiện cho đến khi mỗi nhóm chỉ còn duy nhất 1 ký tự.
Ví dụ minh hoạ:
Cho 1 nguồn có các trạng thái {e, a, i, o, ô} với các xác suất tương ứng (e, o3); (a, 0.2); i,0.2); (0.0,1); u,0.1); (ô,0.1)
=> Ký tự Tần xuất Mã A 0.2 01 E 0.3 00 I 0.1 101 O 0.2 100 U 0.1 110 ô 0.1 111 Cách nhóm như sau: Mã E 0.3 0.3 00 A 0.2 0.5 0.2 01 O 0.2 0.2 100 I 0.1 0.3 0.1 101 U 0.1 0.5 0.1 110 Ô 0.1 0.2 0.1 111
Để nén một tệp dữ liệu bằng phương pháp Fano - Shannon, công việc đầu tiên là phải đọc tệp nguồn để thống kê tần số xuất hiẹn của mỗi ký hiệu. Sau khi đã thống kê xong, người ta sắp xếp bảng tần số theo thứ tự giảm dần của tần số xuất hiện.
Bảng mã tương ứng của các ký hiệu được gởi tới cho chương trình gỡ nén như sau: Mỗi ký hiệu dùng 3 bytes, byte thứ nhất mang ký tự để
chuyển mã, 4 bits tiếp theo (4 bits đầu của byte thứ hai) mang độ dài của mã, phần còn lại mang mã tối đa của ký hiệu.
Trong quá trình gỡ nén phải sử dụng bảng mã nhận được từ thuật toán nén. đồng thời để giải mã cần phải dựa vào nhận xét: không một mã nào là phần đầu của mã khác.
Đánh giá: Vì những lý do trên nên thuật toán Fano - Shannon được xếp trong danh sách những thuật toán thống kê. Tuy nhiên, nhìn chung đây là một phương pháp kém hiệu quả và ít được sử dụng.