Tải bản đầy đủ (.pdf) (65 trang)

Kỹ thuật nén dữ liệu burrow wheeler và các cải tiến

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (1.42 MB, 65 trang )

Số hóa bởi Trung tâm Học liệu – Đại học Thái Nguyên
ĐẠI HỌC THÁI NGUYÊN
TRƯỜNG ĐH CÔNG NGHỆ THÔNG TIN VÀ TRUYỀN THÔNG









NGUYỄN THỊ PHƯỢNG





KỸ THUẬT NÉN DỮ LIỆU
BURROW WHEELER VÀ CÁC CẢI TIẾN






LUẬN VĂN THẠC SỸ: KHOA HỌC MÁY TÍNH














Thái Nguyên - 2011

Số hóa bởi Trung tâm Học liệu – Đại học Thái Nguyên
ĐẠI HỌC THÁI NGUYÊN
TRƯỜNG ĐH CÔNG NGHỆ THÔNG TIN VÀ TRUYỀN THÔNG









NGUYỄN THỊ PHƯỢNG





KỸ THUẬT NÉN DỮ LIỆU

BURROW WHEELER VÀ CÁC CẢI TIẾN



CHUYÊN NGÀNH: KHOA HỌC MÁY TÍNH
MÃ SỐ CHUYÊN NGÀNH: 60 80 01




LUẬN VĂN THẠC SĨ: KHOA HỌC MÁY TÍNH




HƯỚNG DẪN KHOA HỌC:

PGS TSKH NGUYỄN XUÂN HUY







Thái Nguyên - 2011

Số hóa bởi Trung tâm Học liệu – Đại học Thái Nguyên
LỜI CAM ĐOAN
Tôi xin cam đoan: Luận văn “Kỹ thuật nén dữ liệu Burrow

Wheeler và các cải tiến” là công trình nghiên cứu của riêng tôi. Các số liệu, kết
quả nghiên cứu trong luận văn được sử dụng trung thực và có nguồn trích dẫn.
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
LỜI CẢM ƠN
Em xin gửi lời cảm ơn sâu sắc tới thầy PGS TSKH Nguyễn Xuân Huy - Viện
Công nghệ thông tin, người đã gợi mở và định hướng cho em tìm hiểu về lĩnh vực
giấu tin trong ảnh. Thầy đã hết lòng giúp đỡ, tạo điều kiện cho em nghiên cứu và
hoàn thành luận văn này.
Em xin cảm ơn các thầy cô trong Viện Công nghệ thông tin, các thầy cô giáo
khoa Công nghệ thông tin ĐH Thái nguyên, đã giảng dạy và giúp đỡ em trong hai
năm học qua.
Cuối cùng tôi xin cảm ơn tới gia đình, các bạn cùng lớp và các bạn đồng
nghiệp đã giúp đỡ, động viên, cùng nghiên cứu, đóng góp ý kiến, chia sẻ kinh
nghiệmvới tôi trong suốt quá trình học tập và làm luận văn!
Thái Nguyên - 2011
Nguyễn Thị Phượng


Số hóa bởi Trung tâm Học liệu – Đại học Thái Nguyên
i
MỤC LỤC i
DANH MỤC CÁC KÝ HIỆU, CÁC CHỮ VIẾT TẮT iii
DANH SÁCH BẢNG BIỂU iv
DANH SÁCH HÌNH ẢNH v
MỞ ĐẦU 1
1. Lý do chọn đề tài 1
2. Mục tiêu của đề tài 2
3. Đối tƣợng và phạm vi nghiên cứu 2
4. Hƣớng nghiên cứu của đề tài 3
5. Những nội dung nghiên cứu chính 3

6. Phƣơng pháp nghiên cứu 3
7. Ý nghĩa khoa học của đề tài 3
CHƢƠNG 1: TỔNG QUAN VỀ NÉN DỮ LIỆU 4
1.1. Nén dữ liệu 4
1.1.1. Khái niệm về dữ liệu 4
1.1.2. Sự trùng lặp dữ liệu 4
1.1.3. Nén dữ liệu 5
1.2 Các phƣơng pháp nén dữ liệu cơ bản 5
1.2.1. Nén không tổn hao 5
1.2.2. Nén tổn hao 6
1.3. Dữ liệu ký hiệu và các mã 7
1.3.1. Dữ liệu kí hiệu 12
1.3.2. Mã chiều dài thay đổi 7
1.3.3. Mã tiền tố và các cây nhị phân 8
1.4. Cơ bản về lý thuyết thông tin 11
1.5. Đơn vị đo đặc tính nén 12
CHƢƠNG 2: KỸ THUẬT NÉN DỮ LIỆU BURROWS WHEELER VÀ CÁC
CẢI TIẾN 14
2.1. Chuyể n đổ i Burrows – Wheeler 14
2.1.1. Giớ i thiệ u 14
2.1.2. Chuyển đổi Burrows-Wheeler thuậ n 14
2.1.3. Chuyển đổi Burrows-Wheeler nghị ch. 16
2.2. K thut nén dữ liệu Burrows-Wheeler 23

Số hóa bởi Trung tâm Học liệu – Đại học Thái Nguyên
ii
2.3. Các cải tiến với k thut nén dữ liệu Burrows-Wheeler 27
2.3.1. Các định nghĩa 35
2.3.2. Sự đả o ngượ c tầ n số (IF) 30
2.3.3. Mã hóa khoảng cách (DC). 32

2.3.4. Phương phá p đế m trọ ng số tầ n số (WFC)……….…………………… 35
2.3.5. Nhữ ng thay thế MTF khác 34
2.3.6. Mã hoá Run Length
2.3.7. Các cải tiến với mã hóa RLE 36
2.3.7.1. Hoạt động chung 36
2.3.7.2. Vị trí mới cho giai đoạn RLE 37
2.3.7.3. Thuật toán RLE-EXP 38
2.3.7.4. Thuật toán RLE-BIT 39
2.3.8. Các cải tiến với đảo ngược tầ n số 41
2.3.8.1. Sắp xếp biểu tượng bằng phân phối tần số 41
2.3.8.2. Thứ tự sắ p xế p 42
2.3.8.3. Giai đoạn EC 43
2.3.9. Các cải tiến với đếm tần số trọng số 44
2.3.9.1. Phân cấ p mịn hơn (Finer Graduation). 44
2.3.9.2. Tính toán các trọng số 44
2.3.9.3. Giai đoạn EC 46
2.3.10. Một thuật toán nén Burrows-Wheeler đượ c cải tiến 47
2.3.10.1. Lự a chọ n giai đoạn GST 47
2.3.10.2. So sánh tỉ lệ nén và thời gian nén 49
Kế t luậ n 51
CHƢƠNG 3: CÀI ĐẶT THỬ NGHIỆM 52
3.1. Sơ đồ nén số học kết hợp với BWT và MTF 52
3.1.1. Thuật toán nén 52
3.1.2. Thuật toán giải nén 52
3.2. Cài đặt thử nghiệm 53
3.3. Kết lun…… …………………………………………………………………….54
KẾT LUẬN VÀ DỰ KIẾN 55
TÀI LIỆU THAM KHẢO 56

