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

Tiếp cận mã huffman theo tần suất và ứng dụng

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.51 MB, 75 trang )

ĐẠI HỌC THÁI NGUYÊN
TRƢỜNG ĐẠI HỌC CÔNG NGHỆ THÔNG TIN VÀ TRUYỀN THÔNG

HOÀNG VĂN SÁNG

TIẾP CẬN MÃ HUFFMAN THEO TẦN SUẤT VÀ ỨNG DỤNG

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

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

/>

ĐẠI HỌC THÁI NGUYÊN
TRƢỜNG ĐẠI HỌC CÔNG NGHỆ THÔNG TIN VÀ TRUYỀN THÔNG

HOÀNG VĂN SÁNG

TIẾP CẬN MÃ HUFFMAN THEO TẦN SUẤT VÀ ỨNG DỤNG

Chuyên ngành: KHOA HỌC MÁY TÍNH
Mã số: 60 48 01 01

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

NGƢỜI HƢỚNG DẪN KHOA HỌC

PGSTSKH NGUYỄN XUÂN HUY

Thái Nguyên - 2015



Số hóa bởi Trung tâm Học liệu - ĐHTN

/>

i

LỜI CAM ĐOAN

Học viên xin cam đoan luận văn là công trình nghiên cứu của riêng
cá nhân tôi,

.
Học viên hoàn toàn chịu trách nhiệm về tính pháp lý quá trình
nghiên cứu khoa học của luận văn này.
Thái Nguyên, tháng 10 năm 2015
Học viên

Hoàng Văn Sáng

LỜI CẢM ƠN
Số hóa bởi Trung tâm Học liệu - ĐHTN

/>

ii

Lời đầu tiên, học viên xin gửi lời biết ơn sâu sắc đến PGS.TS Nguyễn
Xuân Huy ngƣời đã tận tình hƣớng dẫn, chỉ bảo, giúp đỡ học viên trong
suốt quá trình làm luận văn.

Học viên cũng xin gửi lời cảm ơn đến các thầy cô giáo trƣờng Đại học
Công nghệ thông tin và Truyền thông - Đại học Thái Nguyên, các thầy cô
Viện Công nghệ thông tin đã truyền đạt những kiến thức và giúp đỡ học
viên trong suốt quá trình học tập.
Học viên cũng xin gửi lời cảm ơn tới Ban giám đốc Trung tâm Tin
học - nơi học viên công tác - đã tạo điều kiện thuận lợi cho học viên tham
gia khóa học và trong quá trình hoàn thành luận văn.
Và học viên cũng xin gửi lời cảm ơn tới các đồng nghiệp, gia đình và
bạn bè, những ngƣời đã ủng hộ, động viên tạo mọi điều kiện giúp đỡ để
học viên có đƣợc kết quả nhƣ ngày hôm nay.
Thái Nguyên, tháng 10 năm 2015
Học viên

Hoàng Văn Sáng

MỤC LỤC
Trang
Số hóa bởi Trung tâm Học liệu - ĐHTN

/>

iii

LỜI CAM ĐOAN .......................................................................................... i
MỤC LỤC .................................................................................................... ii
DANH MỤC CÁC HÌNH ............................................................................ v
MỞ ĐẦU ...................................................................................................... 1
1. Đặt vấn đề ................................................................................................. 1
2. Đối tƣợng và phạm vi nghiên cứu ............................................................ 1
3. Hƣớng nghiên cứu của đề tài .................................................................... 2

4. Phƣơng pháp nghiên cứu .......................................................................... 2
5. Ý nghĩa khoa học của đề tài...................................................................... 2
6. Bố cục của luận văn. ................................................................................. 3
CHƢƠNG 1: TỔNG QUAN VỀ NÉN DỮ LIỆU ....................................... 4
1.1. Vấn đề về nén dữ liệu ............................................................................ 4
1.2. Bài toán nén dữ liệu ............................................................................... 6
1.3. Phân loại chƣơng trình nén .................................................................... 7
1.4. Chất lƣợng của thuật toán nén dữ liệu. .................................................. 8
1.5. Vấn đề giải nén ...................................................................................... 9
...................................................... 11
1.7. Nén không tổn hao ............................................................................... 11
1.8. Nén tổn hao .......................................................................................... 12
1.9. Đơn vị đo đặc tính nén......................................................................... 13
CHƢƠNG 2: TỔNG QUAN VỀ MÃ NÉN HUFFMAN .......................... 16
2.1. Mã tiền tố ............................................................................................. 16
2.2. Biểu diễn mã tiền tố trên cây nhị phân ................................................ 17
2.3. Quy trình nén dữ liệu theo mã Huffman.............................................. 19
Số hóa bởi Trung tâm Học liệu - ĐHTN

/>

iv

