Mô hình nén số học cũng tương tự như mô hình nén Huffman. Nó dựa trên bảng ký hiệu và sự phân bố xác suất của các ký hiệu. Xác suất các ký hiệu được tính
tuần tự chính xác từ dữ liệu nguồn, yêu cầu này cần phải đọc toàn bộ tệp nguồn trước khi mã hóa.
Giống như nén Huffman, nén số học cũng có hai mô hình đó là dạng tĩnh và dạng động. Mô hình động là ta tính xác suất của các ký hiệu ngay trong quá trình xử lý, nghĩa là không phải đọc toàn bộ tệp tin để biết xác suất của các ký tự rồi mới xử lý nén dữ liệu. Trong luận văn này tác giả trình bày thuật toán nén số học dạng tĩnh.
Sau khi đã chia các đoạn cho các ký hiệu, ta sẽ đọc từng ký hiệu trong tệp nguồn, mỗi lần đọc một phân đoạn con mới được nhận ra theo xác suất của ký hiệu nhập vào. Ta thiết lập phân đoạn khởi đầu là [0,1), quá trình này được lặp lại cho đến khi kết thúc chuỗi ký hiệu. Sau đó phương pháp nén số học kết xuất một số thực bên trong phân đoạn con cuối cùng của khối đang xét.
Ký hiệu đoạn khởi đầu là [L, L + d) trong đó biến L lưu trữ giá trị thấp nhất của phân đoạn và d lưu trữ khoảng cách giữa giá trị thấp nhất và giá trị cao nhất của phân đoạn. Các bước sau mô tả điều này:
1. Đặt phân đoạn khở đầu là [0, 1)
2. Lặp lại các bước sau cho tới khi kết thúc khối dữ liệu vào 2.1. Đọc ký hiệu s tiếp theo trong khối dữ liệu vào
2.2. Chia đoạn hiện tại thành các đoạn con sao cho kích thước của chúng tương ứng với xác suất của các ký hiệu.
2.3. Cập nhật phân đoạn hiện tại ứng với ký hiệu s.
3. Khi kết thúc khối dữ liệu vào, kết xuất số thực trong phân đoạn hiện tại. Hình 10 minh họa phân đoạn với khối dữ liệu “IOU”, kết thúc quá trình xử lý này, thuật toán kết xuất số thực trong phân đoạn [0.37630, 0.37819).
Hình 10. Minh họa phân đoạn với khối dữ liệu “IOU”
Mã số học áp dụng đối với 2 ký hiệu
Đặt P1 là xác suất của ký hiệu s1 và P2 là xác suất của ký hiệu s2, trong đó P2=1-P1. Đặt phân đoạn hiện tại là [L, L+d) và kết xuất phân số x thỏa mãn L ≤ x < L+d.
Khởi tạo L=0, d=1. Nếu ký hiệu tiếp theo hoặc là s1 hoặc là s2 ứng với xác suất P1 hoặc là P2, khi đó ta định nghĩa các phân đoạn và lựa chọn phân đoạn thích hợp:
[L, L+d × P1) và [L+d × P1, L+d × P1 + d × P2) Chú ý là L+d × P1 + d × P2 = L + d (P1 + P2) = L + d.
Thuật toán nén như sau: 1: L = 0, d = 1
2: Đọc ký tự tiếp theo 3: If ký tự là s1 then
4: d = d × P1 5: Else
6: L = L + d × P1; d = d × P2 7: End if
8: If hết ký hiệu then
9: kết xuất phân số trong khoảng [L, L + d) 10: Else
11: goto bước 2. 12: end if
Giải mã số học áp dụng đối với 2 ký hiệu
Đặt P1 là xác suất của ký hiệu s1 và P2 là xác suất của ký hiệu s2, trong đó P2=1-P1. Cho phân số x trong khoảng [0, 1) và độ dài của khối dữ liệu nguồn, khối dữ liệu nguồn có thể được giải mã như sau:
1: L = 0, d = 1 2: Đọc phân số x
3: If x thuộc phân đoạn [L, L + d × P1) then 4: Kết xuất s1; d = d × P1
5: Else
6: Kết xuất s2; L = L + d × P1; d = d × P2 7: End if
8: if numberOfDecodedSymbols < requiredNumberOfSyrnbols then 9: goto bước 2
10: end if