Số hóa bởi Trung tâm Học liệu – Đại học Thái Nguyên

iii
DANH MỤC CÁC KÝ HIỆU, CÁC CHỮ VIẾT TẮT
Chữ viết
tắt
Diễn giải
Ý nghĩa
AWFC
Advanced Weighted Frenquency
Count
Đếm trọng số tần số cao cấp
BWCA
Burrows-Wheeler Compression
Algorithm
Thuật toán nén Burrows-Wheeler
BWT
Burrows Wheeler Transform
Chuyển đổi Burrows Wheeler
DC
Distance Coding
Mã hóa khoảng cách
EC
Entropy Coding
Mã hóa Entropy
GST
Global Structure Transformation
Chuyển đổi cấu trúc tổng thể
IF
Inversion Frequencies
Sự đảo ngược tần số
IFC

Inversion Frequencies Count
Đếm gia tăng tần số
LUA
List Update Algorithm
Thuật toán cập nhật danh sách
MTF
Move To Front
Di chuyển lên phía trước
RLE
Run Length Encoding
Mã hóa loạt dài
RLE – BIT
Run Length Encoding - BIT
Thuật toán RLE – BIT
RLE – EXP
Run Length Encoding - EXP
Thuật toán RLE – EXPBIT
RLE0
Run Length Encoding 0
Mã hóa chuyển đổi run 0
RMB
RLE Mantissia Buffer
Luồng dữ liệu riêng biệt
SIF
Sort Inversion Frequencies
Sự đảo ngược tần số có sắp xếp
WFC
Weighted Frequency Count
Đếm trọng số tần số




Số hóa bởi Trung tâm Học liệu – Đại học Thái Nguyên
iv
DANH SÁCH BẢNG BIỂU
Bảng 2.1- 2.2: Mã hóa Move-To-Front
Bảng 2.3: Sự đả o ngượ c tầ n số
Bảng 2.4.: Mã hóa khoảng cách
Bảng 2.5: Nhữ ng giá trị xế p hạ ng trung bình r
x
và thời gian
Bảng 2.6: Tỉ lệ nén với giai đoạn RLE trước và sau giai đoạn WFC trong bps.
Bảng 2.7: Các run ngưng với t=2
Bảng 2.8: Mã hóa RLE-BIT củ a chiề u dà i run
Bảng 2.9: Tỉ lệ nén theo bps cho các giai đoạn IF và SIF.
Bảng 2.10: Biể u thị S với mỗi file của Calgary Corpus với
avga
Ff 2