2.3.1 Giới thiệu về mã Huffman ......................................................... 19
2.3.2. Phƣơng pháp mã hóa Mã hóa Huffman .................................... 20
2.3.3 Tính chất cây Huffman .............................................................. 21
2.3.4. Thuật toán tạo mã Huffman ...................................................... 21
2.3.5. Giải mã thuật toán Huffman ..................................................... 31
2.4. Xây dựng và cải tiến thuật toán ........................................................... 32
CHƢƠNG 3: XÂY DỰNG CHƢƠNG TRÌNH NÉN SỬ DỤNG ............ 37

PHƢƠNG PHÁP MÃ HÓA HUFFMAN .................................................. 37
3.1. Cấu trúc chƣơng trình .......................................................................... 37
3.2. Các thuật toán nhóm một ..................................................................... 37
3.2.1. Thuật toán A1: Nén Huffman ................................................... 37
3.2.2. Thuật toán A2: Dựng cây Huffman .......................................... 38
3.2.3. Thuật toán A3: Huffman code .................................................. 39
3.2.4. Thuật toán A4: Giải mã Huffman ............................................. 41
3.3. Giới thiệu chƣơng trình ....................................................................... 43
3.4. Kết quả kiểm thử chƣơng trình ............................................................ 46
KẾT LUẬN................................................................................................. 48
TÀI LIỆU THAM KHẢO .......................................................................... 50
Chƣơng trình chi tiết thực hiện giải thuật bằng ngôn ngữ Dev-C++ ......... 51

Số hóa bởi Trung tâm Học liệu - ĐHTN

/>

v

DANH MỤC CÁC HÌNH
Trang
1. 1: Quy trình nén dữ liệu................................................................... 4
1. 2: Bộ nén và bộ giải nén. ............................................................... 10
1. 3: Bộ mã hóa và bộ giải mã ........................................................... 10
1. 4:

ật toán nén không hao tổn ........................................ 11

1. 5: Các thuật toán nén tổn hao ....................................................... 12
2. 1: Sắp xếp danh sách các kí tự (ví dụ 1) ........................................ 22

2. 2: Xây dựng cây Huffman (ví dụ 1) ............................................... 25
2. 3: Cây Huffman điền đầy đủ thành phần (ví dụ 1) ........................ 25
2. 4: Sắp xếp danh sách các kí tự (ví dụ 2)........................................ 26
2. 5: Xây dựng Cây Huffman (ví dụ 2) .............................................. 29
2. 6: Cây Huffman điền đầy đủ thành phần (vi dụ 2) ........................ 30

Số hóa bởi Trung tâm Học liệu - ĐHTN

/>

1

MỞ ĐẦU
1. Đặt vấn đề
Một trong những chức năng chính của máy tính là xử lý dữ liệu và
lƣu trữ. 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 trở nên khá lớn. Những vấn đề trên nảy sinh
ra khái niệm nén dữ liệu. Nén dữ liệu là quá trình làm giảm lƣợng thông tin
“dƣ thừa” trong dữ liệu gốc, do vậy lƣợng thông tin thu đƣợc sau nén
thƣờng nhỏ hơn dữ liệu gốc rất nhiều. Nén dữ liệu là giải pháp hợp lý nhất
nhằm mục đích giảm chi phí cho ngƣời sử dụng. Một trong những kĩ thuật
thƣờng dùng trong nén dữ liệu là xác định tần suất xuất hiện của các đối
tƣợng trong file nguồn. Đối tƣợng nào xuất hiện càng nhiều thì mã càng
ngắn. Heuristics này đƣợc sử dụng trong các thuật toán nén Huffman. Với
mỗi văn bản cho trƣớc, thuật toán đếm số lần xuất hiện của từng kí tự trong
văn bản sau đó xây dựng cây Huffman cuối cùng từ cây Huffman sinh ra
mã nén. Nếu ta có thể xác định tần suất xuất hiện của từng chữ cái trong

một ngôn ngữ cho trƣớc thì chƣơng trình không phải thực hiện thủ tục
đếm.
Vì vậy, “Tiếp cận mã Huffman theo tần suất và ứng dụng” đƣợc
học viên chọn làm luận văn tốt nghiệp của mình.
2. Đối tƣợng và phạm vi nghiên cứu
Đối tƣợng:
- Các phần mềm nén dữ liệu.
Số hóa bởi Trung tâm Học liệu - ĐHTN

/>

2

- Các thuật toán nén dữ liệu.
- Các phƣơng pháp mã hóa Huffman.
- Hệ thống phần mềm nén dữ liệu.
Phạm vi:
- Các khái niệm của ký tự mã hóa, các thuật toán của nén văn bản. Kiến
trúc, chức năng và các thành phần của nén dữ liệu cụ thể cho bài toán nén
sử dụng phƣơng pháp mã hóa Huffman.
- Các chức năng chính và quy trình thực thi của bài toán nén dữ liệu.
- Hệ thống chƣơng trình cho bài toán nén dữ liệu.
3. Hƣớng nghiên cứu của đề tài
- Tìm hiểu tổng quan về nén dữ liệu và nghiên cứu một thuật toán nén cụ
thể.
- Tìm hiểu bài toán nén dữ liệu, tiến hành phân tích.
- Thu thập các số liệu có liên quan.
- Phân tích, đánh giá thông qua các số liệu thu thập đƣợc.
- Cài đặt thực nghiệm.
4. Phƣơng pháp nghiên cứu

