Kỹ thuật mã hóa Huffman với mô hình từ điển
Trang 1CHƯƠNG 0
GIỚI THIỆU 3
CHƯƠNG I LÝ THUYẾT TỔNG QUAN VỀ NÉN DỮ LIỆU 5
I KHÁI NIỆM VỀ NÉN DỮ LIỆU 5
II MỘT SỐ KHÁI NIỆM CƠ BẢN 5
II.1 Tỉ lệ nén (compression ratio) 5
II.2 Độ dư thừa số liệu 6
a Sự lặp lại của những kí tự 6
b Sự phân bố các kí tự 6
c Độ dư thừa vị trí 6
d Những mẫu sử dụng mật độ cao 6
II.3 Độ dài trung bình từ mã 7
II.4 Nén tổn hao và nén không tổn hao 7
a Nén tổn hao (lossy compression) 7
b Nén không tổn hao (lossless compression) 7
II.5 Nén số liệu = Mô hình hóa + Mã hóa 7
III LÝ THUYẾT VỀ MÃ H Ó A 8
III.1 Định nghĩa mã hóa 8
III.2 Một số khái niệm cơ bản 8
a Chiều dài từ mã 8
b Trọng lượng từ mã 9
c Khoảng cách mã 9
III.3 Phân loại mã 9
III.4 Một số phương pháp biểu diễn mã thông dụng 9
a Phương pháp liệt kê 9
b Phương pháp đồ hình kết cấu 10
c Phương pháp cây 10
III.5 Điều kiện để mã phân tách được 11
III.6 Mã có tính tiền tố (prefix) 12
III.7 Định lý về độ dài trung bình từ mã 12
IV MÃ THỐNG KÊ TỐI ƯU 14
IV.1 Mã Shannon-Fano 14
IV.2 Mã số học 16
IV.3 Mã Huffman 18
V MÔ HÌNH HÓA NGUỒN SỐ LIỆU 18
V.1 Mô hình thống kê 18
V.2 Mô hình từ điển 20
CHƯƠNG II PHƯƠNG PHÁP MÃ HÓA HUFFMAN VỚI MÔ HÌNH THỐNG KÊ 21
I PHƯƠNG PHÁP MÃ HÓA HUFFMAN 21
I.1 Mã Huffman tĩnh 21
a Cở sở nén số liệu của phương pháp mã hóa Huffman tĩnh 21
b Phương pháp tạo mã Huffman tĩnh 21
c Phương pháp giải mã Huffman tĩnh 26
d Ưu và nhược điểm của phương pháp mã hóa Huffman tĩnh với mô hình thống kê 27
CHƯƠNG III CÁC PHƯƠNG PHÁP NÉN THEO MÔ HÌNH TỪ ĐIỂN 28
I MÔ HÌNH TỪ ĐIỂN TĨNH VÀ MÔ HÌNH TỪ ĐIỂN ĐỘNG 29
II CÁC PHƯƠNG PHÁP NÉN LEMPEL VÀ ZIV 31
II.1 Phương pháp nén LZ77 31
Trang 2II.2 Phương pháp nén LZ78 34
CHƯƠNG IV KỸ THUẬT MÃ HÓA HUFFMAN ĐỘNG VỚI MÔ HÌNH TỪ ĐIỂN THÍCH ỨNG 38
I MÃ HÓA HUFFMAN ĐỘNG 38
II MÔ HÌNH TỪ ĐIỂN THÍCH ỨNG 38
II.1 Kỹ thuật nén với một cửa sổ hạn chế 39
II.2 Các cấu trúc dữ liệu hỗ trợ 39
a Bộ đệm quay vòng 39
b Bảng băm (Hash table) 40
III TIẾN TRÌNH NÉN 42
III.1 Quá trình mô hình hóa 42
III.2 Quá trình mã hóa 43
a Cấu trúc dữ liệu mô tả cây mã Huffman động 43
b Thủ tục mã hóa 45
IV TIẾN TRÌNH GIẢI NÉN 46
IV.1 Quá trình giải mã theo cây mã Huffman động 46
a Khởi tạo cây mã đầu tiên 46
b Thủ tục giải mã 46
IV.2 Quá trình giải nén 47
V NHẬN XÉT 48
CHƯƠNG V THỰC NGHIỆM 49
I SO SÁNH TỈ SỐ NÉN 49
I.1 Bảng so sánh tỉ số nén 50
I.2 Biểu đồ so sánh tỉ số nén 50
I.3 Nhận xét 51
II SO SÁNH TỐC ĐỘ NÉN 51
II.1 Bảng so sánh tốc độ nén 51
II.2 Biểu đồ so sánh tốc độ nén 51
II.3 Nhận xét 52
III SO SÁNH TỐC ĐỘ GIẢI NÉN 52
III.1 Bảng so sánh tốc độ giải nén 52
III.2 Biểu đồ so sánh tốc độ giải nén 53
III.3 Nhận xét 53
IV KẾT LUẬN 53
CHƯƠNG VI KẾT LUẬN 54
Trang 3CHƯƠNG 0
I GI ÏI THI Ơ Ệ U
Ngày nay, máy tính đã thâm nhập vào hầu hết các lĩnh vựccủa đời sống- xã hội Nói đến máy tính tức là nói đến hai vấnđề lớn : lưu trữ và xử lý thông tin
Với sự bùng nổ thông tin như hiện nay, việc lưu trữ và traođổi thông tin đã và đang đặt ra nhiều vấn đề cần phải giảiquyết, đó là làm sao để lưu trữ một cách tiết kiệm, hiệu quảvà trao đổi thông tin một cách nhanh chóng nhất Một giải pháp làtăng dung lượng của các thiết bị lưu trữ Tuy nhiên, điều này đòihỏi cao về mặt kỹ thuật phần cứng và chi phí khá tốn kém Nhưvậy, giải pháp này là không kinh tế Một giải pháp khác nhiềutriển vọng hơn và mang tính khả thi đã được đặt ra, đó là néndữ liệu Vậy nén dữ liệu là gì ?
Có thể hiểu một cách nôm na rằng, nén dữ liệu là quá trìnhlàm giảm dung lượng lưu trữ của dữ liệu mà vẫn bảo toànđược nội dung thông tin trước đó
Như vậy, việc nén dữ liệu sẽ đem lại nhiều lợi ích thiếtthực Đó là :
Tiết kiệm được không gian lưu trữ
Tăng tốc độ và giảm chi phí truyền dẫn trên mạng
Bảo mật được thông tin
Mặc dù dung lượng của các thiết bị lưu trữ ngày nay đã tăngđến tốc độ chóng mặt, có thể lên đến hàng chục Gigabytes,nhưng với những lợi ích như đã nêu trên, giải pháp nén dữ liệutrước khi lưu trữ, cũng như truyền dẫn qua mạng là điều khiếnchúng ta không thể không xét đến
Nói chung, nén dữ liệu là quá trình biến đổi một luồng các
kí hiệu thành một luồng các mã có kích thước nhỏ hơn ban đầu.Thông thường, một quá trình nén được tiến hành qua hai giaiđoạn: (1) Mô hình hóa, là giai đoạn tiên đoán về tần suất xuấthiện của các kí tự và / hoặc chuỗi kí tự của văn bản cần nén.(2) Mã hóa, là giai đoạn dựa trên mô hình với tần suất vừa đượcxác định để tạo ra từ mã tương ứng
Cùng với sự phát triển mạnh mẽ của lý thuyết thông tin, cókhá nhiều phương pháp mã hóa và mô hình hóa đã ra đời Trongcác phương pháp mã hóa, đáng chú ý nhất là mã hóa Huffman vàmã hóa số học Phương pháp mã hóa Huffman được D.A Huffmancông bố vào năm 1952 Phương pháp mã hóa này đơn giản, dễ xâydựng và cho thời gian mã hóa ngắn Phương pháp mã hóa sốhọc ra đời vào cuối những năm 70 Phương pháp này hướng đến
Trang 4việc tối ưu độ dài từ mã nên tương đối phức tạp hơn và vì vậythời gian mã hóa chậm hơn.
Kỹ thuật nén xử lý từng kí tự một của luồng kí hiệu đầuvào được gọi là nén với mô hình thống kê (Statistical model).Ngược lại, kỹ thuật nén xem xét mỗi lúc một chuỗi các kí tựtừ luồng nhập gọi là nén với mô hình từ điển (Dictionary-basedmodel)
Do đặc thù của mô hình từ điển và thực tế cũng cho thấy,với cùng một phương pháp mã hóa thì việc áp dụng mô hình từđiển sẽ cho hiệu quả nén cao hơn nhiều so với mô hình thống kê.Hầu hết các chương trình nén thương mại hiện hành đều sửdụng mô hình từ điển mà điển hình là các chương trình nén nổitiếng như NCZip, PKZip và WinZip
Trong một thời gian ngắn, việc nghiên cứu tất cả các kỹthuật nén dữ liệu là điều không khả thi, do vậy, trong cuốn luậnvăn tốt nghiệp này, tác giả chỉ đi sâu nghiên cứu về phương phápnén dữ liệu không tổn hao dựa trên kỹ thuật mã hóa Huffman(chủ yếu là mã Huffman động) và mô hình từ điển
Do năng lực bản thân và thời gian có hạn nên Đồ án còn khánhiều thiếu sót Xin nhận được những lời phê bình, góp ý quýbáu của các thầy cô và bạn đọc để đề tài có thể hoàn thiệnhơn trong tương lai
Cấu trúc Đồ án
Đồ án bao gồm 6 chương và chương trình Demo trên đĩa Nội dung như sau :
Chương 0 : Giới thiệu đề tài, vai trò và ý nghĩa của nó.
Chương I : Trình bày tổng quan về lý thuyết nén và giải nén
dữ liệu, làm nền tảng cho việc giải quyết vấn đề đã đặt ratrong Đồ án
Chương II : Trình bày phương pháp nén dữ liệu áp dụng kỹ
thuật mã hóa Huffman dựa trên mô hình thống kê
Chương III: Tìm hiểu một số phương pháp nén dựa trên mô
hình từ điển
Chương IV : Đi sâu nghiên cứu phương pháp nén dữ liệu áp
dụng kỹ thuật mã hóa Huffman động, dựa trên mô hình từ điểnthích ứng, làm nền tảng cho việc phát triển chương trình
Chương V : Trình bày kết quả thực nghiệm kiểm tra tính
đúng đắn, chính xác của chương trình và so sánh với một sốchương trình thương mại có cùng chức năng Trên cơ sở đó, đánhgiá ưu điểm và hạn chế của phương pháp nén được sử dụng
Chương VI : Kết luận, đánh giá những gì đã làm được,
những gì chưa đạt được và nêu hướng phát triển của đề tài
Trang 5CHƯƠNG I
II LÝ THUY Ế T T ØNG QUAN V Ö NÉN DỮ LI Ô Ê Ệ U
I KHÁI NIỆM VỀ NÉN DỮ LIỆU
Nén dữ liệu là quá trình làm giảm số liệu cần thiết mãvẫn bảo toàn được nội dung thông tin Số liệu và thông tin làkhông đồng nhất với nhau Số liệu chỉ là phương tiện để chuyểntải thông tin Với cùng một nội dung thông tin, ta có thể biểu diễnbằng các dữ liệu khác nhau
Các kỹ thuật nén dữ liệu, thông thường, dựa vào một trongcác đặc trưng sau:
Tính hữu hạn của tập kí hiệu.
Tần suất xuất hiện tương đối của các kí hiệu.
Ngữ cảnh xuất hiện của các kí hiệu.
Nén dữ liệu liên quan đến khái niệm thông tin trong lý thuyết
thông tin Lượng tin còn gọi là Entropy Lượng tin của một kí hiệu
được tính bằng (-log2P) với đơn vị là bit, trong đó P là xác suấtxuất hiện của kí hiệu đó Lượng tin của toàn bộ nguồn số liệuđược tính bằng tổng lượng tin của các kí hiệu thành phần
Lượng tin trung bình thống kê trên một kí hiệu được gọi là
Entropy của nguồn số liệu Entropy của một nguồn số liệu càng
cao thì lượng thông tin chứa đựng trong nó càng nhiều Shannon
là người đầu tiên chứng minh được sự tồn tại một giới hạnnén cho mỗi văn bản Giới hạn ấy chính là lượng tin của văn bản.Nhìn chung, quá trình nén và giải nén dữ liệu có thể được
mô tả tóm tắt theo sơ đồ sau:
Hình 1
II MỘT SỐ KHÁI NIỆM CƠ BẢN
II.1 Tỉ lệ nén (compression ratio)
Tỉ lệ nén là một trong những thông số quan trọng nhất củamọi phương pháp nén Có nhiều cách khác nhau để định nghĩa tỉlệ nén Thông thường, người ta định nghĩa tỉ lệ nén như sau:
Quá trình nén Quá trình giải nén
nguồn liệu
dữ c kích thướ
nén khi sau được thu
liệu dữ c kích thướ -
(
= nén lệ
Trang 6Tuy nhiên, cần phải thấy rằng, tỉ lệ nén cao chưa phải là tấtcả để đánh giá hiệu quả của một phương pháp nén Bởi vì còncó các yếu tố khác như: chi phí về thời gian, không gian và cả độphức tạp tính toán.
II.2 Độ dư thừa số liệu
Nguyên tắc chung của các phương pháp nén dữ liệu là loạibỏ các thông tin trùng lặp, các dữ liệu dư thừa đến mức tốithiểu có thể được Việc xác định bản chất các kiểu dư thừasố liệu rất có ích trong việc xây dựng các phương pháp nén phùhợp Nhìn chung, có bốn kiểu dư thừa chính trong dữ liệu :
a Sự lặp lại của những kí tự
Trong một nguồn dữ liệu, nhất là các tập tin ảnh, thườngcó những kí tự và chuỗi kí tự lặp lại nhiều lần liên tiếp nhau.Khi đó, nguồn dữ liệu có thể được mã hóa một cách cô đọnghơn bằng cách thay thế những dãy kí tự đó bằng mã của chúngvà số kí tự lặp lại Phương pháp nén với mô hình từ điển khaithác rất hiệu quả loại dư thừa này
b Sự phân bố các kí tự
Xét một chuỗi kí tự, ta thường thấy có một số kí tựxuất hiện với tần suất cao hơn những kí tự khác Như vậy, tacó thể giảm bớt lượng dữ liệu bằng cách mã hóa những kí tựxuất hiện thường xuyên với từ mã ngắn, những kí tự ít xuấthiện sẽ được mã hóa bằng những từ mã dài hơn
Kiểu dư thừa này đặc biệt phù hợp với phương pháp mãhóa Huffman
c Độ dư thừa vị trí
Có nhiều trường hợp, dữ liệu trong một nguồn số liệu cósự phụ thuộc lẫn nhau, do đó, nếu biết được kí hiệu xuấthiện tại một vị trí nào đó, ta có thể phỏng đoán trước một cáchhợp lý sự xuất hiện của các kí hiệu khác ở những vị trí khácnhau Ví dụ, ảnh biểu diễn trong một lưới hai chiều, một sốđiểm ở hàng dọc lại xuất hiện trong cùng vị trí ở các hàng khácnhau Như vậy, thay vì lưu trữ dữ liệu ta chỉ lưu lại vị trí hàngvà cột Phương pháp nén khai tháckiểu dư thừa này gọi làphương pháp mã hóa dự đoán
d Những mẫu sử dụng mật độ cao
Thông thường, trong các văn bản dạng text, sự tuần tự củanhững kí tự bào đó sẽ tái xuất hiện với tần suất tương đốicao, vì vậy, có thể biểu diễn bằng dãy bit ngắn hơn
Để đánh giá một thuật toán nén có hiệu quả hay không,người ta sẽ dựa vào cách mà thuật toán xử lý các kiểu dưthừa như trên Thực tế cho thấy rằng, hầu hết các kỹ thuậtnén đều không đủ mềm dẻo để xử lý tất cả các kiểu dư thừa
Trang 7Mỗi chiến lược nén áp dụng thường chỉ cứng nhắc cho từngkiểu số liệu mà thôi.
Độ dư thừa số liệu có thể định lượng bằng toán học VớiL1,L2 là hai lượng số liệu cùng được dùng để biểu diễn mộtlượng tin cho trước thì độ dư số liệu tương đối RD của tập sốliệu thứ nhất so với tập số liệu thứ hai là:
Trong đó L 1 /L 2 được gọi là tỉ lệ nén
II.3 Độ dài trung bình từ mã
Giá trị trung bình thống kê của tất cả các từ mã trong một
bộ mã được gọi là độ dài trung bình của một từ mã C.E
Shannon đã chỉ ra rằng: “Độ dài trung bình của một từ mã không
bao giờ nhỏ hơn entropy của nguồn số liệu được mã hóa” Do đó,
một bộ mã tối ưu (cho hiệu suất nén cao) là bộ mã có độ dài
trung bình của từ mã tiến gần đến Entropy của nguồn số liệu.
II.4 Nén tổn hao và nén không tổn hao
Có nhiều cách để phân loại các phương pháp nén Cách phânloại dựa vào nguyên lý nén chia các phương pháp nén thành haihọ chính :
a Nén tổn hao (lossy compression)
Nén tổn hao còn gọi là nén có mất mát thông tin Kỹ thuật
nén này chấp nhận mất mát một lượng thông tin nhất định đểthu được hiệu suất nén cao hơn, do vậy, sau khi giải nén, ta sẽkhông thu được dữ liệu gốc
Nén tổn hao thường được áp dụng cho các tập tin hình ảnh
hay âm thanh được số hóa Bởi vì đối với các tập tin thuộc loạinày thì việc mất mát một ít thông tin là điều có thể chấp nhậnđược
b Nén không tổn hao (lossless compression)
Nén không tổn hao còn gọi là nén chính xác hay nén không mất thông tin Đây là phương pháp nén mà sau khi giải nén ta thu
được một bản sao chính xác của dữ liệu gốc Phương pháp nénnày thường được áp dụng đối với các nguồn số liệu mà nộidung thông tin cần được bảo toàn như các văn bản dạng text, cácbảng tính hay là cơ sở dữ liệu,
Dạng nén mà ta nghiên cứu trong đồ án này là dạng nén
không tổn hao.
II.5 Nén số liệu = Mô hình hóa + Mã hóa [2]
Nói chung, nén số liệu là chuyển đổi một luồng các kí hiệuthành một luồng các từ mã tương ứng Nếu hiệu ứng nén xảy
2 1
11
L L
-=
RD
Trang 8ra thì luồng các từ mã sẽ nhỏ hơn luồng các kí hiệu ban đầu.Việc quyết định đưa ra một từ mã nhất định cho mỗi kí hiệu
hoặc một tập kí hiệu dựa trên một mô hình Mô hình chẳng qua chỉ là một tập hợp số liệu và các nguyên tắc được sử dụng
để xử lý các kí hiệu từ luồng nhập và xuất ra các từ mã Mô hình có nhiệm vụ xác định xác suất xuất hiện của từng kí tự
và/hoặc chuỗi kí tự và bộ phận mã hóa sẽ tạo ra các từ mãdựa trên các xác suất đó
Mô hình hóa và mã hóa là hai khái niệm hoàn toàn tách biệt
nhau Thế nhưng, chúng ta vẫn hay dùng thuật ngữ “mã hóa” đểnói đến cả quá trình nén số liệu, mặc dù, thực chất đó chỉ mớilà một giai đoạn của quá trình đó Ví dụ, chúng ta vẫn hay dùng
các thuật ngữ “mã hóa Huffman”, “mã hóa số học” để nói đến
các kỹ thuật nén số liệu, trong khi đó chỉ là các phương pháp mãhóa được sử dụng cùng với một mô hình nào đó để nén sốliệu
Có rất nhiều cách để mô hình hóa nguồn số liệu lại có thểcùng sử dụng một phương pháp mã hóa để tạo ra các từ mã
Ví dụ, chúng ta có thể dùng phương pháp mã hóa Huffman cho cảhai mô hình thống kê và mô hình từ điển để nén số liệu
Với phương pháp mã hóa Huffman, ta thấy một quá trình nénsố liệu đầy đủ được biểu diễn như sau :
Hình 2.
III LÝ THUYẾT VỀ MÃ HÓA [7]
Như đã nói, nén số liệu là quá trình biến đổi một luồng cáctừ mã thành một luồng các từ mã Quá trình giải nén sẽ xử lýluồng các từ mã đó để khôi phục lại nguồn số liệu ban đầu.Như vậy, việc tìm hiểu về mã nén dữ liệu là điều cần thiết
III.1 Định nghĩa mã hóa
Mã hóa nguồn tin X theo bộ mã M là phép ánh xạ 1:1 biến
đổi một tin xi X thành một tổ hợp các kí hiệu của bộ mã M
Nguồn X = {x1, x2, ,xn}
Bộ mã M = {m1, m2, ,mk}
Với k là cơ số của bộ mã
Ví dụ, với mã nhị phân k = 2
Nếu tin xi được mã hóa thành mr1, mr2, ,mrl (l là số kí hiệucủa bộ mã dùng để biểu diễn xi và l cũng là độ dài từ mã)
Các xác suất
Luồng
Các ký
Mô hình thống kê với mã hóa
Huffman
Trang 9Ví dụ
X = {x1, x2, ,x4}
Bộ mã nhị phân M = {0, 1}
Mã hóa x1 = 00, x2 = 01, x3 = 10, x4 = 11
III.2 Một số khái niệm cơ bản
a Chiều dài từ mã
Chiều dài từ mã là số kí hiệu của bộ mã dùng để mã hóacho từ mã đó
b Trọng lượng từ mã
Trọng lượng từ mã là tổng số các kí hiệu khác 0 của từmã
Ví dụ: Từ mã 1011010 có trọng lượng là 4.
c Khoảng cách mã
Khoảng cách mã d là số kí hiệu khác nhau tính theo vị trí tương ứng của hai từ mã có chiều dài bằng nhau W 1 , W 2
d(W 1 , W 2 ) = w(W 1 W 2 ), với là phép cộng modul-2.
Khoảng cách của một bộ mã là khoảng cách mã nhỏ nhấtcủa hai từ mã bất kỳ trong bộ mã đó
III.3 Phân loại mã
Dựa vào các đặc điểm của mã, người ta phân mã ra thànhnhiều loại khác nhau Sau đây là một số cách phân loại điển hình:
Phân loại theo chiều dài từ mã
Mã có chiều dài không đổi
Mã có chiều dài thay đổi
Phân loại theo trọng lượng từ mã
Mã có trọng lượng thay đổi
Mã có trọng lượng cố định
Phân loại theo hiệu suất thông tin
Mã tối ưu
Mã chưa tối ưu
Phân loại theo cơ số của bộ mã
Có thể tạo ra một bộ mã có cơ số tùy ý Mã nhị phân (có cơsố 2) là phổ biến nhất
Phân loại theo mục đích sử dụng mã
Mã sô.ú
Mã kí tự
Trang 10III.4 Một số phương pháp biểu diễn mã thông dụng
Có nhiều phương pháp để biểu diễn mã Mỗi cách đều cónhững ưu điểm và nhược điểm riêng Tùy theo mục đích, ta cóthể chọn cách biểu diễn cho phù hợp
b Phương pháp đồ hình kết cấu
Phương pháp này biểu diễn mã bằng một cây mã rút gọnbao gồm các nút và các nhánh có hướng Mỗi vòng kín (bắt đầutại nút gốc, đi theo các nhánh theo chiều mũi tên, qua các núttrung gian và kết thúc tại nút gốc) sẽ biểu diễn cho một từ mã.Thứ tự giá trị các nhánh trên đường đi chính là thứ tự giá trịcác kí hiệu
Ví dụ : Đồ hình kết cấu của bộ mã 10,11,011,0101,0100.
Kí hiệu v là toán tử OR, các nút được đánh số theo thứ tự
Từ một nút nhánh có thể phát đi nhiều nhất là m nhánh(ứng với cơ số m của mã) Mỗi nhánh biểu diễn cho một từ mã
2 1
GỐ C
3 4
0
1 1
0 0v1
1 0v1
Đồ hình kết cấu của bộ mã
10,11,011,0101,0100
Trang 11Từ mã đó có thứ tự các trị kí hiệu đi từ gốc, qua các nútnhánh và dừng lại ở nút lá tương ứng của nhánh.
Dựa vào cây mã, chúng ta có thể nhận biết mã đã cho làmã đều (các nút lá có cùng bậc), hay không đều, mã đầy hay vơi.Mã là đầy khi mọi nút nhánh bậc trước các nút lá đều có mnhánh
Ví dụ : Cho bộ mã 00, 01, 11, 1010, 1011 Cây mã biểu diễn
cho bộ mã này là:
Hình 4.
III.5 Điều kiện để mã phân tách được
Mã được gọi là có tính phân tách nếu như khi nhận được một chuỗi kí hiệu trong quá trình tạo mã, chúng ta có thể tách
ra được các thành phần cơ bản là các từ mã và cách tách đó là đúng đắn và duy nhất (vì nếu không, bộ giải mã có thể sẽ
nhầm lẫn trong quá trình làm việc)
Để có tính phân tách được, bộ mã phải thỏa mãn điều kiệncần và đủ sau: Bất kỳ dãy các từ mã nào của bộ mã cũng khôngđược trùng với một dãy từ mã khác của cùng bộ mã
Độ chậm giải mã :
Độ chậm giải mã là số kí hiệu nhận được cần thiết đểcó thể phân tách được thành các từ mã
Đối với bộ mã phân tách được, độ chậm giải mã là hữuhạn, nhưng cũng có trường hợp là vô hạn Đối với trường hợp
vô hạn, bộ mã có thể xem là không phân tách được
Để kiểm tra một bộ mã có tính phân tách hay không, người taxây dựng bảng thử mã phân tách và qua đó, xác định độ chậmgiải mã Các bước xây dựng bảng thử mã phân tách :
1 Sắp xếp các từ mã thành một cột Cột này được đánh số 1.
mức 1 (n = 1)
mức 2 (n = 2)
mức 3 (n = 3)
mức 4 (n = 4)
Cây mã nhị phân cho bộ mã 00,01,11,1010,1011
Trang 122 Đối sánh các từ mã ngắn với các từ mã dài hơn trong cột 1, nếu từ mã ngắn trùng với phần đầu của từ mã dài hơn thì lấy phần còn lại của từ mã dài ghi vào cột thứ hai.
3 Lặp lại bước 2, với cột k là cột chứa kết quả đối sánh giữa cột (k-1) với cột (k-2) Tiếp tục thực hiện bước 3 cho đến khi cột k trở nên trống rỗng.
Để mã có tính phân tách, điều kiện cần và đủ là: Trong cộtcó chỉ số k >= 2 không có một tổ hợp nào trùng với các từ mãtrong cột 1
Ví dụ : Cho bộ mã 01, 11, 001, 1001, 1011 Ta có bảng thử
mã phân tách:
Cột 1 Cột 201
1100110011011
Ta có độ chậm giải mã bằng 0 vì cột 2 trống rỗng Như vậy, bộ mã đã cho có tính phân tách.
Độ chậm giải mã có thể được đánh giá qua bảng thử mã
Mã có khả năng phân tách được khi và chỉ khi bất kỳ một tổ
hợp mã nào cũng không trùng với phần đầu của bất kỳ một tổ hợp mã khác trong cùng bộ mã.
III.6 Mã có tính tiền tố (prefix)
Phần tiền tố (prefix) của một từ mã có độ dài l là một bộ
phận của từ mã đó sau khi bỏ đi k kí hiệu cuối cùng (0 < k < l).
max min
2
1 2
1
n k T n
Trang 13Ví dụ : Từ mã 1001101 có các tiền tố là: 100110, 10011,
1001, 100, 10 và 1.
Định nghĩa
Một bộ mã được gọi là có tính chất tiền tố nếu mọi từ
mã thuộc bộ mã đều không phải là phần đầu của một từ mã khác trong cùng bộ mã.
Nhờ vào tính chất tiền tố này mà mã có tính prefix thường
được sử dụng để làm mã nén dữ liệu Ta có thể nhận thấyrằng, khi biểu diễn mã bằng cây mã, mã có tính chất tiền tố khi
các từ mã chỉ là nút lá.
III.7 Định lý về độ dài trung bình từ mã
Cho nguồn tin u = {ui} với i = 1 n và các xác suất p(ui) tươngứng Mã hóa các tin ui bằng mã nhị phân và giả sử các kí hiệucủa mã có các xác suất p(xi) bằng nhau: p(xi) = p(X) = hằng số
Ta có lượng tin trung bình bằng lượng tin của một kí hiệu mã vàđạt giá trị cực đại:
I(xi) = I(x) = log22 = 1 (bit / kí hiệu)
Nếu ni là chiều dài của mã nhị phân mã hóa tin ui thì lượngtin chứa trong từ mã là ni bit Ở đây, lượng tin trung bình chứatrong một từ mã bằng độ dài trung bình của các từ mã
Để tin tức không bị hao hụt qua quá trình mã hóa, lượng tintrung bình của từ mã phải không nhỏ hơn lượng tin trung bình củamột tin trong nguồn tin Về số đo, lượng tin trung bình của một
tin bằng với Entropy của nguồn tin E(u) Để phép mã hóa là đúng,
điều kiện sau đây phải được thỏa mãn :
E(u) n tblogm hay E(u) ntb
Ta có định lý : Độ dài trung bình của một từ mã không bao giờ
bé hơn tỉ số Entropy của nguồn tin được mã hóa chia cho lượng tin trung bình cực đại của một kí hiệu mã.
E(u) chính là giới hạn dưới của độ dài trung bình ntb của một từmã
Như vậy, độ dài trung bình ntb của một từ mã bằng với
Entropy của nguồn tin khi và chỉ khi độ dài n i của một từ mã bất kỳ bằng với lượng tin riêng I(u i ) của tin mà nó mã hóa.
I(ui) được tính bằng -log(p(ui))
Bây giờ, chúng ta đi xác định giới hạn trên của độ dài trung bìnhcủa từ mã
Vì ni là một số nguyên, mà I(ui) thường không phải là một sốnguyên nên để đạt được một bộ mã có độ dài trung bình nhỏnhất thì độ dài của mỗi từ mã phải thỏa mãn điều kiện sau:
n i
i i i
i n
i
i
u p
1
1 ) ( ) ( )
( )
( ) (
Trang 14Lấy trị trung bình thống kê hai vế của bất đẳng thức, ta được :
Một bộ mã được gọi là bộ mã thống kê tối ưu khi nó có độdài trung bình thỏa mãn hai giới hạn nêu trên Đặc điểm của mãthống kê tối ưu là :
Xác suất xuất hiện của các kí hiệu trong từ mã không phụthuộc vào sự có mặt của các kí hiệu ra trước
Các kí hiệu khác nhau của bộ mã phải cùng xác suất, chẳnghạn với mã nhị phân: p(0) = p(1) = 1/2 Có như vậy thì lượngtin của mỗi kí hiệu mới đạt giá trị cực đại
Qua các nhận xét trên, ta thấy rằng độ dài trung bình từ mã
tối thiểu là tiêu chuẩn của mã thống kê tối ưu.
IV MÃ THỐNG KÊ TỐI ƯU
Như đã nói, tiêu chuẩn của mã thống kê tối ưu là chiều dàitrung bình từ mã tối thiểu Do xác suất xuất hiện của các tintrong nguồn tin là khác nhau nên việc dùng các từ mã ngắn đểmã hóa cho các tin có tần suất xuất hiện cao và ngược lại,dùng các từ mã dài để mã hóa cho các tin có xác suất xuất hiệnthấp sẽ làm cho số kí hiệu cần thiết để mã hóa nguồn tin giảm
đi Nguyên tắc cơ bản của mã thống kê tối ưu là dựa trên cơ sởđộ dài từ mã ni (tỉ lệ nghịch với xác suất xuất hiện pi ), tức làcác tin có xác suất xuất hiện thấp sẽ mã hóa bằng các từ mãdài và ngược lại
Công thức sau đây dùng để đánh giá mức độ tối ưu của mãthống kê tối ưu:
Trong đó:
D : độ tối ưu của mã.
L dmin : độ dài từ mã tối thiểu của bộ mã đều cần dùngđể mã hóa
IV.1 Mã Shannon-Fano
Vào những năm 1940, những năm đầu phát triển của ngànhLý thuyết Thông tin, ý tưởng phát triển một phương pháp mới để
i n p L
L: độ dài từ mã trung bình của bộ mã, được tính như sau
Trang 15mã hóa dữ liệu đã bắt đầu xuất hiện, sau khi các nhà nghiên
cứu đã khám phá ra Entropy và độ dư thừa số liệu.
Phương pháp mã hóa đầu tiên được nhiều người biết đến
vào cuối những năm 1940 là phương pháp mã hóa Shannon-Fano Phương pháp này được hai nhà nghiên cứu Claude Shannon và
R.M Fano đưa ra gần như đồng thời Kỹ thuật mã hóa này dựa
trên tần suất xuất hiện của mỗi ký tự trong nguồn số liệucần được mã hóa Từ bảng chứa các tần suất đó, bảng mã sẽđược xây dựng dựa vào các tính chất quan trọng sau:
Các mã khác nhau có các bit biểu diễn khác nhau.
Kí tự có tần suất xuất hiện càng cao thì mã càng ngắn ( ít bit ) và ngược lại.
Các mã có độ dài bit khác nhau.
Mã sẽ được xây dựng theo cấu trúc cây nhị phân, dựa vào thuậttoán sau:
Thuật toán xây dựng mã Shannon-Fano :
Vào : Bảng tần số xuất hiện của tất các kí tự có mặt trong
nguồn số liệu
(Bảng đã được sắp xếp theo thứ tự tăng dần hoặcgiảm dần của tần số )
Ra : Cây nhị phân biểu diễn mã.
Bước 1 Tách bảng thành hai bảng con sao cho hiệu giữa tổng
các tần số trong mỗi bảng con là nhỏ nhất
Bước 2 Bảng con phía trên được gán giá trị nhị phân 0, bảng
con phía dưới được gán trị nhị phân 1
Bước 3 Tiếp tục thực hiện tuần tự hai bước 1 và 2 cho
mỗi bảng con được tách ra cho đến khi các bảng thành phầnkhông thể phân chia được nữa
Nguyên tắc chính là sử dụng phương pháp đệ qui để xây dựngcây mã
Ví dụ : Giả thiết ta có bảng sau :
Trang 16Chúng ta có cây nhị phân tương ứng :
Hình 5 Một ví dụ về cây nhị phân cho mã
Shannon-Fano
Ta qui ước rằng, từ một nút trên cây mã, rẽ sang nút con trái(nếu có) sẽ tương ứng với giá trị 0, rẽ sang nút con phải sẽ tươngứng với giá trị 1 Từ mã của mỗi kí tự sẽ được xác định bằngcách tích lũy các giá trị nhị phân khi đi từ nút gốc qua các nútnhánh cho đến nút lá chứa kí tự đó Như vậy, chúng ta có bảngmã sau:
Kí tự Tần
số Từ mã Độ dài(bits)
Lần tách 1
Lần tách 1 Lần tách 2
Lần tách 3 Lần tách 4
Lần tách 5 Lần tách 6
Trang 17 Mã Shannon-Fano là mã có độ dài từ mã thay đổi.
Trên cây nhị phân biểu diễn mã, kí tự nào có tần số xuấthiện cao thì sẽ nằm gần gốc, do vậy nó có từ mã ngắn.Ngược lại, kí tự nào có tần số xuất hiện thấp thì sẽnằm xa gốc và sẽ có từ mã dài Điều này hoàn toàn phùhợp với nguyên lý của kỹ thuật nén dữ liệu
Độ dài từ mã của mã Shannon-Fano là một số nguyên các bít
IV.2 Mã số học
Như đã nói, độ dài từ mã của mã Shannon-Fano phải là mộtsố nguyên các bít Người ta đã cải tiến nhược điểm này bằngcách đưa ra một loại mã khác, đó là mã số học Phương phápmã hóa số học hoàn hảo hơn các phương pháp mã hóa khác ởchỗ nó không tạo ra một từ mã đơn lẻ cho mỗi kí hiệu mà nóchỉ tạo ra một từ mã duy nhất cho toàn bộ nguồn số liệu.Nghĩa là một kí hiệu có thể được mã hóa bằng 3.5 bít
Nguyên tắc chính của phương pháp mã hóa này là mã hóatoàn bộ luồng số liệu thành một số Mỗi kí tự / xâu kí tự củaluồng nhập sẽ được biến đổi thành một số thực có giá trịthuộc nửa khoảng [0;1) Việc biến đổi này tuân theo ánh xạ 1-1.Đối với phương pháp này, trước hết, chúng ta cần lập bảngthống kê tần số xuất hiện của các kí tự Sau đó gán cho mỗi kítự một khoảng biến thiên mà ta gọi là hạng của kí tự đó
Ví dụ :
Chúng ta cần mã hóa chuỗi “MICROSOFT!” Bảng thống kê tần
suất như sau :
Kí tự Tần sốxuất
hiện
Khoảng biến thiên
Trang 18Dựa vào bảng trên, chúng ta lập bảng thể hiện các cận trên,cận dưới và hạng của các kí tự trong chuỗi:
Kí tự Tần sốxuất
hiện
Cận dưới Cậntrên Hạng
Msg : chuỗi kí tự cần mã hóa.
Can_duoi, Can_tren: hai mảng chứa các cận dưới và cận trên
của các kí tự
Ra : Mã của chuỗi kí tự đó.
Ta qui ước rằng, Can_duoi[i] là cận dưới của kí tự thứ i trong thông điệp Tương tự cho trường hợp Can_tren[i]
Begin
Canduoi :=0.0;
Cantren :=1.0;
For i:=1 to length(Msg) do begin
Hang := Cantren - Canduoi;
Cantren :=Canduoi + Hang*Can_tren[i];
Canduoi :=Canduoi + Hang*Can_duoi[i];
V MÔ HÌNH HÓA NGUỒN SỐ LIỆU
Như ta đã biết, Entropy của nguồn số liệu phụ thuộc vào
xác suất, trong khi đó, xác suất lại phụ thuộc vào mô hình Dođó, xác suất sẽ thay đổi nếu như chúng ta thay đổi mô hình và
Entropy cũng biến đổi theo Như vậy, có thể thấy rằng hiệu quả
nén phụ thuộc rất nhiều vào mô hình
Trang 19Nhìn chung, quá trình nén không tổn hao được thực hiện
dựa vào một trong hai kiểu mô hình khác nhau: mô hình thống
kê (Statistical) và mô hình từ điển (Dictionary-based) Nén theo
mô hình thống kê sẽ mã hóa mỗi lúc một kí hiệu dựa vào tầnsuất xuất hiện của nó Nén theo mô hình từ điển sẽ mã hóa mỗilúc một chuỗi kí hiệu chỉ bằng một từ mã Như vậy, vai tròcủa mô hình là vô cùng quan trọng Một mô hình tốt sẽ cho hiệuquả nén cao và ngược lại
V.1 Mô hình thống kê
Dạng đơn giản nhất của mô hình này, đúng như tên gọi củanó, là thống kê các khối số liệu điển hình nào đó để có đượcmột bảng tĩnh liệt kê các giá trị tần suất Dựa vào bảng này,một cây mã tĩnh được xây dựng sẵn và lưu giữ để có thể sửdụng nhiều lần Một mô hình như thế được gọi là mô hìnhthống kê tĩnh (Static statistical model)
Rõ ràng, việc áp dụng một mô hình tĩnh cho nhiều loại sốliệu khác nhau là không tối ưu Bởi vì nếu số liệu đầu vào khôngtương hợp với mô hình thì hiệu quả nén sẽ kém đi, đôi khi còn phátsinh hiện ứng nở số liệu
Chúng ta có thể khắc phục nhược điểm trên bằng cách xâydựng mô hình tĩnh riêng cho từng kiểu số liệu Tuy nhiên, mộtvấn đề khác lại nảy sinh, đó là chúng ta phải gởi kèm mộtlượng số liệu thống kê nhất định (cấu trúc cây mã) đi theoluồng từ mã để phục vụ cho việc giải mã sau này Với mô hìnhbậc 0, lượng số liệu thống kê trên là không đáng kể (khoảng 256bytes), nhưng với mô hình bậc cao hơn, lượng số liệu đó quá lớn(chẳng hạn với mô hình bậc 1, con số đó xấp xỉ bằng 256x256 =
64 KB)
(Bậc của mô hình thống kê : Xác suất xuất hiện của một
kí hiệu là một khái niệm tương đối và không cố định, bởi vì nócó thể thay đổi tùy theo mô hình được thiết lập Một mô hìnhthống kê xác định xác suất xuất hiện của một kí hiệu dựa vàocác kí hiệu đứng trước nó cho ta các mô hình với các bậc khácnhau Các kí hiệu đứng trước này tạo thành ngữ cảnh (context)của mô hình Bậc của mô hình thống kê chính là số kí hiệu chứatrong ngữ cảnh đó Ví dụ, nếu số kí hiệu đứng trước mà ta xemxét đến là 0 thì ta có mô hình thống kê bậc 0.)
Chính vì những hạn chế trên mà người ta chỉ tập trung phát
triển mô hình thống kê thích ứng, còn gọi là mô hình thống kê
động (Dynamic statistical model) Với mô hình này, số liệu thống kê
đối với nguồn số liệu không cần phải có và gởi đi kèm luồng từmã mà sẽ được tích lũy và liên tục sửa đổi ngay trong mỗi quátrình mã hóa hoặc giải mã
Xuất từ mã
Cập nhập
mô hình
Mô hình
Đọc một ký hiệu
Mã hóa ký hiệu
Nguồn
số
liệu
Luồng từ mã
Mã hoá theo mô hình thống kê thích ứng [2]
Đọc một từ mã
nhập
mô hình
Xuất ký hiệu
Trang 20Hình 6.
Hình 7.
Trong cả hai quá trình mã hóa hoặc giải mã, cần chú ý rằng,bộ phận “cập nhật mô hình” phải làm việc chính xác như nhau.Trong quá trình mã hóa, khi một kí hiệu được đọc vào nó sẽđược mã hóa theo mô hình hiện thời, ngay sau đó, mô hình sẽđược cập nhật dựa vào kí hiệu đó Tương tự cho quá trình giảimã, khi một từ mã được đọc, nó được giải mã theo mô hìnhhiện tại, sau đó, mô hình sẽ được cập nhật dựa vào kí hiệuvừa được giải mã
Có thể nhận thấy rằng, khi mô hình mới bắt đầu hoạtđộng, hiệu ứng nén chưa thể xuất hiện ngay, bởi vì nó chưa cómột thông tin gì về nguồn số liệu đầu vào Hiệu ứng nén chỉthấy rõ khi một lượng kí hiệu đủ nhiều đã được xử lý Ưuđiểm của mô hình thống kê động là nó có thể thích ứng với hầuhết các loại dữ liệu
V.2 Mô hình từ điển (Dictionary-based)
Đặc điểm chung của các mô hình thống kê là mã hóa (và giảimã) mỗi lúc một kí hiệu Còn các mô hình từ điển thì tạo mãtheo một cơ chế hoàn toàn khác biệt Nguyên tắc của chúng làtạo một ánh xạ từ một chuỗi kí hiệu thành mã sao cho kíchthước của mã nhỏ hơn kích thước của chuỗi kí hiệu đó Khi mãhóa, dữ liệu được đọc vào và thuật toán tìm xem có nhóm kíhiệu tương hợp nào xuất hiện trong từ điển hay không Nếu có,nó sẽ xuất ra một mã ánh xạ đến nhóm kí hiệu đó Dữ liệuđầu vào càng tương hợp với các nhóm kí hiệu trong từ điểnhoặc kích thước nhóm kí hiệu được ánh xạ càng lớn thì hiệuquả nén càng cao Ở đây, vai trò của mô hình hóa là cực kì quantrọng, còn mã hóa chỉ đóng vai trò thứ yếu
Thực tế cho thấy, so với các kỹ thuật nén sử dụng mô hìnhthống kê, các kỹ thuật nén áp dụng mô hình từ điển cho mộthiệu quả nén cao hơn nhiều, cả về tỉ số nén, tốc độ nén và giảinén Đó là lý do chúng được sử dụng phổ biến hiện nay
Trang 21Mô hình từ điển được phân thành hai loại: mô hình từ điển
tĩnh và mô hình từ điển động (còn gọi là mô hình từ điển thích ứng).
Ở các sách báo khoa học, chúng ta thường thấy có danh sáchcác tài liệu tham khảo, trong đó, mỗi tên sách tham khảo đượctượng trưng bởi một con số nằm trong ngoặc vuông Mỗi khimuốn dẫn chứng tên tài liệu tham khảo nào đó đã có trong danhsách, người viết chỉ việc thay bằng con số tượng trưng tươngứng Điều này rõ ràng là có tác dụng giảm bớt kích thước củanguồn số liệu Mô hình từ điển tĩnh cũng có dạng như thế Ởđây, từ điển tĩnh đóng vai trò như danh sách các tài liệu thamkhảo nói trên Tuy vậy, một điểm bất lợi của mô hình này là,cũng giống như ở mô hình thống kê tĩnh, từ điển phải được gởikèm theo số liệu đã được mã hóa Điều này làm kích thước củadữ liệu nén tăng lên
Mô hình từ điển động được đưa ra nhằm khắc phục nhượcđiểm trên Mô hình từ điển động tựa như cách viết tắt mà tavẫn thường thấy trong sách báo: muốn viết tắt một cụm từnào đó thì ngay trong lần xuất hiện đầu tiên của nó, người ta sẽviết kèm theo cụm ký tự viết tắt trong cặp ngoặc đơn, và kểtừ đó, mỗi khi nó xuất hiện thì ta lại thay thế bằng cụm từviết tắt tương ứng
CHƯƠNG II
III PHƯ NG PHÁP MÃ HÓA HUFFMAN V ÏI M HÌNH Ơ Ơ Ô
TH Ố NG K Ê
I PHƯƠNG PHÁP MÃ HÓA HUFFMAN
Phương pháp mã hóa Huffman được D.A.Huffman đưa ra vào
năm 1952 Phương pháp mã hóa này đã khởi đầu cho sự pháttriển của các kỹ thuật nén số liệu dựa trên mô hình thống kê.Từ đó đến nay, kỹ thuật mã hóa Huffman đã có nhiều cải tiến,
cho ra đời nhiều loại mã Huffman khác nhau như : mã Huffman sửa
đổi (Modified Huffman codes), mã Huffman cụt (Truncated Huffman
Trang 22codes), mã Huffman thích ứng (Adaptive Huffman codes) và mã dịch Huffman (Shift Huffman codes).
Mã Huffman được D.Huffman đưa ra chính là mã Huffman tĩnh
I.1 Mã Huffman tĩnh
a Cở sở nén số liệu của phương pháp mã hóa
Huffman tĩnh
Phương pháp mã hóa Huffman là phương pháp dựa vào mô
hình thống kê Dựa trên nguồn số liệu, người ta đi thống kê tần
suất xuất hiện của các kí tự Trên cơ sở bảng tần suất được
xây dựng, người ta biểu diễn các kí tự có tần suất thấp bằngcác từ mã dài, các kí tự có tần suất cao bằng các từ mãngắn Nói một cách khác, các kí tự có tần suất xuất hiện càngcao thì được biểu diễn bằng mã càng ngắn và ngược lại Độdài của từ mã được tính theo bit Với cách thức này, ta đã làmgiảm độ dài trung bình của từ mã bằng cách dùng chiều dàibiến đổi
b Phương pháp tạo mã Huffman tĩnh
Dựa vào bảng thống kê tần suất, chúng ta đi xây dựng mộtcây không cân bằng (cây có một số nhánh không dài bằng nhau).Mức độ không cân bằng của cây phụ thuộc vào tần suất xuấthiện của các kí tự Một cây như vậy được gọi là cây mãHuffman
Cây mã Huffman là một cây nhị phân có các nhánh được gáncho giá trị nhị phân 0 hoặc 1 Điểm tận cùng của một nhánhđược gọi là nút lá Mỗi nút lá được gán cho một kí tự cầnmã hóa và tần số xuất hiện của kí tự đó được gọi là trọnglượng của nút lá tương ứng Nút gốc chính là gốc của cây, cònđiểm rẽ của một nhánh được gọi là nút nhánh
Xuất phát từ một nút nhánh, nhánh rẽ bên trái được gán giátrị 0, và nhánh rẽ bên phải được gán giá trị 1 Từ mã của một kítự được xác định bằng cách duyệt từ trên xuống, xuất pháttại nút gốc và kết thúc tại nút lá tương ứng với kí tự đó Trongquá trình duyệt, các bít của từ mã được tích lũy dần theo giá trịứng với các nhánh phải đi qua
Ví dụ :
Cây mã Huffman mã hóa cho chuỗi “BARBADIA” là:
Nút lá
Nút lá
Nút lá
Nút nhánh
Nút nhánh
Nút nhánh
Trang 23Hình 8 Một ví dụ về cây mã
Thuật toán xây dựng cây mã Huffman tĩnh
Vào : Bảng thống kê tần suất của các kí tự trong nguồn số
liệu
Ra : Cây mã Huffman.
Bước 2. Nút cha của hai nút này được tạo ra với trọng
lượng bằng tổng trọng lượng của hai nút con
nút Đánh dấu nút cha là “tự do”, hai nút con là “đã xét”
cha, nhánh con phái được gán bít mã 1
còn một nút tự do Nút này chính là nút gốc của cây mãHuffman
Bước 6. Tổ hợp tất cả các nút lại với nhau để được
một cây mã duy nhất
Ta thấy thuật toán trên thực hiện theo nguyên tắc “bớt hai,thêm một”, bớt đi hai nút tự do có trọng lượng nhỏ nhất và thêmvào một nút có trọng lượng bằng tổng trọng lượng của hai nútvừa loại bỏ, cho đến khi chỉ còn lại duy nhất một nút
Nhận xét :
Các nút có trọng lượng càng lớn thì càng nằm gần gốc vàngược lại Như vậy, các kí tự có tần số xuất hiện caosẽ được mã bằng ít bít hơn
Nhờ vào tính chất tiền tố (prefix) mà mã Huffman có tính giải
mã tứcthì (immediately decodeable) Nghĩa là, khi ta nhận
được một chuỗi bít là từ mã của một kí tự, nó có thểđược giải mã ngay lập tức mà không cần phải xét xem dãybít đó có phải là tiền tố của một từ mã khác dài hơn không
Trang 24Từ mã của một kí tự được xác định như sau: Xuất phát từnút lá tương ứng với kí tự đó, đi ngược lên theo các nhánh đểđến nút gốc của cây Trên đường đi, qua nhánh nào ta tích lũy lạigiá trị của nhánh đó (0 hoặc 1) Cuối cùng, đảo ngược chuỗi bíttích lũy được ta có từ mã cần tìm.
Một số tính chất của cây mã Huffman
Tính chất 1 Chỉ có một con đường duy nhất đi từ nút gốc
đến một nút lá của cây mã Huffman.
Tính chất 2 Độ dài của thông điệp được mã hóa bằng với
độ dài đường dẫn ngoại được lấy trọng (weighted external path) của cây mã Huffman.
“Độ dài đường dẫn ngoại được lấy trọng” của một cây là
tổng của tích tất cả các trọng lượng của các nút lá với khoảngcách tới nút gốc Đây là một cách để xác định độ dài của thôngđiệp: Nó tương đương với tổng số lần xuất hiện trên tất cả các
kí tự nhân với số bít của sự xuất hiện đó
Tính chất 3 Trong mọi cây có trọng lượng tương ứng
giống nhau ở các nút lá thì cây Huffman có độ dài đường dẫn ngoại được lấy trọng ngắn nhất.
Bất cứ một cây nào cũng có thể được cấu trúc lại bởicùng một tiến trình mà ta đã dùng để xây dựng cây Huffman,nhưng không nhất thiết phải chọn ra hai nút có trọng lượng nhỏnhất ở mỗi bước Người ta có thể chứng minh được bằng quinạp là không có chiến lược nào tối ưu hơn chiến lược nhặt rahai nút có trọng lượng nhỏ nhất đầu tiên
Tính chất 4 Cây mã Huffman có tính chất Sibling.
Một cây nhị phân mà mỗi nút được gán cho một trọnglượng được gọi là có tính chất Sibling nếu khi chúng ta liệt kêtất cả các nút trong cây theo thứ tự tăng dần (hoặc giảm dần)của trọng lượng thì trong danh sách đó, mọi nút đều đứng bêncạnh nút anh em của nó
Trong cây nhị phân, trừ nút gốc ra, mọi nút còn lại đều cómột nút anh em của nó (là một nút khác có cùng nút cha) Theothuật toán xây dựng cây mã Huffman, ta thấy cây Huffman chính làmột cây nhị phân có tính chất sau: nếu liệt kê tất cả các nút lávà nút nhánh theo thứ tự từ trái qua phải (hoặc từ phải qua trái)và từ dưới lên trên thì các nút sẽ tuân theo thứ tự giảm dần(hoặc tăng dần) của trọng lượng Ví dụ, với cây mã trên ta có:I(1) D(1) R(1) (2) B(2) (3) A(3) (5) (Dấu kí hiệu cho một nútnhánh) Như vậy, cây mã Huffman có tính chất Sibling Tính chấtnày sẽ giúp ta cập nhật và xây dựng lại cây mã Huffman độngsau này
Ví dụ minh họa :
Trang 25Giả sử cần mã hóa chuỗi “SEAMSTRESS” Ta có bảng tần suấtnhư sau:
Danh sách các nút “tự do” bây giờ là: T, R, E, S và nút có trọnglượng 0.2 vừa được tạo ra
Hai nút tiếp theo được chọn trong số các nút “tự do” là T và R(vì chúng có trọng lượng nhỏ nhất) Nút cha của hai nút nàyđược tạo ra, có trọng lượng bằng 0.1 + 0.1 = 0.2 Đánh dấu “đãxét” cho hai nút T và R:
Quá trình tiếp tục như trên với hai nút “tự do” có trọnglượng nhỏ nhất 0.2:
Lúc này còn lại 3 nút “tự do”, trọng lượng của chúng là 0.4,0.2 và 0.4 Tiếp tục chọn ra hai nút có trọng lượng nhỏ nhấttrong số chúng (nút cha tạo ra sẽ có trọng lượng 0.6):
Trang 26Xử lý tương tự cho hai nút “tự do” cuối cùng”, và ta sẽ cócây mã Huffman mã hóa cho chuỗi trên là:
Từ cây mã, ta nhận được từ mã cho mỗi kí tự trong chuỗi:
Đến đây, ta có hai khả năng chọn hai nút tự do có trọnglượng nhỏ nhất Giả sử ta chọn khả năng khác với khả năng ởtrường hợp cây mã trên:
Như vậy, ta có một hình dáng khác của cây mã Huffman mã hóa chuỗi trên:
Trang 27Và các từ mã ứng với cây trên là:
Chuỗi bit mã trong trường hợp này là: 10100000001100100111
Độ dài chuỗi bit mã mã hóa cho chuỗi “SEAMSTRESS” trong haitrường hợp đều bằng 24 (bits)
c Phương pháp giải mã Huffman tĩnh
Do mã Huffman có tính tiền tố (prefix) nên quá trình giải mãtương đối đơn giản: Xuất phát từ gốc của cây và tuần tự đi theocác nhánh tương ứng với bit mã nhận được (0/1) cho đến khi gặpđược một nút lá Khi đó, kí tự ứng với nút lá sẽ được đưa vàobộ đệm
Lưu ý rằng, quá trình giải mã xử lý tuần tự từng bit mộtcủa luồng từ mã
Thuật toán giải mã nguồn tin đã được mã hóa bằng cây Huffman :
Vào : i Cây mã Huffman.
ii Luồng từ mã.
Ra : Nguồn tin trước khi được mã hóa.
Bước 1 Khởi tạo con trỏ p trỏ đến gốc của cây Huffman.
Bước 2 Trong khi chưa kết thúc luồng từ mã, lặp lại các
bước sau:
a. Đặt b là bit tiếp theo trong luồng từ mã
b If b=1 then Đặt p trỏ đến nút con phải của nó.
Else Đặt p trỏ đến nút con trái của nó.
c If (p trỏ đến một nút lá) then
i Đưa kí tự tương ứng với nút lá vào vùng đệm ii.Cho p trỏ đến nút gốc của cây.
Trang 28Ví dụ:
Với luồng từ mã 111000000111010011101111 mã hóa chochuỗi “SEAMSTRESS” trên, dựa vào cây mã tương ứng, quá trìnhgiải mã sẽ như sau:
Xuất phát tại nút gốc, bit đầu tiên của luồng từ mã đượcxử lý là bit 1, do đó ta rẽ sang nhánh phải (nếu bít là 0, rẽ sangnhánh trái), bắt gặp một nút nhánh nên ta đọc một bit mã tiếptheo, bit này là 1, ta tiếp tục rẽ sang nhánh phải Đến đây, ta bắtgặp một nút lá, nó chứa kí tự S Đưa kí tự này vào vùng đệm.Như vậy, từ mã của kí tự S đã được xử lý Quay về lại nútgốc, ta tiếp tục xử lý các bít mã kế tiếp một cách tương tựcho đến khi kết thúc luồng từ mã Cần nhớ là sau khi bắt gặpmột nút lá thì ta lại quay về gốc
Rõ ràng, để khôi phục chính xác nguồn số liệu gốc, bộphận giải mã phải biết trước bộ từ mã đã được sử dụng hoặclà cấu trúc của cây mã Như vậy, cấu trúc của cây mã hoặc bộtừ mã phải được gởi đi cùng với số liệu đã được mã hóa
d Ưu và nhược điểm của phương pháp mã hóa
Huffman tĩnh với mô hình thống kê
Ưu điểm
Xử lý khá tốt độ dư thừa phân bố kí tự
Quá trình mã hóa và giải mã tương đối đơn giản
Cho mã có độ dài tối ưu
Hạn chế
Giải quyết kém hiệu quả đối với các loại độ dư thừa khác(chẳng hạn như độ dư thừa vị trí)
Tốn nhiều thời gian xây dựng cây mã
Cấu trúc của cây mã hoặc bộ từ mã đã dùng để mã hóaphải được gởi đi cùng với số liệu đã được mã hóa Điềunày làm giảm hiệu suất nén
CHƯƠNG III
111000000111010011101111
S E A M S T R E S S
thời gian
Trang 29IV CÁC PHƯ NG PHÁP NÉN THEO M HÌNH TỪ I ØN Ơ Ô Đ Ê
Các phương pháp nén sử dụng mô hình thống kê mà chúng tađã biết thực hiện việc nén bằng cách mã hóa mỗi lúc một kíhiệu đơn thành từ mã có độ dài ngắn hơn so với kí hiệu ban đầu.Hiệu quả nén tăng hay giảm phụ thuộc vào việc phát triển môhình Mô hình không những phải dự đoán chính xác xác suất xuấthiện của các kí hiệu mà còn phải dự đoán được các xác suấtlệch khỏi giá trị trung bình
Tuy nhiên, các thuật toán nén chính thống dựa trên mô hìnhtừ điển lại sử dụng một kỹ thuật hoàn toàn khác để nén sốliệu Các kỹ thuật nén kiểu này không mã hóa các kí hiệu đơnbằng các từ mã có độ dài thay đổi mà mã hóa các chuỗi kíhiệu có độ dài thay đổi bằng các thẻ bài (token) Các thẻ bài nàydùng để ánh xạ vào một từ điển Nếu mã của các thẻ bài nàyngắn hơn chuỗi kí hiệu mà chúng thay thế thì hiệu ứng nén xảy
ra
Ở nhiều khía cạnh, phương pháp nén dựa trên mô hình từđiển là dễ hiểu đối với mọi người Nó khá giống với cách mànhững người lập trình hay áp dụng: lập chỉ mục cho cơ sở dữliệu để dễ dàng truy xuất những lượng dữ liệu lớn Trongcuộc sống thường nhật, chúng ta vẫn thường bắt gặp các sốđiện thoại, mã bưu cục mã hóa cho những chuỗi văn bản lớnhơn Đó chính là nguyên tắc mã hóa dựa trên mô hình từ điển.Để hình dung rõ hơn về phương pháp nén này, ta hãy xét một
ví dụ điển hình sau:
Giả sử, chúng ta muốn nén chuỗi “The token form an index to a
phrase dictionary” Chúng ta sẽ sử dụng cuốn từ điển “The English Vietnamese Dictionary” (dày 1680 trang, 165.000 mục từ ) của nhà
xuất bản Văn hóa thông tin (1999) như một khóa để mã hóa thôngtin
Sơ đồ mã hóa mà ta áp dụng dưới đây gồm một bảng tracứu đơn giản theo dạng:
< Chỉ số trang của từ điển / Số thứ tự của từ ở trong trang