Bảng 2.11: Tỉ lệ nén theo bpc vớ i
)(
,,
10
tw
Spp
.
Bảng 2.12: Tỉ lệ nén theo bpc vớ i lược đồ SIF và AWFC.
Bảng 2.13: T lệ nén với Calgary Corpus theo bpc
Bảng 2.14: Thờ i gian né n và giả i né n vớ i Cagary Corpus theo giây









Số hóa bởi Trung tâm Học liệu – Đại học Thái Nguyên
v
DANH SÁCH HÌNH ẢNH
Hình 1.1: Minh họa việc trùng lặp dữ liệu của các frame hoạt hình
Hình 1.2 Máy nén và máy giải nén.
Hình 1.3: Bộ mã hóa và bộ giải mã
Hình 1.4: Những thuật toán nén không tổn hao
Hình 1.5: Những thuật toán né n tổ n hao
Hình 1.6: Mã và dữ liệu nguồn
Hình 1.7: Đặc tính tiền tố và các cây nhị phân
Hình 1.8: Không phả i mã tiề n tố nhưng có thể giả i mã duy nhấ t
Hình 2.1: Minh họa chuyển đổi BWT thuận
Hình 2.2: Mảng R được sử dụng để sắp xếp file
Hình 2.3: Minh họa chuyển đổi BWT nghịch
Hình 2.4: Sử dụng thứ tự ký tự để thực hiện chuyển đổi ngược
Hình 2.5: Mảng (A
s
) mặc nhiên được khôi phục để giải mã
Hình 2.6: Các mảng phụ trợ V và W có thể được sử dụng để giải mã xâu mẫu
Hình 2.7: Lược đồ né n Burrows-Wheeler cơ bả n
Hình 2.8a,b: Minh họa về Mã hóa Huffman
Hình 2.9 – 2.10: Minh họa mã hóa số học
Hình 2.11: Lược đồ nén BWT

Hình 2.12: Sự chia sẻ các Book1
Hình 2.13: Thuậ t toá n né n Burrows-Wheeler sử dụ ng giai đoạ n RLE0
Hình 2.14: Minh họa chuyển đổi RLE0
Hình 2.15: Thuậ t toá n RLE-EXP
Hình 2.16: Thuậ t toá n RLE-BIT
Hình 2.17: BWCA với giai đoạn GST hỗn hợp





Số hóa bởi Trung tâm Học liệu – Đại học Thái Nguyên
1
MỞ ĐẦU
1. Lý do chọn đề tài
Một trong các chức năng chính của máy tính là xử lý và lưu trữ dữ liệu. Bên
cạnh việc xử lý nhanh người ta còn quan tâm đến việc lưu trữ được nhiều dữ liệu
nhưng lại tiết kiệm được vùng nhớ và giảm chi phí lưu trữ. Về mặt lý thuyết thì các
thiết bị lưu trữ là không có giới hạn, nhưng ngày nay do nhu cầu xử lý nhiều tập tin,
nhiều loại dữ liệu trong cùng một tệp do vậy mà kích thước tập tin trở nên khá lớn.
Trong nhiều năm gần đây, mạng máy tính đã trở nên khá phổ biến trên thế giới.
Sự ra đời của mạng đã thực hiện ước mơ chinh phục khoảng cách của con người.
Những lợi ích mà mạng cung cấp rất đa dạng và phong phú trên các lĩnh vực khác
nhau của toàn xã hội như cung cấp, trao đổi thông tin giữa các máy tính, giữa máy chủ
với server hoặc giữa các server với nhau. Điều này dẫn đến phải làm thế nào để giảm
thiểu thời gian, chi phí sử dụng để trao đổi dữ liệu trên mạng. Nó đồng nghĩa với việc
bên cạnh nâng cao chất lượng của các thiết bị truyền dữ liệu trên mạng thì mặt khác
chúng ta phải nghĩ ra một phương pháp để sao cho việc truyền dữ liệu có hiệu quả
hơn.
Tất cả những vấn đề trên nảy sinh ra nhu cầu nén dữ liệu với mong muốn thu

gọn kích thước các tập tin làm cho thông tin chiếm không gian trên đĩa là ít nhất. Nó
là một trong những kỹ thuật quyết định đến cuộc cách mạng đa phương tiện kỹ th uật
số đang diễn ra trong nhiều thập k.
Trong một quá trình phát triển lâu dài, nhiều kỹ thuật nén dữ liệu đã ra đời và
được chia làm 2 nhóm kỹ thuật chính là nén tổn hao và nén không tổn hao. Nén không
tổn hao là kỹ thuật nén mà sau đó ta có thể khôi phục lại chính xác dữ liệu ban đầu.
Nén tổn hao là kỹ thuật nén mà sau khi nén ta không thể khôi phục lại chính xác dữ
liệu ban đầu của nó. Nén không tổn hao rất được mong đợi vì tỉ lệ nén cũng như tốc
độ nén cao của nó. Tuy nhiên, kỹ thuật này chỉ được dùng cho nén âm thanh, hình ảnh
bởi cách thức mà các hệ thống thị giác và thính giác của con người làm việc có thể
chấp nhận được. Với dữ liệu gốc của nguồn là rất quan trọng mà ta không thể để mất
bất kỳ chi tiết nào dụ như hình ảnh y tế , văn bản, các hình ảnh được bảo vệ vì lý do

Số hóa bởi Trung tâm Học liệu – Đại học Thái Nguyên
2
pháp lý, một số file khả thi của máy tính … thì ta không thể sử dụng kỹ thuật nén tổn
hao.
Nhiều kỹ thuật nén không tổn hao đã ra đời như: Phương pháp mã hóa Entropy
bao gồm mã số học và mã Huffman. Sau đó, hàng loạt các kỹ thuật mới ra đời để cải
tiến các kỹ thuật trên như: Mã hóa RLE, CD, MTF, LZW Và gần đây là kỹ thuật
nén dữ liệu Burrows Wheeler được công bố bởi Burrows và Wheerler năm 1994.
Trong vòng hơn một thập k qua, thuật toán nén Burrows Wheeler [6] đã trở thành
một trong những công cụ then chốt trong lĩnh vực nén dữ liệu nói chung. Lý do thành
công của nó là tốc độ nén cao kết hợp với t lệ nén tốt. Nhiều cải tiến của kỹ thuật này
cũng đã được trình bày. Hiện nay, nén dữ liệu đặc biệt là kỹ thuật nén không tổn hao
Burrows Wheeler đang là vấn đề quan tâm rất lớn của các cá nhân, tổ chức, trường
học, viện nghiên cứu trên thế giới.
Chính vì vậy, tôi đã chọn đề tài “Kỹ thuật nén dữ liệu Burrows Wheeler và
các cải tiến”.
Cấu trúc của luận văn được chia làm 3 chương. Chƣơng 1: Tổng quan về nén

dữ liệu. Trình bày các khái niệm cơ bản như “dữ liệu”, “Nén dữ liệu” Các phương
pháp nén dữ liệu Chƣơng 2: K thut nén dữ liệu Burrows Wheeler và các cải
tiến. Trong chương này trình bày cách làm việc của chuyển đổi Burrows Wheeler, kỹ
thuật nén dữ liệu Burrows Wheeler và các cải tiến với kỹ thuật nén này. Chƣơng 3:
Cài đặt thử nghiệm. Áp dụng chuyển đổi BWT tiến hành một kỹ thuật nén số học kết
hợp với BWT và MTF trên đối tượng là tệp văn bản. Xây dựng chương trình thử
nghiệm áp dụng thuật toán nén số học kết hợp với BWT và MTF.
2. Mục tiêu của đề tài
Luận văn tập trung tìm hiểu kỹ thuật nén BWT và các cải tiến của kỹ thuật.
Cuối cùng là cài đặt thử nghiệm chương trình nén số học kết hợp với BWT và MTF.
3. Đối tƣợng và phạm vi nghiên cứu
Đối tượng và phạm vi nghiên cứu của luận văn tập trung vào kỹ thuật nén dữ
liệu Burrows Wheeler và các cải tiến. Từ đó xây dựng chương trình ứng dụng nén số
học kết hợp với Burrows Wheeler và MTF, sử dụng phương pháp Quicksort để sắp
xếp và áp dụng trên đối tượng dữ liệu là tệp văn bản.

Số hóa bởi Trung tâm Học liệu – Đại học Thái Nguyên
3
4. Hƣớng nghiên cứu của đề tài
- Tìm hiểu các phương pháp nén dữ liệu.
- Tìm hiểu kỹ thuật nén dữ liệu Burrows Wheeler.
- Tìm hiểu các cải tiến của kỹ thuật nén dữ liệu Burrows Wheeler.
- Cài đặt thử nghiệm chương trình nén số học kết hợp với BWT và MTF.
5. Những nội dung nghiên cứu chính
Đề tài tập trung nghiên cứu kỹ thuật nén dữ liệu Burrows Wheeler và các cải
tiến. Xây dựng chương trình thử nghiệm nén Burrows Wheeler kết hợp với MTF và
nén số học.
6. Phƣơng pháp nghiên cứu
 Về lý thuyết:
- Tìm hiểu tổng quan về nén dữ liệu.

- Tìm hiểu kỹ thuật nén dữ liệu Burrows Wheeler và các cải tiến
- Tìm hiểu ngôn ngữ lập trình Dev C
++
, VB.Net vv.
 Về thực nghiệm:
- Sử dụng ngôn ngữ lập trình Dev C
++
xây dựng và cài đặt thử nghiệm
chương trình nén dữ liệu theo kỹ thuật Burrows Wheeler kết hợp với MTF
và mã số học.
7. Ý nghĩa khoa học của đề tài
Một vấn đề nén liên quan đến việc tìm một thuật toán nén hiệu quả để loại bỏ
dư thừa khác nhau từ một kiểu dữ liệu nhất định. Vậy số lượng bit it hơn là bao nhiêu?
Điều đó phụ thuộc vào những thuật toán nhưng nó cũng phụ thuộc vào sự dư thừa có
thể chiết ra từ dữ liệu gốc là bao nhiêu. Dữ liệu khác nhau có thể yêu cầu những kỹ
thuật khác nhau để xác định dư thừa và loại bỏ dư thừa trong dữ liệu
Không có giải pháp nào phù hợp cho tất cả các vấn đề nén dữ liệu. Theo các
nghiên cứu về nén dữ liệu, ta chú ý phải phân tích các đặc tính của dữ liệu đã được
nén và hy vọng đưa ra một số mô hình để đạt được sự biểu diễn ngắn gọn hơn. Điều
này làm gia tăng sự đa dạng của mô hình dữ liệu và những kỹ thuật biểu diễn, đó là
điểm quan trọng của kỹ thuật nén.



Số hóa bởi Trung tâm Học liệu – Đại học Thái Nguyên
4
CHƢƠNG 1: TỔNG QUAN VỀ NÉN DỮ LIỆU
1.1. Nén dữ liệu
1.1.1. Khái niệm về dữ liệu
Dữ liệu là phương tiện truyền thông logic thường được mang bởi một số

phương tiện truyền thông vật lý như CD hay kênh truyền thông. Vì vậy, dữ liệu có thể
được xem như dạng cơ bản của một số thông tin xác thực. Từ dữ liệu trong ngữ cảnh
của nén dữ liệu bao gồ m bất kỳ dạng kỹ thuật số nào c ủa thông tin xác thực như : văn
bản, âm thanh, hình ảnh và video… được xử lý bởi chương trình máy tính.
1.1.2. Sự trùng lặp dữ liệu.
Dữ liệu trùng lặp có thể là một số thông tin được che dấu , một số cơ sở dữ liệu
chung, một số các ký tự giống nhau, một số cấu trúc tương đương trong tự nhiên…
Ta xét một số ví dụ đơn giản sau đây:
Ví dụ 1.1: Xâu BAAAAAAAC có 7 biể u tượ ng A đượ c lặ p lạ i liên tụ c
Ví dụ 1.2: Xem xét một văn bản với các từ được lặp lại như sau:
the red, the green and the blue colour, and the paint in red, green
Ở đây có các từ được lặp lại đó là các xâu như red, green, và blue.
Ví dụ 1.3: Xem xét một vectơ gồm các số nguyên: (6, 428, 32, 67, 125).
Dữ liệu thuộc đoạn lớn [6, 428]. Do đó , mỗi dữ kiệ n d trong vectơ yêu cầu 9 bit
để biểu diễn vì 0 < d < 512 và 2
9
=512. Ta có thể sử dụng phương pháp chia t lệ đơn
giản như sau: Lấy phần dư của d chia 32, ta có (0, 13, 1, 2, 4) gồm đoạn nhỏ hơn
nhiều [0, 13]. Bây giờ chỉ cầ n 4 bit để biểu diễn mỗi dữ kiện d‟ được chia t lệ vì
16'0  d
và 2
4
=16.
Ví dụ 1.4: Sự trùng lặp temple.
Hình 1.1 cho thấy một dãy các ảnh hoạt hình (được gọi là các frame). Các
frame sẽ đượ c hiển thị tách rờ i nhau một vài giây. Để phản ứng của hệ thống giác
quan con người, những gì ta thấy là một khuôn mặt khôi hài thay đổi từ ngủ đến thức,
và cuối cùng với một trạng thái “cười”.

Hình 1.1: Một dãy các frame hoạt hình


Số hóa bởi Trung tâm Học liệu – Đại học Thái Nguyên
5
Hình 1.3: Bộ mã hóa và bộ giải mã

1.1.2. Nén dữ liệu
Nén dữ liệu là quá trình loại bỏ sự trùng lặp trong dữ liệu nhằ m đưa ra dãy các
biểu tượng chứa cà ng í t bit càng tốt. Nói cách khác, nén dữ liệu có nghĩa là đưa ra các
kỹ thuật hay cụ thể hơn là thiết kế nhữ ng thuật toán hiệu quả nhằm để:
 Biểu diễn dữ liệu theo dạ ng mà chứ a ít sự trùng lặp dữ liệu.
 Loại bỏ trùng lặp trong dữ liệu.
Một thuật toán nén thường được gọi là máy nén và thuật toán giải nén được
gọi là máy giải nén.

Hình 1.2: Máy nén và máy giải nén.
Máy nén thường được gọi là bộ mã hóa và máy giải nén được gọi là bộ giải
mã. Hình 1.3 cho thấy một flatform dựa trên quan hệ giữa bộ mã hóa và bộ giải mã
được kết nối bởi một kênh truyền dẫn.



1.2 Các phƣơng pháp nén dữ liệu cơ bản
1.2.1 Nén không tổn hao
Một phương pháp nén là không tổn hao (nén thuận nghch ) nếu và chỉ nếu nó
có thể khôi phục chính xác dữ liệu gốc từ phiên bản đã được nén.

Số hóa bởi Trung tâm Học liệu – Đại học Thái Nguyên
6
Ví dụ, trong Hình 1.9, xâu đầu vào AABBBA được khôi phục lại sau khi thực
hiện thuật toán nén và được theo sau bởi thuật toán giải nén.

.
Hình 1.4: Nhữ ng thuật toán nén không hao tổn
Kỹ thuật nén không tổn hao được sử dụng khi dữ liệu gốc của nguồn là rất
quan trọng mà ta không thể để mất bất kỳ chi tiết nào. Ví dụ như hình ảnh y tế , văn
bản, các hình ảnh được bảo vệ vì lý do pháp lý, một số file khả thi của máy tính …
1.2.2. Nén tổn hao
Một phương pháp nén tổn hao (nén không thuận nghch) nếu nó không thể khôi
phục bản gốc chính xác từ các phiên bản đã được nén.
Ví dụ:

Hình 1.5: Các thuật toán nén tổn hao
Khôi phục xấp xỉ có thể đưa đến hiệu quả nén nhiều hơn. Tuy nhiên, nó thường
yêu cầu sự cân bằng tốt giữa khả năng trực quan và độ phức tạp trong tính toán. Dữ
liệu như hình ảnh, video và âm thanh đa phương tiện được nén dễ dàng hơn bởi kỹ
thuật nén tổn hao vì cách thức mà các hệ thống thị giác và thính giác của con người
làm việc.

Số hóa bởi Trung tâm Học liệu – Đại học Thái Nguyên
7
1.3. Dữ liệu ký hiệu và các mã
1.3.1. Dữ liệu kí hiệu.
Giả sử bảng chữ cái của dữ liệ u nguồn là S=(s
1
, s
2
, …, s
n
). Biểu diễn kỹ thuật
số của tập hợp biểu tượng được gọi là mã C=(c
1

, c
2
, …, c
n
) và c
j
biểu diễn mỗi biểu
tượng được gọi là từ mã cho biểu tượng s
j
,
nj ,1
. Quá trình gán các từ mã cho mỗi
biểu tượng trong dữ liệ u nguồn được gọi là mã hóa. Quá trình đảo ngược, tức là khôi
phục dãy các biểu tượng trong dữ liệ u nguồn, được gọi là giải mã.
Ví dụ: BAAAAAAAC là một dữ liệu ký hiệu từ một bảng chữ cái (A, B, C, D,
E). Giả sử ta định nghĩa một mã nhị phân (000, 001, 010, 011, 100), các từ mã 000,
001, 010, 011, 100 là biểu diễn nhị phân của A, B, C, D, E tương ứng. Biểu diễn nhị
phân của dữ liệu ký hiệu là 001 000 000 000 000 000 000 000 010 (không có các dấu
cách). Đây là dữ liệu nguồn theo biểu diễn nhị phân, là đầu vào của thuật toán nén .
Điều này có thể được thấy từ Hình 1.12.

Hình 1.6: Mã và dữ liệu nguồn
Ta có thể biểu diễn một bảng chữ cái bằng mộ t tậ p các từ mã chiều dài cố đị nh
và mã được gọi là mã chiều cố định. Cũng có thể biểu diễn một bảng chữ cái bằng mộ t
tậ p các từ mã chiều dài thay đổi và mã được gọi là mã chiều dài thay đổi.
Ví dụ 1.5: Hai mã nh phân C
1
=(000, 001, 010, 011, 100) và C
2
=(0, 100, 101, 110,

111), có thể được sử dụng để biểu diễn bảng chữ cái (A, B, C, D, E).
Ở đây C
1
là mã chiều dài cố đnh và C
2
là mã chiều dài thay đổi.

Số hóa bởi Trung tâm Học liệu – Đại học Thái Nguyên
8
1.3.2. Mã chiều dài thay đổi
Các mã chiều dài thay đổi rất được mong đợi cho nén dữ liệu bởi vì toàn bộ quá
trình tiết kiệm có thể đạt đượ c bằ ng cá ch gá n cá c từ mã ngắ n cho nhữ ng biể u tượ ng
xảy ra thường xuyên và các từ mã dài cho những biểu tượng hiếm khi xảy ra .
Ví dụ 1.6: Cho bả ng chữ cá i (A, B, C, D, E). Xét mã chiều dài thay đổi (0, 100,
101, 110, 111) vớ i chiề u dà i củ a cá c từ mã (1, 3, 3, 3, 3), và xâu nguồn BAAAAAAAC
vớ i tầ n số cho mỗ i biể u tượ ng là (7, 1, 1, 0, 0).
Số trung bình cá c bit đượ c yêu cầ u:

4.1
9
131371


l
bit/biể u tượ ng
Điề u nà y gầ n như tiế t kiệ m đượ c nử a số lượ ng cá c bit so vớ i 3 bit/biể u tượ ng
bằ ng cá ch sử dụ ng 3 bit mã chiề u dà i cố đị nh.
Các mã chiều dài thay đổi rất hữ u í ch vớ i né n dữ liệ u . Tuy nhiên, mộ t mã
chiề u dà i thay đổ i sẽ không hữ u ích nế u cá c từ mã không thể xác định theo một cách
duy nhấ t từ thông điệ p đượ c mã hó a.

Ví dụ 1.6: Xem xé t mã chiề u dà i thay đổ i (0, 10, 010, 101) vớ i bả ng chữ cá i (A, B, C,
D). Mộ t đoạ n thông điệ p đượ c mã hó a như „ 0100101010‟ có thể đượ c giải mã nhiều
hơn mộ t cá ch. Ví dụ: „0100101010‟ có thể đượ c thể hiệ n í t nhấ t theo hai cá ch: „0 10
010 101 0‟ bằ ng ABCDA hoặ c „010 0 101 010‟ bằ ng CADC.
Mã (0, 10, 010, 101) trong ví dụ 1.9 không thể giả i mã duy nhấ t và vì vậ y
không đượ c sử dụ ng cho né n dữ liệ u.
Mã lý tưởng trong trường hợp này không chỉ là một mã chiều dài thay đổi mà
vớ i mộ t số đặ c tí nh tự độ ng tá ch (self-punctuating). Ví dụ, mã (0, 10, 110, 111) có đặc
tính tự động tách vì vậ y chỉ có mộ t cá ch giả i mã duy nhấ t .
1.3.3. Mã tiền tố và các cây nhị phân
Có một kiểu để kiểm tra một mã có thể giải mã duy nhất hay không được gọi là
mã tiền tố. Mã tiền tố có thể được xác định bằng cách kiểm tra n ên nó cũ ng đượ c gọ i
là đặ c tí nh tiề n tố .
Mộ t tiề n tố là mộ t số bit liên tụ c đầ u tiên củ a mộ t từ mã . Khi hai từ mã có chiề u
dài khác nhau, từ mã ngắ n giố ng vớ i mộ t số bit đầ u tiên củ a từ mã dà i hơn thì từ mã
ngắ n hơn đượ c gọ i là tiề n tố củ a từ mã dà i hơn.

Số hóa bởi Trung tâm Học liệu – Đại học Thái Nguyên
9
Ví dụ 1.7: Xét hai từ mã nh phân có chiều dài khác nhau : c
1
=010 và
c
2
=01011.
Từ mã ngắ n c
1
là tiền tố của từ mã c
2
=01011. Từ mã c

2
có thể thu được bằng
cách nối thêm hai bit 11 vớ i c
1
.
Đặc tính tiền tố của mã nhị phân là cơ sở lập luận để kiểm tra một từ mã không
phải là tiền tố của một từ mã khác.
Ví dụ 1.8: Xét hai mã nh phân sau: (0, 10, 010, 101) và (0, 10, 110, 111).
Trong mã (0, 10, 010, 101) không thể giả i mã duy nhấ t (Xem lại ví dụ 1.9).Ta
thấy, từ mã 0 là tiền tố của từ mã 010; từ mã 10 là tiền tố của từ mã 101. Ngượ c lạ i,
trong mã có thể giả i mã duy nhấ t (0, 10, 110, 111) không có từ mã là tiề n tố c ủa một
từ mã khá c trong mã .
Đặc tính tiền tố trở thành đặc điểm ưa thích khi tìm kiếm mã có thể giải mã duy
nhấ t. Mã với đặc tính tiền tố được gọi là mã tiền tố. Nói cách khác, mã tiền tố là mã
mà không có từ mã là tiền tố của từ mã khác.
Để kiểm tra xem mã nhị phân là mã tiền tố bằng cách v một cây nhị phân . Mỗ i
mã nhị phân có thể tương ứng với một cây nhị phân mà mỗi từ mã tương ứng với một
đườ ng đi từ gố c đế n mộ t nút với tên từ mã được đánh dấu tại cuối đường đi . Mỗ i bit 0
trong mộ t từ mã tương ứ ng vớ i cạ nh trá i và bit 1 tương ứ ng vớ i cạ nh phả i.
Các bước để v cây nhị phân:
Bƣớ c 1: Xây dƣ̣ ng cây nhị phân
- Tạo một nút là gốc của cây nhị phân.
- Với mỗi từ mã , ta đọ c mộ t bit mộ t lầ n từ đầ u đế n cuố i . Bắ t đầ u từ
gố c, v nhánh mới hoặc di chuyển xuống mỗi cạnh dọc theo nhánh
tương ứ ng vớ i giá trị củ a bit.
- Khi bit 0 đượ c đọ c, nế u chưa có nhá nh ta vẽ nhánh trái và nút mới tại
cuố i nhá nh. Di chuyể n xuố ng mộ t cạ nh theo nhá nh trá i ngượ c lạ i và
đến nút cuối của cạnh . Tương tự , khi bit 1 đượ c đọ c, nế u chưa có
nhánh, ta vẽ nhá nh phả i, hoặ c di chuyể n xuố ng mộ t cạ nh nhánh phải
- Lặ p lạ i quá trình từ nú t đế n nú t trong khi đọ c từ ng bit cho đế n khi

kế t thú c từ mã . Ta đá nh dấ u từ mã sau khi kế t thú c toà n bộ từ mã .

Số hóa bởi Trung tâm Học liệu – Đại học Thái Nguyên
10
Bƣớ c 2: Kiể m tra vị trí tƣ̀ mã
Nế u tấ t cả cá c nhã n từ mã đượ c kế t hợ p vớ i c ác lá, thì từ mã là mã tiền tố .
Ngượ c lạ i, không phả i mã tiề n tố .
Ví dụ 1.9: Xét các mã (1, 01, 001, 0000) và (0, 10, 110, 1011) vớ i bả ng chữ cá i (A, B,
C, D) xem mã nào là mã tiền tố.
Bướ c 1: V cây nhị phân như trong Hình 1.13 (a) và (b) vớ i mỗ i mã ở trên.
Bướ c 2: Vớ i mộ t mã tiề n tố , các từ mã được kết hợp với các lá.
Vì tất cả các mã trong (1, 01, 001, 0000) là các lá (Hình 1.10 (a)), ta có thể dễ
dàng kết luận rằng (1, 01, 001, 0000) là mã tiền tố.
Vì từ mã 10 (B) đượ c kế t hợ p vớ i nú t bên trong củ a cây nhị phân (Hình 1.10
(b)), ta kế t luậ n rằ ng (0, 10, 110, 1011) không phả i mã tiề n tố .
Các mã tiền tố là tập con của các mã có thể giải mã được duy nhấ t. Điề u nà y có
nghĩa nếu một mã là mã tiền tố, thì mã đó có thể giải mã duy nhất.

Hnh 1.7: Đặc tính tiề n tố và cá c cây nhị phân
Tuy nhiên, nế u mã không phả i là mã tiề n tố , ta không thể kế t luậ n rằ ng mã đó
không có thể giả i mã duy nhấ t.
Ví dụ 1.10: Xét mã (0, 01, 11) vớ i (A, B, C).
Đây không phả i là mã tiề n tố vì từ mã 0 đầ u tiên là tiề n tố củ a từ
mã th hai là 01. Nhưng mã này vẫn có thể giải mã duy nhất.
Hình 1.14 cho thấ y quá trì nh giả i mã từ ng bướ c mộ t vớ i thông điệ p đã đượ c mã
hóa như sau: 011101.

Số hóa bởi Trung tâm Học liệu – Đại học Thái Nguyên
11


Hnh 1.8: Không phả i mã tiền tố nhưng có thể giả i mã duy nhấ t
Như đã thấ y, quá trình giải mã không đơn giản . Nó bao gồm quá trình học “thử
và sai” và đò i hỏ i “sự lầ n tìm ngượ c” . Mộ t số từ mã có thể giả i mã duy nhấ t nhưng
yêu cầ u tì m kiế m trong suố t quá trì nh giả i mã . Điề u nà y là m cho chú ng không hiệ u
quả bằng mã tiền tố.
1.4. Cơ bản về lý thuyết thông tin
Mộ t trong số cá c đặ c tí nh quan trọ ng trong lĩnh vự c lý thuyế t thông tin là entropy
đượ c giớ i thiệ u bở i C . E. Shannon và o năm 1948 trong bà i bá o “ A Mathematical
Theory of Communication”. Theo lý thuyế t củ a Shannon , entropy là độ đo lượ ng
thông tin không chắ c chắ n . Giả sử một tập tin có chứa các biểu tượng s
0
, s
1
, …, s
k

mỗ i biể u tượ ng có mộ t xá c suấ t xuấ t hiệ n là p(s
0
), p(s
1
), …, p(s
k
). Lượ ng thông tin vớ i
mỗ i biể u tượ ng đượ c xá c đị nh bằ ng –log
2
p(s
k
) và thường đượ c biể u diễ n theo bit.
Entropy - H(S) đượ c đị nh nghĩ a là lượ ng thông tin trung bì nh , (số bit trung bình )
cầ n thiế t để mã hó a mộ t biể u tượ ng:






1
0
2
)(log)()(
L
k
kk
spspSH


Số hóa bởi Trung tâm Học liệu – Đại học Thái Nguyên
12
1.5. Đơn vị đo đặc tính nén
Việc thực hiện một thuật toán nén có thể được đo bằng các tiêu chuẩn khác
nhau phụ thuộc vào tí nh chấ t của ứng dụng. Ta s thảo luận đơn vị đo theo hai trường
hợp cụ thể là nén không tổn hao và nén tổn hao.
Nén không tổn hao:
Đối với các thuật toán nén không tổn hao, ta đo hiệu quả nén bằ ng số lượng
hao hụt của file nguồn so với kích thước của phiên bản đã được nén.
 Tỉ lệ nén: Là tỉ lệ đầu ra với kích thước file đầu vào của một thuật toán nén, tức
là kích thước file sau khi nén với kích thước file nguồn trước khi nén.

 Hệ số nén: Ngược với tỉ lệ nén.

 Tỷ lệ phần trăm tiết kiệm được:


Ngoài ra, hiệu quả của một thuật toán chỉ là một khía cạnh về đơn vị đo của
thuật toán. Trong thực tế, tiêu chuẩn sau đây thường là mối quan tâm với các lập trình
viên: Độ phc tạp trong tính toán, Thời gian nén, Entropy, Sự dư thừa, Độ phc tạp
Kolmogorov, Kiểm tra cài đặt, Chi phí phụ (Overhead)
Nén tổn hao:
Đối với nén tổn hao, ta phải đo đặc tính của dữ liệu đã được giải nén cũng như
hiệu quả nén. Từ “độ tin cậ y” thường được sử dụng để mô tả độ chính xác giữa file
dữ nguồn và file được giải nén. Sự khác biệt giữa dữ liệ u nguồn trước khi nén và file
sau khi giải nén, được gọi là độ biến dạng. Thường độ biến dạng xấp xỉ được sử dụng
trong thực tế.
Tm li: Nén dữ liệu là một lĩnh v ực nghiên cứu tích cực và đang được quan
tâm. Có nhiều lí do thú vị để nghiên cứu những thuật toán nén . Nhữ ng thuậ t toá n né n
có thể được phân loại theo hai lớp đại cương sau : Nén không tổn hao và nén tổn hao .
Đặc tính nén có thể được đo bằng nhiều cách khác nhau.

Số hóa bởi Trung tâm Học liệu – Đại học Thái Nguyên
13
Trong lớ p cá c bà i toá n né n không tổ n hao , nhiều kỹ thuật nén đã ra đời như:
Phương pháp mã hóa Entropy: mã số học và mã Huffman. Hàng loạt các kỹ thuật mới
ra đời để cải tiến các kỹ thuật trên như: Mã hóa RLE, CD, MTF, LZW Và gần đây
nhất là kỹ thuật nén dữ liệu Burrows Wheeler được công bố bởi Burrows và Wheerler
năm 1994. Trong vòng hơn một thập k qua, thuật toán nén Burrows Wheeler [4] đã
trở thành một trong những công cụ then chốt trong lĩnh vực nén dữ liệu nói chung. Lý
do thành công của nó là tốc độ nén cao kết hợp với t lệ nén tốt. Nhiều cải tiến của kỹ
thuật này cũng đã được trình bày.
Trong chương tiếp theo, chúng ta s đi tìm hiểu cụ thể về cách làm việc của
chuyển đổi Burrows Wheeler và các cải tiến của kỹ thuật này trong hơn một thập k
qua.


Số hóa bởi Trung tâm Học liệu – Đại học Thái Nguyên
14
CHƢƠNG 2: KỸ THUẬT NÉN DỮ LIỆU BURROWS WHEELER VÀ CÁC
CẢI TIẾN
2.1. Chuyể n đổ i Burrows – Wheeler
2.1.1. Giớ i thiệ u
Các thuật toán nén dữ liệu được sử dụng rộng rãi nhất được dựa trên nén dữ
liệu tuần tự của Lempel Ziv. Kỹ thuật nén Burrows Wheeler không xử lý dữ liệu đầu
vào theo tuần tự, thay vào đó là xử lý một khối văn bản đầu vào như một đơn vị duy
nhất. Ý tưởng của chuyển đổi Burrows Wheeler ( Burrows Wheeler Transform -
BWT) là hoán vị các chữ cái trong một tài liệu là m cho nhiều ký tự trong văn bản
được chuyển đổi xuất hiện trong các run (xâu gồ m cá c biể u tượ ng giố ng nhau ), hoặ c
rất gần với sự xuất hiện trước đó để dễ dàng hơn cho việc thực hiện nén.
2.1.2. Chuyển đổi Burrows-Wheeler thuậ n
Giả sử BWT mã hóa xâu T gồm n kí tự T[1 n]. trên một bảng chữ cái ∑ gồm
|∑| kí tự
Chuyển đổi thuậ n về bản chất liên quan đến việc sắp xếp tất cả các phép quay
của xâu đầu vào, nhóm cá c ký tự xuất hiện trong các ngữ cảnh tương tự lạ i vớ i nhau.
 Bước 1: Xâu cần mã hóa được dịch chuyển vòng tròn và tạo thành một ma
trận L*L (với L là độ dài xâu kí tự)
 Bước 2: Sắp xếp lại các dòng của ma trận theo thứ tự từ điển
 Bước 3: Trích xâu từ các kí từ cuối ở mỗi dòng, thông báo xâu này và cho
biết từ gốc là thứ tự thứ mấy trong ma trận nhận được ở bước 2.
Ví dụ: Ta cần mã hóa xâu BANANA
Bƣớc 1: Xâu cần mã hóa được dịch chuyển vòng tròn và tạo thành một ma trận
L*L (với L là độ dài xâu kí tự)
B
A
N
A

N
A
A
N
A
N
A
B
N
A
N
A
B
A
A
N
A
B
A
N
N
A
B
A
N
A
A
B
A
N

A
N
Hình 2.1a: Mảng A cha tất cả các phép quay đầu vào của xâu BANANA

Số hóa bởi Trung tâm Học liệu – Đại học Thái Nguyên
15
Bước 2: Sắp xếp lại các dòng của ma trận theo thứ tự từ điển
A
B
A
N
A
N
A
N
A
B
A
N
A
N
A
N
A
B
B
A
N
A
N

A
N
A
B
A
N
A
N
A
B
A
N
A
Hình 2.1b: A
s
thu được bằng cách sắp xếp A.
Cột cuối của A
s
(kí hiệu L) là đầu ra của BWT
Bước 3: Trích xâu từ các kí từ cuối ở mỗi dòng, thông báo xâu này và cho biết
từ gốc là thứ tự thứ mấy trong ma trận nhận được ở bước 2.
Ta có (NNBAAA,4). Xâu NNBAAA chính là xâu để thực hiện nén trong các
bước tiếp theo.
Tuy nhiên, thay vì sử dụng không gian O(n
2
) như đã đượ c đề xuất bởi Hình
2.1b, ta có thể tạo ra một mảng R[1. . . n] tham chiếu đến các xâu đã được quay trong
văn bản đầu vào T.
Khởi tạo R[i]=i với
ni ,1

, như được thể hiện trong Hình 2.2a, để biểu diễn
danh sách chưa được sắp xếp . Sau đó nó được sắp xếp bằng cách sử dụng xâu con bắt
đầu tạ i T[R[i]] như là khóa so sánh.
Hình 2.2b cho thấy kết quả củ a quá trì nh sắp xếp.
Ví dụ:
- Vị trí 6 là xâu được quay lần đầu tiên theo thứ tự từ điể n (ABANAN)
- Theo sau vị trí 6 là vị trí 4 (ANANBAN)
- Theo sau vị trí 4 là vị trí 2 (ANANAB)
- Theo sau vị trí 2 là vị trí 1 (BANANA)
- Theo sau vị trí 1 là vị trí 3 (NANABA)
- Cuối cùng là vị trí 5: (NABANA).
Xâu tham chiếu cuối cùng là R = [6,4,2,1,3,5].



Số hóa bởi Trung tâm Học liệu – Đại học Thái Nguyên
16

R

T

R


T
1

B


6

B
2

A

4

A
3

N

2

N
4

A

1

A
5

N

3


N
6

A

5

A

(a)



(b)


Hình 2.2 Mảng R được sử dụng để sắp xếp xâu mẫu BANANA
Mảng R trực tiếp chỉ đế n các ký tự trong T tương ứng với cột đầu tiên của A
s

(cộ t F). Cột cuối của A
s
(cộ t L) là đầu ra của BWT , và có thể được biểu thị bằ ng
T[R[i]-1], vớ i
ni ,1
. Trong trường hợp này, văn bản được chuyển đổi là
L=NNBAAA. Ta phải truyền một chỉ số a để báo cho bộ giải mã đó là vị trí L tương
ứng với ký tự cuối của văn bản gốc (tức là hàng của A
s
chứa xâu gốc T). Trong trường

hợp này chỉ số a = 4.
Với mô tả trên chuyển đổi đã hoàn thành mà chỉ sử dụng không gian O(n) (với
R). Thời gian thực hiện là O(n) để tạo ra các mảng R, cộng với thời gian cần thiết để
sắp xếp . Thông thường việc sắp xếp được đánh giá mấ t thời gian trung bình là
O(nlogn) nếu phương pháp chuẩn như quicksort được sử dụng.
Như ta đã thấy: Chuyển đổi Burrows Wheeler không làm cho chuỗi BANANA
ngắn đi, nhưng lại làm 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 đó).
Ưu điểm: Sự phân cụm này làm cho quá trình nén trở nên dễ dàng hơn
Nhượ c điể m : Do chuyển đổi Burrows Wheeler làm việc theo phương phá p
từ ng-khố i (block-wise), vì vậy nó không thể xử lý văn bản theo từng ký tự một , mà
phải đọc một khối (thườ ng là hà ng chụ c KB ) và sau đó nén nó . Điề u nà y không có
mộ t giớ i hạ n vớ i hầ u hế t cá c mụ c đích , nhưng không loạ i trừ mộ t số ứ ng dụ ng phả i xử