- Phƣơng pháp nghiên cứu lý thuyết: Tổng hợp tài liệu, hệ thống lại các
kiến thức, tìm hiểu các khái niệm, thuật toán sử dụng trong đề tài.
- Phƣơng pháp quy nạp toán học.
-

.

- Phƣơng pháp trao đổi khoa học, lấy ý kiến chuyên gia.
5. Ý nghĩa khoa học của đề tài
- Sau khi thực hiện đề tài học viên có thêm hiểu biết về công trình khoa học
và nghiên cứu.
Số hóa bởi Trung tâm Học liệu - ĐHTN

/>

3

- Đề tài có thể đóng góp các phƣơng pháp và kĩ thuật tối ƣu hóa trong lĩnh
vực mã hóa.
6. Bố cục của luận văn
Bố cục của luận văn bao gồm 3 chƣơng:

Chương 1: Tổng quan về nén dữ liệu
Chương này học viên sẽ trình bày tổng quan về đề tài, khái niệm nén
dữ liệu, các phương pháp nén dữ liệu, phân loại và đánh giá chất lượng
của chương trình nén.
Chương 2: Tổng quan về mã nén Huffman
Chương này học viên sẽ trình bày mã tiền tố, cách biểu diễn mã tiền
tố trên cây nhị phân, quy trình nén dữ liệu theo mã Huffman, thuật toán tạo
mã Huffman và giải mã Huffman.

Chương 3: Xây dựng chƣơng trình nén sử dụng phƣơng pháp mã hóa Huffman
Dựa vào cơ sở lý thuyết của thuật toán được trình bày ở chương 2,
trong chương này, học viên trình bày ứng dụng trong thực tế và cài đặt
chương trình thực nghiệm cụ thể.

Số hóa bởi Trung tâm Học liệu - ĐHTN

/>

4

CHƢƠNG 1: TỔNG QUAN VỀ NÉN DỮ LIỆU
1.1. Vấn đề về nén dữ liệu
Nén là một quá trình giảm lƣợng không gian cần thiết để biểu diễn
cùng một lƣợng thông tin cho trƣớc. Ngƣời ta còn gọi nén là biến đổi một
luồng ký hiệu vào thành một luồng các từ mã.
Quá trình nén nhƣ sau:

1. 1: Quy trình nén dữ liệu

Nén dữ liệu trong ngữ cảnh khoa học máy tính là khoa học biểu diễn
thông tin dƣới dạng thu gọn. Nói cách khác, nén dữ liệu là việc thực hiện
thu gọn kích thƣớc các tập tin hoặc làm cho thông tin lƣu trữ chiếm không
gian lƣu trữ ít nhất. Cụ thể Nén dữ liệu là quy trình mã hóa từ một file
nguồn f thành một file đích f‟, đáp ứng đƣợc dung lƣợng file đích f‟ nhỏ
hơn file nguồn f, file đích càng nhỏ hơn file nguồn càng tốt, từ file đích f‟
khôi phục đƣợc file nguồn f, với thời gian ít nhất. Có nhiều cách để thực hiện
điều này tùy vào từng đối tƣợng cụ thể.
Ta kí hiệu F là thuật toán nén dữ liệu D để thu đƣợc bản nén V khi
đó ta có F(D) = V.

Các yêu cầu của một thuật toán nén dữ liệu:
Số hóa bởi Trung tâm Học liệu - ĐHTN

/>

5

+ Dữ liệu ra nhỏ hơn dữ liệu vào.
- Có |D|là dung lƣợng của dữ liệu vào khi đó F(D) < |D|
+ Khôi phục V -> D
- Gọi F-1 là thuật toán giải nén khi đó F-1(V) = D
+ Thời gian thực hiện càng ít càng tốt.
+ Tỉ lệ nén.
- Gọi k là tỉ lệ nén khi đó
Nén dữ liệu đã trở thành yêu cầu chung cho hầu hết phần mềm ứng
dụng nhƣ một lĩnh vực nghiên cứu quan trọng và tích cực trong khoa học
máy tính. Nếu không có các kỹ thuật nén Internet sẽ không bao giờ phát
triển, truyền hình kỹ thuật số, các kỹ thuật truyền thông di động hoặc
truyền thông video đã đƣợc phát triển trên thực tế.
Các lĩnh vực ứng dụng có liên quan và đƣợc thúc đẩy bởi nén dữ liệu
gồm có:
+ Các hệ thống truyền thông cá nhân: Fax, thƣ thoại và điện thoại.
+ Các hệ thống máy tính: Cấu trúc bộ nhớ, đĩa và băng.
+ Tính toán di động.
+ Các hệ thống máy tính phân tán.
+ Mạng máy tính đặc biệt là Internet.
+ Sự phát triển đa phƣơng tiện, hình ảnh, xử lý tín hiệu.
+ Lƣu trữ hình ảnh và hội nghị truyền hình.
+ Ti vi kỹ thuật số và truyền hình vệ tinh.
Nhiều vấn đề trên thực tế thúc đẩy nhiều nghiên cứu khác nhau về

