7. Ý nghĩa khoa học của đề tài
2.2. Kỹ thuật nén dữ liệu Burrows-Wheeler
Ở phần 2.1.2 ta đã thấy chuuyển đổi Burrows Wheeler đã làm cho một văn bản được chuyển đổi và xuất hiện các run (xâu gồm các kí tự giống nhau hoặc rất gần với sự xuất hiện trước đó), và phần 2.2.2 đã chứng minh rằng xâu sau khi đã chyển đổi có thể chuyển đổi ngược lại và cho kết quả chính là xâu ban đầu.
Chuyển đổi Burrows Wheeler không làm giảm chiều dài của xâu chuyển đổi mà chỉ làm cho xâu sau khi đã chuyển đổi dễ hơn để nén bằng các phương pháp nén đã có như: mã hóa RLE, mã hóa Huffman, mã hóa số học…
Năm 1994, Burrows và Wheeler giới thiệu chuyển đổi Burrows và Wheeler (BWT) [4]. Một thực hiện cũng đã được biết đến của thuật toán này là Bzip2. Chương trình này thường co lại lại một văn bản Tiếng Anh khoảng 20% kích thước ban đầu của nó trong khi gzip chỉ giảm xuống khoảng 26% kích thước ban đầu. Thuât toán bao gồm 3 bước cần thiết sau đây:
1. Burrows Wheeler Transform (BWT): Hoán vị các chữ cái trong một tài liệu theo từng khối (thường là hàng chục KB) để có một văn bản được chuyển đổi bao gồm các run (xâu gồm các biểu tượng giống nhau) hoặc gần với sự xuất hiện trước đó (Xem phần 2.1).
2. Di chuyển đến phía trước để mã hóa (Move To Front): Bước này chuyển đổi file văn bản đã được chuyển đổi Burrows Wheeler thành một văn bản có xu hướng làm tăng dần tần số của các biểu tượng giá trị thấp trong một khối để cải thiện việc nén của các bộ mã entropy như : Mã Huffman hoặc mã số học.
3. Sử dụng mã Huffman hoặc mã số học để nén luồng những chỉ số từ giai đoạn MTF thành luồng bit có kích thước nhỏ
Mã hóa Move-To-Front
Chuyển đổi move-to-front (MTFT) được thiết kế để cải tiến hiệu quả của kỹ thuật nén mã hóa entropy. MTF thường được sử dụng sau chuyển đổi Burrows- Wheeler để xếp hạng các biểu tượng theo tần số có liên quan của chúng . MTF dựa trên một bảng chữ cái động được giữ trong danh sách mà ký tự hiện hành trong suốt quá trình quét luôn được đưa lên đầu của bảng chữ cái . Sau quá trình MTF , dãy được tạo ra dài bằng dãy ban đầu bởi vì nó không phải nén dãy ban đầu . Ý tưởng chính là để đạt được một hiệu suất nén tốt hơn cho mã hóa entropy.
Ví dụ: Cho bảng chữ cái: “ABN” và văn bản cần mã hóa là:“NNBAAA” Bảng 2.1: Mã hóa Move-To-Front
Dãy Danh sách Các biểu tƣợng đƣợc mã hóa
NNBAAA ABN NNBAAA NAB 2 NNBAAA NAB 2,0 NNBAAA BNA 2,0,2 NNBAAA ABN 2,0,2,2 NNBAAA ABN 2,0,2,2,0 ABN 2,0,2,2,0,0
Bằng cách làm này khi kết thúc dãy, đầu ra cuối cùng của xếp hạng đạt được là: MTF=[2, 0, 2, 2, 0, 0]
Với mã hóa MTF , Các ký tự thứ hai và liên tiếp trong bất kỳ run nào được chuyển đổi thành 0 ( "NN" đã trở thành 2,0, "AAA" trở thành 1,0,0. Điều này hoạt động tốt với BWT, vì nó sinh ra các khối với nhiều run.
Giải mã Move-To-Front (MTF) là khá đơn giản , nó rất giống quá trình mã hóa. Lúc này vị trí biểu tượng trong danh sách của mọi biểu tượng trong bảng chữ cái được sử dụng để giải mã một biểu tượng . Danh sách này bắt đầu theo một thứ tự từ điển. Dữ liệu mã hóa được mã hóa cho biết vị trí của biểu tượng được giải mã . Sau khi giải mã biểu tượng, di chuyển nó lên trước danh sách.
Bảng 2.2: Giải mã Move-To-Front
Dãy Danh sách Các biểu tƣợng đƣợc giải mã 2,0,2,2,0,0 ABN 2,0,2,2,0,0 NAB N 2,0,2,2,0,0 NAB N,N 2,0,2,2,0,0 BNA N,N,B 2,0,2,2,0,0 ABN N,N,B,A 2,0,2,2,0,0 ABN N,N,B,A,A ABN N,N,B,A,A,A
Như vậy MTF có xu hướng làm tăng dần tần số c ủa các biểu tượng giá trị thấp trong một khối . Điều này làm cho MTF hữu ích để cải thiện việc nén của các bộ mã entropy như: Mã Huffman hoặc mã số học.
Ưu điểm: Giai đoạn MTF quản lý một danh sách 256 biểu tượng bảng chữ cái và xử lý tuần tự các biểu tượng đầu vào . Với mỗi biểu tượng đầu vào , chỉ số biểu tượng đó trong danh sách là đầu ra và biểu tượng được đưa lên đầu danh sách. Điều này làm cho những biểu tượng thường xảy ra trong thời gian không lâu , được chuyển đổi thành các chỉ số nhỏ. Những run của những biểu tượng bằng nhau được chuyển đổi thành những run của các số 0, điều này làm xuất hiện nhiều giá trị 0 trong dãy đầu ra và làm cho MTF hữu ích để cải thiện việc nén của các bộ mã Entropy.
Hạn chế: Giai đoạn MTF làm cho những biểu tượng luôn được đưa lên đầu danh sách dù chúng hiếm khi xảy ra trước đó. Điều này dẫn đến việc di chuyển những biểu tượng thường xuyên khác đến những chỉ số cao hơn làm cho chi phí mã hóa nhiều hơn
Mã hoá Huffman
Mã Huffman là một kỹ thuật nén dữ liệu được sử dụng trong nén hình ảnh , văn bản,... Mã Huffman dựa trên xác suất của dữ liệu xuất hiện trong dãy . Các biểu tượng xuất hiện thường xuyên hơn sẽ cần ít các bit hơn các biểu tượng mà ít thường xuyên hơn. Xem một dãy gồm 6 biểu tượng. Xác suất xuất hiện của các biểu tượng được cho như Hình 2.8a7.
Hình 2.9: Xác suất và khoảng con khởi tạo của biểu
Đầu tiên, mã Huffman tính tổng đồng thời hai biểu tượng có xác suất nhỏ nhất thành một biểu tượng mới với một xác suất mới (0,06+0,04=0,1), lặp lại quá trình đó cho đến khi chỉ còn một biểu tượng và xác suất bằng 1.
Hình 2.8a: Mã hóa Huffman
Bước ngược lại để mã hóa mỗi xác suất với mã nhị phân bắt đầu với nguồn nhỏ nhất và làm trở lại nguồn ban đầu. (Hình 2.8b)
Hình 2.8b: Mã hóa Huffman ngược
Mã hoá số học
Cũng như mã hóa Huffman, mã số học dựa trên xác suất xuất hiện của các biểu tượng trong thông điệp. Quá trình bắt đầu với nửa khoảng [0,1), các biểu tượng có xác suất xuất hiện của chúng được đặt vào trong một khoảng con gồm tần số mà nó giữ trong thông điệp . Ví dụ, giả sử ta mã hóa một dãy a1a2a3a3a4 với xác suất được cho trong Hình 2.9.
Vì biểu tượng đầu tiên của thông điệp đang được mã hóa, khoảng thông điệp khởi tạo được thu hẹp với [0.0, 0.2). Tiếp theo chia khoảng thông điệp thành khoảng con nhỏ hơn với biểu tượng tiếp theo a2, cung cấp một khoảng con [0.04, 0.08). Với biểu tượng tiếp theo a3, khoảng được phân chia thành một khoảng con mới [0.056, 0.072). Tiếp tục quá trình này , ta được khoảng cuối cùng [0.0688, 0.06752). Dãy các biểu tượng có thể được mã hóa với bất kỳ số nào trong biểu diễn khoảng dữ liệu.
Hình 2.10 cho thấy quá trình cơ bản của mã hóa số học. Đó là 5 biểu tượng của thông điệp và 4 biểu tượng của dữ liệu nguồn được mã hóa.
Hình 2.10: Mã hóa số học