Số hóa bởi Trung tâm Học liệu – Đại học Thái Nguyên
17
lý dữ liệu xen chương trình chạy (on-the-fly) khi nó đế n. Mục đích quan trọng khác là
văn bả n phả i đượ c sắ p xế p.
Trong suố t luậ n văn này, ta giả thiế t việ c sắ p thứ tự duy nhấ t trên cá c ký tự
hoặ c cá c biể u tượ ng trong văn bả n để cá c xâu con có thể đượ c so sá nh bằ ng cá c thuậ t
toán sắp xếp.
2.1.3. Chuyển đổi Burrows-Wheeler nghị ch.
Chuyển đổi nghị ch là lấy văn bản đã được hoán vị BWT và khôi phục đầu vào
gốc T. Chuyể n đổ i nghị ch có phần khó để cài đặt hơn chuyển đổi thuận, nhưng nó vẫn
có thể được thực hiện trong thời gian và không gian O(n). Thông thườ ng hai mảng chỉ
số O(n) s cần thiết, cộng với hai mảng O(|Σ|) để đếm các ký tự trong đầu vào. Có
nhiều cách để thực hiện việ c giải mã.
Có một thuật toán đơn giản như sau:
Bước 1: Lấy các kí tự trong xâu cuối cùng, sắp xếp lại theo thứ tự từ điển
Bước 2: (Lặp)

