1. Trang chủ
  2. » Kỹ Thuật - Công Nghệ

Kỹ thuật mã hóa Huffman với mô hình từ điển

59 816 5
Tài liệu đã được kiểm tra trùng lặp

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Tiêu đề Kỹ thuật mã hóa Huffman với mô hình từ điển
Thể loại Luận văn
Định dạng
Số trang 59
Dung lượng 531 KB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

Kỹ thuật mã hóa Huffman với mô hình từ điển

Trang 1

CHƯƠ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 2

II.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 3

CHƯƠ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 4

việ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 5

CHƯƠ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 6

Tuy 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 7

Mỗ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 8

ra 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 9

Ví 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 10

III.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 11

Từ 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 12

2 Đố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 13

Ví 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 14

Lấ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 15

mã 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 16

Chú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 18

Dự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 19

Nhì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 20

Hì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 21

Mô 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 22

codes), 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 23

Hì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 24

Từ 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 25

Giả 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 26

Xử 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 27

Và 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 28

Ví 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 29

IV 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

Ngày đăng: 02/11/2012, 14:35

HÌNH ẢNH LIÊN QUAN

Sơ đồ chức năng của quá trình  nén dữ liệu -  Kỹ thuật mã hóa Huffman với mô hình từ điển
Sơ đồ ch ức năng của quá trình nén dữ liệu (Trang 5)
Bước 2. Bảng con phía trên được gán giá trị nhị phân 0, bảng -  Kỹ thuật mã hóa Huffman với mô hình từ điển
c 2. Bảng con phía trên được gán giá trị nhị phân 0, bảng (Trang 15)

TỪ KHÓA LIÊN QUAN

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

w