Giới thiệu nén số học

Một phần của tài liệu các kỹ thuật kiểm thử đột biến và ứng dụng kiểm thử chương trình c (Trang 30 - 31)

Ý tưởng của thuật toán nén số học dựa vào xác suất tích lũy các ký hiệu liên tiếp tương ứng với mỗi đoạn con trong đoạn [0,1). Một cách cụ thể là những đoạn con [0,1) được dùng để biểu diễn những ký hiệu của mã. Ký hiệu thứ nhất của một khối dữ liệu được mã hóa bằng cách chọn một đoạn con tương ứng. Chiều dài của đoạn con được chọn bằng xác suất mong muốn xuất hiện. Những ký hiệu tiếp theo được mã hóa bằng cách mở rộng đoạn con được chọn thành một khoảng đơn vị và chọn một đoạn con tương ứng.

Ví dụ. Xét bảng mã nhị phân (A, B) với xác suất (PA, PB) được phân bố tương ứng là (0.2, 0.8).

Khởi tạo đoạn [0,1) như hình 9(a)

Giả sử rằng chuỗi ký hiệu đầu vào chỉ chứa 1 ký hiệu. Khi đó đoạn [0,1) được chia thành hai đoạn con tương ứng với phân bố xác suất hai ký hiệu A, B là PA, PB như hình 9(b).

Giả sử chuối ký hiệu đầu vào chứa hai ký hiệu, mỗi đoạn con lại được chia thành hai đoạn con tương ứng cho hai ký hiệu như hình 9(c).

Tương tự ta có thể mở rộng bảng mã nhị phân, khi đó mỗi chuỗi có mối quan hệ một-một với mỗi đoạn con duy nhất như bảng

Chuỗi Xác suất Phân bố xác suất Đoạn con AA PA × PA 1/16 [0, 1/16) AB PA × PB 1/4 [1/16, 1/4) BA PB × PA 1/4 [1/4, 7/16) BB PB × PB 7/16 [7/16, 1)

Bảng 3. Bảng mã nhị phân mở rộng với hai ký hiệu

Tuy nhiên, không cần phải mở rộng bảng mã nhị phân và tính toán xác suất mỗi khi kết hợp ký hiệu. Giả sử ta có chuỗi “ABBBAABAAA” gồm 10 ký hiệu với sự phân bố xác suất (A, B) tương ứng là (0.2, 0.8). Đầu tiên thay vì mở rộng bảng mã cần phải tới 210 phần tử thì ta tính xác suất tích lũy của ABBBAABAAA tương ứng như sau 0.2 × 0.8 × 0.8 × 0.8 × 0.2 × 0.2 × 0.8 × 0.2 × 0.2 × 0.2 = 0.000026214. Cuối cùng kết quả 0.000026214 được dùng để mã hóa và giải mã. Các ký hiệu tiếp theo ta cần tính cận trên (high) và cận dưới (low) của phân đoạn các ký hiệu.

Kết quả đầu ra của thuật toán nén số học là một số thực trong khoảng [0, 1). Số thực này là số duy nhất để giải mã chính xác chuỗi ký hiệu được mã hóa.

Thuật toán nén số học vượt qua các rào cản đối với thuật toán Huffman. Thuật toán này mã hóa một chuỗi các ký hiệu liên tiếp thay vì mã hóa từng ký hiệu đơn. Điều này làm giảm sự khác nhau giữa entropy và độ dài trung bình của các ký hiệu. Thuật toán nén số học (tĩnh) không đưa ra bất cứ một từ mã nào cho tới khi xét tới toàn bộ khối dữ liệu đầu vào.

Một phần của tài liệu các kỹ thuật kiểm thử đột biến và ứng dụng kiểm thử chương trình c (Trang 30 - 31)