- Lấy các kí tự ở xâu cuối cùng, thêm vào các xâu đã có.
- Sắp xếp lại theo thứ tự từ điển
Ví dụ: Ta cần giải mã xâu (NNBAAA,4 )
N
A
AB
ABA
ABAN
ABANA
ABANAN
N
A
AN
ANA
ANAB
ANABA
ANABAN
B
A
AN
ANA
ANAN
ANANA
ANANAB
A
B
BA
BAN
BANA
BANAN

BANANA(4)
A
N
NA
NAB
NANA
NABAN
NABANA
A
N
NA
NAN
NANA
NANAB
NANABA
Hình 2.3: Minh họa việc giải mã Burrows Wheeler
Như vậy, ta đã có xâu BANANA ở vị trí 4. Dễ thấy, ta cần thêm vào n lần (n là
độ dài của xâu) vì thế cần n lần sắp xếp. Nếu ta dùng thuật toán sắp xếp hiệu quả như
QuickSort ta cần NlogN; không những thế, việc so sánh xâu cũng mất khá nhiều thời
gian. Nhìn chung, thuật toán này có độ phức tạp N.LogN. Độ phức tạp này không thể
chấp nhận được trong thực tế khi mà các file văn bản chứa cả triệu kí tự.
Có một cách khác với độ phức tạp là N. Đây là thuật toán phát triển dựa trên
tính đúng đắn của thuật toán trên nhưng tránh việc sắp xếp.

×