nén dữ liệ
đƣợc kích thích bở

, nghiên cứ

ữ liệu cũng đã dựa trên hay
ới khác. Một phần do phạm vi ứng dụng

rộng rãi của nó, nén dữ liệu bao trùm nhiều ngành khoa học và có thể đƣợc
tìm thấy trong nhiều lĩnh vực khác nhau nhƣ: Lý thuyết thông tin; Lý
Số hóa bởi Trung tâm Học liệu - ĐHTN

/>

6

thuyết mã hóa; Mạng máy tính và viễn thông; Xử lý tín hiệu kỹ thuật số;
Xử lý ảnh; Đa phƣơng tiện; Bảo mật máy tính...
Trong nén dữ liệu, từ dữ liệu có nghĩa là thông tin ở dạng kỹ thuật số
, có nghĩa là quá trình
loại bỏ dƣ thừa trong dữ liệu. Cụm từ 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ế

uật toán hiệu quả nhằm để:

+ Biểu diễn dữ liệ

ừa.

+ Loại bỏ dƣ thừa trong dữ liệu.

+ Cài đặt thuật toán nén và giải nén.
Nén dữ liệu là việc tìm một thuật toá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í dụ cho một xâu s, câu hỏi là
dãy các biểu tƣợng có thể thay thế mà chiế

ữ là dãy

nào? Giải pháp cho vấn đề nén là thuậ
tƣợng chứ

ểu

ố lƣợng bit hơn, cộng với các thuật toán giải nén để phục

hồi xâu gốc. Vậy số lƣợ

? Điều đó phụ thuộ



ụ thuộc vào sự dƣ thừa có thể

từ dữ liệu
thuật khác nhau để xác định dƣ thừa và loại bỏ dƣ thừa trong dữ liệu.
ợp cho tất cả vấn đề nén dữ liệu. Theo các
ặc tính của dữ

nghiên cứu về nén dữ liệu, ta chủ yếu phả
ọng đƣa ra một số


liệ
diễ



c sự biểu

ọn. Điều này làm gia tăng sự đa dạng của mô hình dữ liệ
ỹ thuật biểu diễ

ủa kỹ thuật nén.

1.2. Bài toán nén dữ liệu
Nén dữ liệu có thể đƣợc xem nhƣ một phƣơng tiện truyền thông biểu
diễn hiệu quả nguồn dữ liệu kỹ thuật số nhƣ văn bản, hình ảnh, âm thanh
Số hóa bởi Trung tâm Học liệu - ĐHTN

/>

7

hay bất kỳ sự kết hợp của các kiểu dữ liệu đó nhƣ video. Mục đích của nén
ồn theo dạng kỹ thuật số với càng ít bit càng

dữ liệu là biểu diễ

tốt, đáp ứng yêu cầu tối thiểu hóa khi k




.

