Chương 2: NGHIÊN CỨU KỸ THUẬT NÉN VĂN BẢN TIẾNG VIỆT SỬ DỤNG KỸ THUẬT MÃ HÓA SỐ HỌC
2.3 Phân tích thuật toán mã hóa số học
2.2.1. Nén dữ liệu văn bản tiếng Việt
Bước mã hóa cơ sở của bộ mã hóa được thực hiện bởi arithmetic_encode(l, h, t) trong đó l và h lần lượt là mức thấp và mức cao của biến đếm trước khi tích lũy tần số trong ngữ cảnh của các kí hiệu tương ứng, hàm này mã hóa 1 kí hiệu giả sử ngầm định là nó xuất hiện h - l lần trong tổng số t lần, và nó chỉ định vùng xác suất là [ l/t, h/t ]. Trạng thái nội tại của bộ mã hóa được cho bởi 2 giá trị là R và L, trong đó L là mức thấp hiện tại và R là vùng của đoạn đang mã hóa, và tại mỗi giai đoạn thì thông điệp có thể được diễn tả bằng bất kì giá trị nào trong đoạn [ L, L+R ]. Quá trình xử lý của bộ mã hóa được minh họa ở hình 4. Giá trị L và R được thể hiện thông qua b bit., L được khởi tạo là 0 và nó có giá trị nằm giữa 0 và 2b – 2b-2, R được khởi tạo là 2b-1 và có giá trị nằm giữa 2b-2 + 1 và 2b-1. Chúng tôi cho rằng 0 < l < h < t và t là tổng tần số của tất cả các kí hiệu khác nhau được chỉ định trong ngữ cảnh, t phải thỏa mãn điều kiện t < 2f với f là số bit đã dùng để giữ tần số của kí hiệu và có thể không vượt quá giá trị điều khiển bởi lựa chọn của b và kích thước từ máy đang dùng.
Thuật toán mã hóa kí hiệu thể hiện ở dưới.
Đầu vào là các biến thành phần l, h, t.
Đầu ra là các bit biểu diễn kí hiệu đó.
Arithmetic_encode(l,h,t) {
1- Đặt T=(R.l)/t 2- Đặt L=L+T 3- Đặt R=(R.h/t)-T
4-Trong khi R < 2b - 2 làm {
Chuẩn hóa lại R Tính lại L
Đưa ra 1 bit
Hoạt động cơ sở của bộ mã hóa, trong các bước 1,2 và 3 là làm nhỏ khoảng [ L, L + R ) thành các khoảng nhỏ hơn để biểu diễn các kí hiệu mới [ l / t, h / t ), mang lại một vùng mới là [ L + R.l/t, L + R.h/t ]. Giá trị của L và R đưọc cập nhật để phản ánh vùng mới này. Vùng này phải chuẩn hóa lại thành các giai đoạn để ngăn cản nó trở thành các khoảng quá nhỏ để diễn tả đúng b bit của giá trị này.
Để giảm tối đa sự mất mát hiệu quả nén bởi vì sự chia không chính xác của không gian mã, R nên được giữ ở giá trị lớn nếu có thể và trong hoạt động hiện tại, nó phải có độ rộng tối thiểu cũng như t. Điều này được thực hiện bằng cách duy trì R trong khoảng 2b-2 < R < 2b-1 trước mỗi bước mã hóa và khẳng định rằng t ≤ 2f với f ≤ b -2. Đó là R phải được chuẩn hóa lại một cách định kỳ với một hoặc nhiều hơn các bit ở đầu ra. Chi tiết của quá trình xử lí này phù hợp với sự chuẩn hóa lại của L, R và chuẩn hóa lại R là một bước của arithmetic_encode() .
Trong thuật toán chuẩn hóa lại R trong bộ mã hóa, khi L và L+R đều
≤ 2b -1,bit 0 có thể là đầu ra và L, R nên điều chỉnh cho đúng. Tương tự, kết quả đầu ra có thể là bit 1 khi cả 2 đều lớn hơn 2b - 1. Khi R ≤ 2b -2 và cả 2 trường hợp trên không chấp nhận, khoảng [L,L+R) phải thuộc 2b -1. Trong trường hợp thứ 3 thì biến bit_outstanding được tăng, đây là biến lưu giữ tất cả các bit biểu diễn kí hiệu được đề cập đến ở đầu vào, do đó bit 0 hoặc bit 1 của đầu ra sẽ đi theo sau bởi một hoặc nhiều hơn các bit đối lập với nó. Hàm bit_plus_follow( ) kiểm tra vị trí có sự tồn tại các bit ngược nhau của các bit tại thời gian mà nó được gọi trên đầu ra với một bit khác đã biết.
Tất cả đầu ra này hoạt động mang lại kết quả trong R, do đó sau một số thao tác của đầu ra R sẽ được ở lại trong vùng, chuẩn bị cho bước mã hóa tiếp theo. Thực vậy, mã hóa một bit kí hiệu tùy theo các tham số l, h và t phải
tự động sinh ra (-log((h-l)/t)) bit hoặc -log((h-l)/t) bit được sinh ra trong vòng lặp chuẩn hóa lại.
Hàm bis_plus_follow(x): ghi bit x có giá trị là 0 hay 1 vào dãy bit đầu ra. Cộng vào bất kỳ một bit tự do nào vào sau các bit đó nếu biết được rằng nó ngược nhau.
bis_plus_follow(x) {
1- write_one_bit(x)
2- Trong khi bit_outstanding > 0 làm write_one_bit(1 - x)
Gán bit_outstanding = bit_outstanding -1 }
Bất kì thông tin còn lại của kí hiệu được ghi lại bởi việc thay đổi trạng thái mã hóa, được phản chiếu trong giá trị mới của L và R. Thuật toán chuẩn
Đây là bước thứ 4 trong thuật toán mã hóa.
{
Trong khi R < 2b - 2 làm
Nếu L + R < 2b - 1 thì bis_plus_follow(0) Khác
{
Nếu 2b - 1 < L thì bis_plus_follow(1) gán L = L - 2b -1
Khác gán bit_outstanding = bit_outstanding + 1 L = L - 2b –2
}
Gán L = 2.L, R = 2.R
}
hóa lại được thể hiện trong hình 5 ở dưới. Sự chuẩn hóa lại chính là bước thứ (4) trong thuật toán mã hóa ở trên.
Sau mỗi kí hiệu được nhận ra bộ mã hóa phải điều chỉnh lại độ rộng vùng. Do đó với mỗi bit được xử lí bằng cách di chuyển nó ra ngoài mức kết thúc cao của 0 và 1 bit mới được chuyển đến trong mức kết thúc thấp.