Khi tiếp cận với những bài toán về nén, ta phải xem xét khía cạnh
hiệu quả của các thuật toán cũng nhƣ hiệu quả nén. Bằng trực quan, tính
chất của thuật toán nén sẽ phụ thuộc vào dữ liệu và cấu trúc bên trong của
nó. Việc dƣ thừa càng nhiều của dữ liệu nguồn càng làm cho một thuật
toán nén có thể hiệu quả hơn.
1.3. Phân loại chƣơng trình nén
Trên thực tế những phần mềm nén hoặc hệ điều hành thƣờng đƣợc
hợp thành bởi nhiều kiểu nén. Dựa vào dữ liệu sau khi đƣợc giải nén, so
sánh với dữ liệu đầu vào của quá trình nén, có thể chia thành nén bảo toàn
và nén không bảo toàn. Một chƣơng trình đƣợc gọi là nén bảo toàn khi nó
có thể dựng lại đƣợc dữ liệu nguyên gốc từ dữ liệu đã đƣợc nén. Trong
thực tế, nén bảo toàn đƣợc dùng đối với các loại dữ liệu quan trọng: các
bức ảnh thuộc về ngành sinh học, y tế nhƣ bức ảnh tế bào bệnh, văn bản
chữ viết, những phần mềm,... Một chƣơng trình đƣợc gọi là nén không bảo
toàn khi nó không có khả năng dựng lại nguyên mẫu dữ liệu ban đầu từ dữ
liệu đã qua quá trình nén. Nén không bảo toàn thƣờng đƣợc áp dụng để nén
ảnh, đoạn băng. Dựa vào khả năng cập nhật thông số cho thuật toán trong
quá trình mã hóa và giải mã, có thể chia ra 2 loại: nén tĩnh (static
compression) và nén động (adaptive compression). Nén tĩnh: các quy luật
dữ liệu vào của thuật toán không bị thay đổi trong suốt quá trình nén và
giải nén. Nén động: các quy luật hoặc dữ liệu vào của thuật toán đƣợc cập
nhật thƣờng xuyên, có thể lại đƣợc cập nhật bằng chính những dữ liệu vừa
mới ra. (Một số chƣơng trình nén động đƣợc xây dựng từ những dữ liệu
Số hóa bởi Trung tâm Học liệu - ĐHTN

/>

8


khởi đầu là trắng) Nếu nhƣ một chƣơng trình nén và giải nén đƣợc thực
hiện với các thao tác đồng nhất nhƣ nhau, thì thuật toán mã hóa đƣợc gọi là
cân đối và ngƣợc lại thì đƣợc gọi là không cân đối. Căn cứ độ dài ký tự
trƣớc và sau nén, cũng có thể chia thuật toán dùng để nén dữ liệu ra các
kiểu sau: Fixed to fixed: độ dài biểu diễn trên máy tính của từng ký tự phải
đều bằng nhau, và khi đƣợc nén, độ dài biểu diễn mã của các ký tự cũng
phải bằng nhau; Fixed to variable: những ký tự trƣớc khi nén thì đều có độ
dài nhƣ nhau, nhƣng những ký tự đã đƣợc nén sẽ có độ dài không cân đối
tƣơng đồng nhau nữa; Variable to fixed: những dãy ký tự có độ dài khác
nhau sau khi đƣợc nén, trở thành những dãy ký tự có độ dài bằng nhau;
Variable to variable: các chuỗi ký tự trƣớc khi nén và sau khi nén có độ dài
khác nhau, không nhất thiết phải tƣơng ứng theo đúng tỷ lệ.
1.4. Chất lƣợng của thuật toán nén dữ liệu
Hiệu quả của một thuật toán nén đƣợc đánh giá thông qua lƣợng dữ
liệu mà nó có thể giúp tiết kiệm đƣợc không gian lƣu trữ của bộ nhớ.
Không nên đánh giá hiệu quả một thuật toán bằng cách công nghiệp dập
khuôn, bởi khả năng của một chƣơng trình nén còn phụ thuộc rất nhiều vào
dữ liệu ban đầu, dữ liệu ấy có thể chứa hay không chứa những kiểu dƣ thừa
mà thuật toán đào sâu xử lý. Trong nén bảo toàn, có thể đo hiệu quả của
chƣơng trình nén bằng sự hao hụt giữa kích thƣớc dữ liệu đầu vào và kích
thƣớc dữ liệu đầu ra. Từ đó, có thể xét tới một vài thông số đƣợc định
nghĩa sau:
- Tỷ lệ nén (k): Là tỷ lệ của kích thƣớc sau nén và kích thƣớc trƣớc nén.
- Thừa số nén: Là nghịch đảo của tỷ lệ nén.
- Mức độ hao hụt: Là tỷ lệ của độ chênh lệch 2 kích thƣớc với kích thƣớc
ban đầu.
Số hóa bởi Trung tâm Học liệu - ĐHTN

/>


9

Ngoài ra còn một số tiêu chí cần đánh giá trên thuật toán: độ phức
tạp của thuật toán, thời gian thực hiện nén và giải nén, số lƣợng bit nhị
phân trung bình ít nhất biểu diễn ký tự mã hóa trung bình, sự dƣ thừa của
dữ liệu sau khi đƣợc mã hóa…
1.5. Vấn đề giải nén
Bất kì thuật toán nén sẽ không làm việc trừ khi một phƣơng tiện giải
nén đƣợc cung cấp do bản chất của dữ liệu nén. Từ nén ngụ ý là ngữ cảnh
của cả nén và giải nén.
Trong luận văn này, đôi khi không đề cậ

ật toán giải nén

khi quá trình giải nén là hiển nhiên hay có thể dễ dàng đƣợc suy ra từ quá
trình nén. Trong nhiều trƣờng hợp thực tiễn, hiệu quả của thuật toán giả
ật toán nén. Ví dụ nhƣ dữ liệu phim ảnh, hình
ảnh, và âm thanh thƣờng đƣợc nén một lần bở
ản với những file đã nén đƣợc giải nén nhiều lần bởi hàng
triệu ngƣờ

.

Ngoài ra, đôi khi hiệu quả của các thuật toán nén quan trọng hơn. Ví
ời gian thực

dụ, dữ liệu ghi âm thanh hay video từ mộ
có thể đƣợc ghi trực tiế
truyền đế


ộ lƣu trữ

, hay đƣợc
ệu thu hẹp. Phụ thuộ

ấn đề cụ thể, đôi khi ta xem xét vấn đề nén và giải nén nhƣ hai quá
trình đồng bộ và không đồng bộ riêng biệt. Hình 1.2 Cho thấy một mô hình
dựa trên mối quan hệ giữa các thuật toán nén và giải nén.

Số hóa bởi Trung tâm Học liệu - ĐHTN

/>

10

1. 2: Bộ nén và bộ giải nén.

Một thuật toán nén thƣờng đƣợc gọi là bộ nén và thuật toán giải nén
đƣợc gọi là bộ giải nén. Bộ nén và bộ giải nén có thể đƣợ

tạ

ủa một kênh truyền thông. Trong trƣờng hợp này, bộ nén tại nguồn
thƣờng đƣợc gọi là bộ mã hóa và bộ giải nén tại đích của thông điệp đƣợc
gọi là bộ giải mã. Hình 1.3 cho thấy một mô hình 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. 3: Bộ mã hóa và bộ giải mã


Số hóa bởi Trung tâm Học liệu - ĐHTN

/>

11

1.6.
Có hai hệ thống kỹ thuật nén chủ yếu khi xem xét khả năng khôi
ồn ban đầu. Chúng đƣợc gọi là nén không tổn

phụ
hao và nén tổn hao.
1.7. Nén không tổn hao

Một phƣơng pháp nén là không tổn hao 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. Đó là không
ốt quá trình nén. Ví dụ, trong Hình 1.4,

mất bất kỳ

xâu đầu vào AABBBA đƣợc khôi phục lại sau khi thực hiện thuậ
ật toán giải nén. Nén không tổn hao đƣợc gọi là
nén thuậ

ữ liệu gốc có thể đƣợc phục hồ

ải nén.

1. 4:


ật toán nén không hao tổn

ỹ 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 điển
hình là các file văn bản, hình ả
pháp lý, mộ

, các hình ảnh đƣợc bảo vệ vì lý do

ả thi của máy tính, …

Số hóa bởi Trung tâm Học liệu - ĐHTN

/>

12

1.8. Nén tổn hao
Một phƣơng pháp nén tổn hao 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. Có một vài chi tiết không quan
trọng có thể bị mất trong quá trình nén. Từ không quan trọng ở
ầu nhất định về đặc tính của dữ liệu đƣợc khôi phục. Hình
1.5 cho thấy một ví dụ số thập phân dài trở thành phép xấp xỉ ngắn hơn sau
quá trình nén – giải nén.

1. 5: Các thuật toán nén tổn hao

Nén tổn hao đƣợc gọi là nén không thuậ




ải nén. Khôi phục xấp xỉ có

khôi phục dữ liệu gố

thể là một sự mong muốn vì nó 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ó hai dạng bài toán nén cổ



biến dạ
, bài toán là nén file nguồn bằng hoặc thấ
nhƣng sự chính xác cao nhất có thể.
Số hóa bởi Trung tâm Học liệu - ĐHTN

/>
lệ này


13

Nén trong các lĩnh vực thƣ thoạ


ệ biến dạng.


1.9. Đơ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ộ

ủa ứng dụng. Khi hiệu quả về

thời gian không phải là một vấn đề (mặc dù nó quan trọng nhƣ nhau), mối
quan tâm chính của ta sẽ là hiệu quả về không gian, tức là hiệu quả một
thuật toán nén dữ liệu có thể tiết kiệm đƣợc không gian lƣu trữ là bao
ệ phần trăm của hiệu giữa kích thƣớc của file đầu vào

nhiêu? Ví dụ

trƣớc khi nén và kích thƣớc của file đầu ra sau khi nén sẽ cung cấp một dấu
hiệu tốt về hiệu quả nén. Nhìn chung rất khó để đo hiệu suất của một thuật
toán nén vì tính chất nén của nó phụ thuộc rất nhiều vào dữ liệu chứa dƣ
thừa mà thuật toán tìm kiếm. Tính chất nén cũng phụ thuộc vào việc ta cho
phép dữ liệu đƣợc khôi phục giống với dữ liệu nguồn. Do đó ta sẽ thảo
luận đơn vị đo theo hai trƣờng hợ

ổn hao và nén tổn

hao.
Đối với các thuật toán nén không tổn hao, ta đo hiệu quả



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: Đơn giả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ƣớ

nguồn trƣớc khi nén.



* Hệ số nén: Ngƣợc với tỉ lệ nén.
Số hóa bởi Trung tâm Học liệu - ĐHTN

/>
ới kích thƣớc file


14

ệ phần trăm tiết kiệm đƣợc: Điều này cho thấy hao hụ

ệ phần

trăm.

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ạ

: Điều này có thể

đƣợc thông qua từ các kỹ thuật phân tích thuật toán đã có từ lâu. Ví dụ, sử
ệu quả thời gian và lƣu trữ. Tuy

dụng ký hiệ


nhiên, hoạt động của các thuật toán nén có thể không nhất quán. Vì thế nó
có thể sử dụng các kết quả thự

. Thời gian nén: Ta

thƣờng xem xét thờ

ải mã tách biệt nhau. Trong một số

ứng dụng, thời gian giả

ọng hơn thời gian mã hóa. Trong các

ứng dụng khác, chúng quan trọng nhƣ nhau. Entropy: Nếu thuật toán nén
dựa trên các kết quả thống kê, thì entropy có thể đƣợc sử dụng nhƣ một
ràng buộc lý thuyế

ồn để giúp thực hiện sự

ữu ích. Vì vậy nó cung cấp sự
thể

ế

ợc bao nhiêu. Sự dƣ thừa: Trong các lĩnh vực nén nhất định, sự
ữa chiều dài mã trung bình và entropy củ

ồn có thể

đƣợc xem nhƣ là sự dƣ thừa. Trong một vài lĩnh vực khác, sự khác nhau

giữa phân phối xác suất chuẩn và phân phối xác suất đều đƣợc xác định
bằng sự dƣ thừa.
Số hóa bởi Trung tâm Học liệu - ĐHTN

/>

15

Độ phức tạp: Đơn vị đo lƣờng này làm việc tố

ứng minh lý

ặt thực tế. Độ phức tạp của dữ liệu nguồn trong

thuyế

một file có thể đƣợc đo bằng chiều dài chƣơng trình ngắn nhấ



liệu.
Kiể

: Kiểm tra hiệu suất của thuật toán nén bằng cách cài

đặt thuật toán và chạy các chƣơng trình với nhiều định dạng dữ liệu kiểm
tra.
ữ liệu bổ sung đƣợc thêm vào phiên bản đã

Chi phí phụ

đƣợc nén của dữ liệu để giả
hơn mặc dù nó nhỏ

. Chi phí phụ đôi khi có thể lớn
ợc lƣu trữ bằng cách nén.

Đố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ừ độ

ờng đƣợc sử dụng để mô tả

ữa file dữ liệu nguồn và file đƣợc giải nén. Sự khác biệt giữ
ồ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ó nhiều lý do thú vị để nghiên cứ

ực và đang đƣợc quan tâm.


ật

toán nén có thể đƣợc phân loại theo hai lớp đại cƣơng nhƣ sau: Nén tổn
hao và không tổn hao. Đặc tính nén có thể đƣợc đo bằng nhiều cách khác
nhau. [6], [7]

Số hóa bởi Trung tâm Học liệu - ĐHTN

/>


16

CHƢƠNG 2: TỔNG QUAN VỀ MÃ NÉN HUFFMAN
2.1. Mã tiền tố
Để mã hóa các kí hiệu (kí tự, chữ số, ...) ta thay chúng bằng các xâu
nhị phân, đƣợc gọi là từ mã của kí hiệu đó. Chẳng hạn bộ mã ASCII, mã
hóa cho 256 kí hiệu là biểu diễn nhị phân của các số từ 0 đến 255, mỗi từ
mã gồm 8 bít. Trong ASCII từ mã của kí tự „a‟ là 1100001, của kí tự „A‟ là
1000001. Trong cách mã hóa này các từ mã của tất cả 256 kí hiệu có độ dài
bằng nhau (mỗi từ mã 8 bít). Nó đƣợc gọi là mã hóa với độ dài không đổi.
Khi mã hóa một tài liệu có thể không sử dụng đến tất cả 256 kí hiệu.
Hơn nữa trong tài liệu chữ cái "a" chỉ có thể xuất hiện 1000000 lần còn chữ
cái "A" có thể chỉ xuất hiện 2, 3 lần. Nhƣ vậy ta có thể không cần dùng đủ
8 bít để mã hóa cho một ký hiệu, hơn nữa độ dài (số bít) dành cho mỗi kí
hiệu có thể khác nhau, kí hiệu nào xuất hiện nhiều lần thì nên dùng số bít
ít, ký hiệu nào xuất hiện ít thì có thể mã hóa bằng từ mã dài hơn. Nhƣ vậy
ta có việc mã hóa với độ dài thay đổi. Tuy nhiên, nếu mã hóa với độ dài
thay đổi, khi giải mã ta làm thế nào phân biệt đƣợc xâu bít nào là mã hóa
của ký hiệu nào. Một trong các giải pháp là dùng các dấu phẩy („,‟) hoặc
một kí hiệu quy ƣớc nào đó để tách từ mã của các kí tự đứng cạnh nhau.
Nhƣng nhƣ thế số các dấu phẩy sẽ chiếm một không gian đáng kể trong
bản mã. Một cách giải quyết khác dẫn đến khái niệm mã tiền tố.
Mã tiền tố là bộ các từ mã của một tập hợp các kí hiệu sao cho từ mã
của mỗi ký hiệu không là tiền tố (phần đầu) của từ mã một ký hiệu khác
trong bộ mã ấy.
Ví dụ: Giả sử mã hóa từ "ARRAY", tập các ký hiệu cần mã hóa gồm 3 chữ
cái „A‟, „R‟, „Y‟. Nếu mã hóa bằng các từ mã có độ dài bằng nhau ta dùng
ít nhất 2 bit cho một chữ cái chẳng hạn „A‟=00, „R‟=01, „Y‟=10. Khi đó
Số hóa bởi Trung tâm Học liệu - ĐHTN


/>

17

mã hóa của cả từ là 0001010010. Để giải mã ta đọc hai bit một và đối chiếu
với bảng mã.
Nếu mã hóa „A‟=0, „R‟=01, „Y‟=11 thì bộ từ mã này không là mã
tiền tố ví từ mã của „A‟ là tiền tố của từ mã của „R‟. Để mã hóa cả từ
ARRAY phải đặt dấu ngăn cách vào giữa các từ mã 0,01,01,0,11
Nếu mã hóa „A‟=0, „R‟=10, „Y‟=11 thì bộ mã này là mã tiền tố. Với
bộ mã tiền tố này khi mã hóa xâu “ARRAY" ta có 01010011.
2.2. Biểu diễn mã tiền tố trên cây nhị phân
Nếu có một cây nhị phân n lá ta có thể tạo một bộ mã tiền tố cho n
ký hiệu bằng cách đặt mỗi ký hiệu vào một lá. Từ mã của mỗi kí hiệu đƣợc
tạo ra khi đi từ gốc tới lá chứa ký hiệu đó, nếu đi qua cạnh trái thì ta thêm
số 0, đi qua cạnh phải thì thêm số 1.
Ví dụ: Cây 3 lá sau đây biểu diễn bộ mã của A,R,Y trong ví dụ trên
0

*

A

1
0

*

R


1

Y

Từ mã của „A‟ là 0, của „R‟ là 10, của „Y‟ là 11.
Giả sử ta có một bản tin gồm một dãy ký hiệu lấy trong một tập hợp
hữu hạn X. Biết rằng mỗi ký hiệu x trong bản tin xuất hiện theo một xác
suất cho trƣớc p(x). Ta muốn mã hóa các ký hiệu này thành các chuỗi bit
nhị phân sao cho chiều dài chuỗi mã hóa của bản tin là ngắn nhất.
+ Ví dụ: Xét bản tin gồm 1010 ký hiệu lấy từ tập X = {a,b,c,d,e,f}. Tần suất
xuất hiện các ký hiệu trong bản tin nhƣ sau:
Ký hiệu
a
Tần suất (%) 40

b
10

c
15

d
5

e
20

Số hóa bởi Trung tâm Học liệu - ĐHTN

/>

f
10


18

Ta có thể dùng xâu bit chiều dài cố định để mã hóa các ký tự. Chẳng hạn:
- Cách mã hóa thứ I:
Ký hiệu
Mã I

a

b

C

d

e

f

000 001 010 011 100 101

Cách mã hóa thứ nhất này cho chiều dài bản tin là : 3*1010
- Cách mã hóa thứ II:
Ký hiệu
Mã II


a
0

b
01

C
00

d
11

e
1

f
10

Cách mã hóa thứ hai này cho chiều dài bản tin là:
1010 * (1*40+2*10+2*15+2*5+1*20+2*10)/100 = 1,4*1010
Cách mã II rút ngắn bản tin hơn một nửa so với cách mã I. Tuy nhiên cách
này dễ dẫn đến nhầm lẫn, chẳng hạn dãy aa và ký hiệu c cùng một mã là
00.
- Cách mã hóa thứ III:
Ký hiệu
Mã III

a
1


b
C
d
e
f
010 011 0010 000 0011

Cách mã hóa thứ ba này cho chiều dài bản tin là:
1010(1*40+3*10+3*15+3*5+3*20+4*10)/100 = 2,3*1010
Cách mã III ngắn hơn cách mã I và có tính chất sau:
- Không có chuỗi mã ký hiệu nào là tiền tố (tức dãy con đầu) của chuỗi mã
của ký hiệu khác. Mọi mã thỏa mãn tính chất này gọi là mã tiền tố.
- Với mỗi mã tiền tố ta có thể xây dựng cây nhị phân sao cho mỗi lá ứng
với một ký hiệu và đƣờng đi từ gốc đến lá sẽ xác định mã của ký hiệu
tƣơng ứng nhƣ sau: Cạnh đi xuống con bên trái ứng với bít 0 và cạnh đi
xuống bên phải ứng với bit 1.
Số hóa bởi Trung tâm Học liệu - ĐHTN

/>

×