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

Kỹ thuật nén số liệu mã hóa Số học

80 2,8K 12
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 nén số liệu mã hóa Số học
Người hướng dẫn 95T. Nguyễn Mậu Nghĩa
Trường học Khoa CNTT - ĐTVT
Chuyên ngành Kỹ thuật nén số liệu mã hóa Số học
Thể loại luận văn tốt nghiệp
Định dạng
Số trang 80
Dung lượng 1,87 MB

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 nén số liệu mã hóa Số học

Trang 1

TÓM TẮT LUẬN VĂN TỐT NGHIỆP

Nội dung của đồ án với đề tài Kỹ thuật nén số liệu mã hóa Số học được triển khai thành hai phần chính là phần

thuyết minh và phần chương trình:

* Phần thuyết minh gồm 6 chương được tổ chức như sau:Chương I: Giới thiệu thực trạng và sự cần thiết của nénsố liệu

Chương II: Trình bày các kiến thức tổng quan, một số kháiniệm và cấu trúc của quá trình nén số liệu

Chương III: Trình bày về các vấn đề liên quan của quá trìnhmã hóa Triển khai các thuật toán với cấu trúc dữ liệu phù hợpđể cài đặt trên ngôn ngữ lập trình bậc cao

Chương IV: Trình bày về cấu trúc dữ liệu và thuật toán củacác mô hình từ và mô hình kí tự Trình bày về mô hình bậc cao.Chương V: Trình bày về kết quả thực nghiệm đã tiến hànhvới các mô hình đã triển khai So sánh kết quả với phương phápnén khác

Chương VI: Kết luận, nêu những vấn đề đạt được, vấn đềchưa giải quyết và hướng phát triển của chương trình

* Phần chương trình gồm càc file nguồn và tệp thực thi Cácfile nguồn viết trong môi trường C ở hệ điều hành Linux Dựa theothuật toán trình bày trong tài liệu [3]

Trang 2

MỤC LỤC

TÓM TẮT LUẬN VĂN TỐT

NGHIỆP 1

MỤC LỤC 2

CHƯƠNG I

MỞ ĐẦU 4

CHƯƠNG II TỔNG QUAN VỀ NÉN SỐ LIỆU 6

I GIỚI THIỆU 6

II PHÂN LOẠI CÁC KỸ THUẬT NÉN 6

II.1 Nén tổn hao 6

II.2 Nén không tổn hao 7

III CÁC KHÁI NIỆM LIÊN QUAN ĐẾN NÉN SỐ LIỆU 7

III.1 Sự phân bố của kí tự 7

III.2 Sự lặp lại của những kí tự 7

III.3 Độ dư thừa vị trí 7

III.4 Đơn vị đo thông tin (Entropy) và độ dài trung bình của từ mã 8 III.5 Tỷ số nén 8

IV CẤU TRÚC CỦA QUÁ TRÌNH NÉN SỐ LIỆU 8

IV.1 Mô hình hoá 9

IV.1.1 Khái niệm 9 IV.1.2 Bậc của mô hình 9 IV.1.3 Phân loại mô hình 10 IV.2 Mã hoá 10

IV.2.1 Khái niệm 10 IV.2.2 Các phương pháp mã hóa 11

CHƯƠNG III KỸ THUẬT MÃ HÓA SỐ HỌC 15

I CÁC VẤN ĐỀ CẦN GIẢI QUYẾT 15

I.1 Mã hóa các kí tự lạ 15

I.2 Quản lý bộ nhớ 16

II MÃ HÓA 16

II.1 Nguyên tắc mã hóa 16

II.2 Cấu trúc dữ liệu và giải thuật 16

Trang 3

III.1 Nguyên tắc giải mã 19

III.2 Cấu trúc dữ liệu và giải thuật 19

IV NHỮNG HẠN CHẾ 21

CHƯƠNG I V XÂY DỰNG MÔ HÌNH 23

I MÔ HÌNH BẬC KHÔNG 23

I.1 Tính tần số xuất hiện của các kí hiệu 23

I.2 Mô hình từ 25

I.3 Mô hình kí tự 28

II MÔ HÌNH BẬC CAO 29

CHƯƠNG V CHƯƠNG TRÌNH VÀ THỰC NGHIỆM 31

I CÀI ĐẶT CHƯƠNG TRÌNH 31

I.1 Mã hóa 31

I.2 Mô hình 31

I.3 Các mô đun 31

I.4 Cách dùng 32

II THỰC NGHIỆM 33

II.1 Giới thiệu 33

II.2 Kết quả thực nghiệm 33

II.2.1 Kết quả thực nghiệm với các file kiểu *.txt 33

II.2.2 Kết quả thực nghiệm với các file kiểu *.cpp 35

III KẾT LUẬN VỀ KẾT QUẢ THỰC NGHIỆM 36

CHƯƠNG VI KẾT LUẬN 37

PHỤ LỤC CHƯƠNG TRÌNH NGUỒN 39

I CÁC FILE NGUỒN (*.C) 39

I.1 File arith.c 39

I.2 File bitio.c 44

I.3 File char.c 45

I.4 File hashtable.c 46

I.5 File main.c 50

I.6 File stats.c 57

I.7 File word.c 64

II CÁC FILE TIÊU ĐỀ (*.H) 69

II.1 File arith.h 69

II.2 File bitio.h 69

II.3 File hashtable h 71

II.4 File main.h 72

II.5 File stats.h 73

II.6 unroll.i 73

CHƯƠNG I

Trang 4

MỞ ĐẦU

Ngày nay cùng với sự phát triển không ngừng của nền khoahọc kỹ thuật thế giới là sự phát triển vượt bậc của ngànhCông nghệ Thông tin nói chung và ngành Tin học nói riêng Các hệthống Tin học giúp ích rất nhiều trong công việc hàng ngày củacác cơ quan, đơn vị tập thể hay mỗi cá nhân có liên quan Các hệthống Tin học còn giúp ta lưu trữ các thông tin cần thiết có liênquan đến công việc và đời sống hàng ngày Mà ngày càng khốilượng thông tin cần lưu trữ tăng lên gấp bội chúng ta không cònkhông gian để lưu giữ chúng nữa Một yêu cầu đặt ra là ta phảilàm nhỏ lại không gian dành cho các thông tin đó

Với xu thế toàn cầu hóa, thì mạng Internet đã ra đời Đây làmột mạng của các mạng con trên thế giới Qua mạng Internet tacó thể ngồi ở nhà liên lạc với các công ty, các đối tác làm ăn hayvới bạn bè ở trên khắp thế giới Qua mạng này ta có thể gửi đivà nhận về các thông tin cần thiết phục vụ cho cuộc sống hàngngày Khi gửi các thông tin đi mà ta để nguyên như vậy gửi đi thìtốn rất nhiều thời gian kèm theo đó là sự tốn kém về tiềnbạc

Cùng với sự hoà nhập của Tin học vào các lĩnh vực đờisống thì việc xử lý các loại tập tin với các kiểu file khác nhau làđiều tất yếu, và các tập tin này thường có kích thước lớn nênnhiều khi nó gây khó khăn cho công tác lưu trữ và truyền gửi Vìvậy, khi lưu trữ hay truyền gửi người ta mong muốn giảm đếnmức thấp nhất dung lượng bộ nhớ mà các tập tin này chiếmdụng để dễ tổ chức, quản lý và tiết kiệm về kinh phí

Để đáp ứng các yêu cầu nêu trên người ta đã nghĩ ra phươngpháp làm cho các thông tin đó nhỏ lại nhằm chiếm dụng bộ nhớ

ít hơn Người ta gọi đó là kỹ thuật nén số liệu Vậy nén số liệulà gì? Ở đây chúng ta có thể giới thiệu sơ qua về nén số liệu.Nén số liệu là quá trình giảm dung lượng nhớ cần thiết dành chocác tập tin mà vẫn biểu diễn cùng một lượng thông tin nhưtrước

Có nhiều phương pháp nén khác nhau và chúng được thiếtkế cho các loại dữ liệu khác nhau như hình ảnh, âm thanh, vănbản.v.v trong nội dung đồ án này chỉ bàn đến phương pháp dùng

Trang 5

tập tin so với không gian trống lấy được nhỏ hơn ở khối lượngdự trữ hoặc nhỏ hơn thời gian truyền tín hiệu, tuy nhiên nguyênbản chính của tập tin phải được khôi phục chính xác sau khi giảinén.

Đã có rất nhiều phương pháp nén được phát minh và sửdụng trong nhiều năm qua Khi thực hiện giải pháp nén số liệuchúng ta cần phải xem xét đến hai vấn đề trái ngược nhau: cácthuật toán nén số liệu thực hiện trước hết phải đảm bảo giảmchi phí lưu trữ mà lại không sử dụng quá nhiềìu thời gian Nguyêntắc chung của các phương pháp mã hoá đều dựa trên nhận xétloại bỏ việc lưu lại các thông tin trùng lặp Các kỹ thuật nénkhông tổn hao thường được áp dụng cho các tập tin văn bản vìnó chứa các ký tự xuất hiện thường xuyên hơn các ký tự khác,và các thuật toán nén tổn hao thường áp dụng cho các tập tinảnh vì nó có thể là các vùng đồng nhất, hay cho mô tả số của âmthanh và các ký hiệu tương tự khác

Đặc điểm của nén văn bản là dữ liệu của tệp tin gốc phảiluôn luôn được khôi phục lại một cách chính xác sau khi giải nén.Một trong những phương pháp nén văn bản được biết sớm và đãthành công là nén Huffman, lần đầu tiên được phổ biến vào đầunhững năm 1950 Phương pháp này tạo ra các từ mã khác nhau chocác kí hiệu đầu vào Mã hóa Huffman được xem như một trongnhững phương pháp nén tốt trong nhiều thập kỷ, cho đến khi cóbước đột phá về kỹ thuật nén vào cuối những năm bảy mươi làsự xuất hiện của phương pháp nén Mã hóa Số học Mã hóa Sốhọc ra đời vào thời gian này và được nghiên cứu phát triển bởinhiều nhà nghiên cứu

Trong một thời gian dài từ những năm bảy mươi đến đầunhững năm tám mươi, mã hóa Số học bị coi là phương pháp khóthực hiện bởi vì nó không tạo ra từng từ mã riêng lẻ cho từngký hiệu mà chỉ tạo ra một từ mã duy nhất cho toàn bộ nguồnsố liệu Vì vậy nó không đòi hỏi số nguyên các bít để mã hóa kýhiệu Ví dụ,û ký tự s có xác suất xuất hiện là Pr[s] thì lượngthông tin chứa đựng trong nó là -logPr[s] bit (biểu thức này đượcđịnh nghĩa là entropy của ký tự), giả sử xác suất xuất hiện củaký tự này là 99% thì Mã hóa Số học chỉ cần sử dụng 0,015 bitđể mã hóa nhưng mã hóa Huffman phải sử dụng ít nhất là 1 bitđể mã hóa ký tự này vì vậy người ta nói mã hóa Số học gầnvới entropy Từ đây ta có thể nghĩ đến một tỉ số nén cao hơn chonén văn bản khi áp dụng phương pháp mã hóa Số học Sự côngbố mã nguồn cho việc mã hóa nhiều kí hiệu được viết bởiWitten,Neal và Cleary trong tập Communication of ACM (CACM )

Trang 6

Với các vấn đề nêu trên và dựa vào tài liệu [3], trong đồ ánnày em đi sâu nghiên cứu về phương pháp mã hóa Số học Đưa racác mô hình khác nhau và kết quả thực tế của từng mô hình đểngười đọc lựa chọn Chi tiết của các vấn đề sẽ được trình bàytrong các chương tiếp theo của đồ án.

CHƯƠNG II

TỔNG QUAN VỀ NÉN SỐ LIỆU

I GIỚI THIỆU

Nén số liệu là quá trình làm giảm số liệu cần thiết mà vẫnbiểu diễn cùng một lượng thông tin như trước Ởí đây hai kháiniệm số liệu và thông tin là khác nhau, ở đây số liệu là cái dùngđể truyền tải thông tin Dữ liệu sau khi nén phải được khôi phụclại giống hoàn toàn với lúc đầu Cơ sở của nén số liệu là dựavào các đặc trưng sau:

 Tính hữu hạn của tập ký hiệu

 Tần số 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

Ví dụ 1: Để hiểu rõ tác dụng của nén ta xét ví dụ như sau: giảsử trong một đoạn văn có 50 chữ a, 30 chữ b, 20 chữ c, với mỗi

kí tự là 1 bit thì ta tốn tổng cộng là 100 bit Khi đó thay vì lưu 50chữ a, 30 chữ b, 20 chữ c ta chỉ lưu 50a, 30b, 20c khi đó ta chỉ tốn

9 bit để lưu trữ tất cả chúng, như vậy ta tiết kiệm được 91 bit

Trang 7

II PHÂN LOẠI CÁC KỸ THUẬT NÉN

Dựa vào nguyên tắc nén ta có thể chia các kỹ thuật nénthành hai nhóm chính là nén tổn hao và nén không tổn hao

II.1 Nén tổn hao

Nén tổn hao là kỹ thuật nén chấp nhận mất mát mộtlượng thông tin nhất định để đạt được hiệu quả nén cao, néntổn hao thích hợp với các tập tin hình ảnh, âm thanh đã được sốhoá Theo bản chất việc biểu diễn thông tin tương tự dưới dạngsố ngay từ đầu đã hàm chứa các sai số Hầu hết các kỹ thuậtnén tổn hao đều có thể được điều chỉnh để cân bằng giữa độchính xác và hiệu quả nén Đối với các thông tin bị mất mátkhông phải là vấn đề quan trọng bởi vì nó có thể được khôiphục lại Do đó ở đây chúng ta chỉ quan tâm đến hiệu quả nén màthôi Nén tổn hao thường được thực hiện qua hai bước :

 Bước 1: Thực hiện xử lý số liệu trên toàn bộ nguồn sốliệu, nó bao gồm việc biến đổi số liệu từ miền thời gian sangmiền tần số Sau đó nó tiến hành “làm trơn” số liệu bằng cáchlàm tròn, việc mất mát số liệu xảy ra ở giai đoạn làm tròn này

 Bước 2: Tiến hành nén số liệu đã được biến đổi và làmtrơn bằng các phương pháp nén không tổn hao quen thuộc

Ví dụ 2: Nếu ta dùng kỹ thuật nén tổn hao để nén câu văn

“Trường Đại Học Kỹ Thuật Đà Nẵng” và nếu sau khi giải nén tathu được “Trườn Đại Họ Kỹ Thuật Đà Nẵn” thì điều này làkhông thể chấp nhận được Do đó ta không thể áp dụng kỹthuật nén tổn hao để nén văn bản

II.2 Nén không tổn hao

Nén không tổn hao là phương pháp nén đảm bảo không mấtmát thông tin sau quá trình mã hoá và giải mã Sau khi nén và giảinén thì nó phải tạo ra một bản sao chính xác so với lúc đầu Kỹthuật này sử dụng để lưu trữ và truyền các cơ sở dữ liệu, cácbảng tính điện tử, các văn bản vì với các tập tin này thì việcmất mát dù chỉ một bit thông tin cũng là điều không thể chấpnhận được Ví dụ, ta dùng kỹ thuật nén không tổn hao để néncâu văn “Trường Đại Học Kỹ Thuật Đà Nẵng” sau khi nén và giảinén ta phải thu được “Trường Đại Học Kỹ Thuật Đà Nẵng”

Trang 8

III CÁC KHÁI NIỆM LIÊN QUAN ĐẾN NÉN SỐ LIỆU

III.1 Sự phân bố của kí tự

Trong chuỗi kí tự xuất hiện thì vài kí tự được xuất hiệnnhiều lần còn vài kí tự thì xuật hiện ít hơn Do đó khi mã hoáthì các kí tự xuất hiện nhiều ta sẽ mã hoá bằng từ mã ngắncòn kí tự xuất hiện ít ta sẽ mã hoá bằng các từ mã dài hơn

III.2 Sự lặp lại của những kí tự

Khi xuất hiện thì có kí tự thường được lặp đi lặp lạinhiều lần Có kí tự lại rất ít khi xuất hiện do vậy khi mã hoá

ta có thể mã hoá cô động hơn bằng cách chỉ lưu các thuộc tính

kí tự như: số lần lặp lại của kí tự, số kí tự đã xuất hiện

III.3 Độ dư thừa vị trí

Nếu những kí tự nào đó xuất hiện ở một vị trí mà ta cóthể đoán trước được thì khi mã hoá ta có thể sẽ giữ vị trí mà kítự đó xuất hiện thay vì lưu trữ các kí tự đó

III.4 Đơn vị đo thông tin (Entropy) và độ dài trung bình của từ mã

Đơn vị đo thông tin (Entropy): lý thuyết thông tin sử dụng thuậtngữ entropy là đơn vị đo thông tin được mã hoá trong một thôngđiệp Entropy của một thông điệp càng cao thì thông tin nó chứađựng càng nhiều Giả sử rằng p là xác suất xuất hiện của kíhiệu thì entropy của nó sẽ là -log2p bit Entropy của toàn bộ thôngđiệp là tổng entropy của các kí hiệu thành phần Như vậy thìentropy sẽ phụ thuộc vào xác suất xuất hiện của kí hiệu Một

kí hiệu có xác suất xuất hiện cao thì thông tin chứa đựng trongnó thấp và cần ít bit hơn để mã hoá

Độ dài trung bình của từ mã: độ dài trung bình của từ mã làgiá trị trung bình của tất cả các từ mã trong một bộ mã Độ dàitrung bình của từ mã không thể nào nhỏ hơn entropy của nguồnsố liệu được mã hoá và do đó một bộ mã tối ưu là bộ mã cóđộ dài trung bình của từ mã gần với entropy của nguồn số liệu

Trang 9

III.5 Tỷ số nén

Tỷ số nén là một đại lượng dùng để đánh giá hiệu quảcủa một phương pháp nén nào đó Tỷ số nén là một đại lượngtoán học ta có thể tính bằng công thức Ngày nay tồn tại 2 quanniệm trái ngược nhau về cách tính tỷ số nén

Quan niệm thứ nhất tính tỷ số nén theo công thức:

C x 100 (%).

Đối với cách tính này thì CN càng lớn tức là phương pháp nénđó có hiệu quả nén cao và ngược lại tức là CN càng nhỏ thì hiệuquả nén càng thấp Trong nội dung đồ án này em chọn cách tínhtheo quan niệm thứ nhất để tính tỷ số nén ở trong chương trình

IV CẤU TRÚC CỦA QUÁ TRÌNH NÉN SỐ LIỆU

Quá trình nén số liệu bao gồm hai quá trình là mô hình hoávà mã hoá Quá trình nén được minh hoạ bằng sơ đồ sau:

Hình 1: Cấu trúc của quá trình nén số liệu (theo [5])

Mô hình hoá

Mã hóa

Sự ước

lượng

xác suất

Luồng kí hiệu đã được mã hoá

Sự phân bốxác suất

Luồng kí

hiệu

đầu vào

Luồng kí

hiệu đầu ra

MÃ HÓA

GIẢI MÃ

Mô hình hoá

Giải mã

Sự ước

lượng

xác suất

Sự phân bốxác suất

Trang 10

IV.1 Mô hình hoá

IV.1.1 Khái niệm

Mô hình là một tập hợp số liệu cùng các quy tắc được sửdụng để xử lý các ký hiệu đầu vào và đưa ra các từ mã tươngứng Việc xác định một từ mã nhất định đối với một ký hiệuhoặc một tập hợp ký hiệu nhất định được thực hiện trênmột mô hình (model) Một mô hình có nhiệm vụ xác định chínhxác xác suất xuất hiện của từng ký hiệu và một bộ mã hoá sẽtạo ra các từ mã cho các kí hiệu dựa trên các xác suất đó

Ở đây mô hình hoá và mã hoá là hai vấn đề hoàn toàn khácnhau, vì có rất nhiều cách để xây dựng mô hình cho một phươngpháp mã hoá Một phương pháp mã hóa có thể sử dụng nhiều

mô hình khác nhau

IV.1.2 Bậc của mô hình

Công việc chính của mô hình hoá là tính xác suất xuất hiệncủa các kí hiệu ở đầu vào để cung cấp cho quá trình mã hoá Dođó trong quá trình mô hình hoá đó ta phải tìm cách để nâng cao độchính xác trong việc tính xác suất xuất hiện của các kí hiệu.Việc tính xác suất xuất hiện của các kí hiệu ta có thể dựa vàocác kí hiệu đứng trước, ta gọi các kí hiệu đứng trước đó làngữ cảnh, số lượng các kí hiệu đó có thể là khác nhau Vậybậc của mô hình chính là số kí hiệu đứng trước mà các kí hiệunày tạo thành ngữ cảnh

Việc tính xác suất xuất hiện dựa vào các kí hiệu đứngtrước này sẽ mang lại độ chính xác cao và nhanh hơn Do đó khibậc của mô hình càng cao thì thì quả nén càng cao Do vậy đểnâng cao hiệu quả nén mà càng ngày người ta càng nâng cao hơnbậc của mô hình Ngày nay thì bậc của mô hình có thể là 0, 1, 2,v.v

IV.1.3 Phân loại mô hình

Hiệu quả của quá trình nén phụ thuộc rất nhiều vào việclựa chọn mô hình thích hợp Hiện nay thì có hai loại mô hìnhphổ biến dùng cho nén số liệu là mô hình thống kê và mô hìnhtừ điển Sau đây ta xét đến từng loại mô hình đó:

Mô hình từ điển: mô hình này làm việc theo cơ chế là đọc sốliệu vào rồi tìm và so sánh với các kí hiệu đã có trong từ điển.Nếu tìm thấy nó sẽ trỏ đến kí hiệu đó Ở đây hiệu quả nén sẽ

Trang 11

phụ thuộc vào sự trùng lặp của các kí hiệu so với các kí hiệuđã có trong từ điển.

Mô hình thống kê: mô hình này làm việc theo cơ chế mã hoátừng kí hiệu một dựa vào xác suất xuất hiện của từng kíhiệu đó Sau mỗi lần xuất hiện thì xác suất xuất hiện của nóthay đổi Với loại mô hình này ta lại có hai cách khác nhau là môhình thống kê động và mô hình thống kê tĩnh

 Mô hình thống kê tĩnh: làm việc theo cơ chế là xây dựng mộtbảng liệt kê các giá trị xác suất của nguồn kí hiệu Do đó ta cầnphải gửi thêm một lượng số liệu khác nữa cho bộ giải mã đểgiải mã thông điệp đó

 Mô hình thống kê động: số liệu thống kê của nguồn số liệukhông cần phải gửi đi trước mà nó sẽ liên tục được sữa đổi vàtích luỹ dần trong quá trình tính toán sau đó của quá trình mã hoá.Nếu dựa vào kí hiệu đầu vào thì còn có các mô hình như

mô hình từ và mô hình kí tự

 Mô hình từ: ta xem đầu vào là các từ và các không từ xen kẽnhau do đó mà nó trở thành các kí hiệu được nén Với nén môhình từ nó đặc biệt thích hợp cho dữ liệu là các văn bản lớn cóvài chục nghìn từ Bởi vì thông thường thì các từ thường đượclưu trữ với mục đích để làm chỉ mục, do đó chỉ mục có thểđược dùng như một phần của mô hình nén Do đó nó mang lạihiệu suất nén cao hơn Một văn bản thì có rất nhiều từ khácnhau và các từ đó được tạo thành từ một số kí hiệu nhấtđịnh

 Mô hình kí tự: với mô hình này thì đầu vào là các kí tự dođó nó tốn thời gian hơn so với mô hình từ và hiệu quả nén sẽthấp hơn so với mô hình từ nhưng bù lại nó dễ thực hiện hơncác mô hình khác Bởi vì cái cơ bản nhất của một văn bản đóchính là các kí tự

IV.2 Mã hoá

IV.2.1 Khái niệm

Mã hoá là nhiệm vụ quyết định việc biểu diễn đầu ra củamột kí hiệu dựa trên sự phân chia xác suất được cung cấp bởi

mô hình Hiện nay có nhiều phương pháp mã hoá khác nhau nhưngđược sử dụng rộng rãi nhất vẫn là mã hoá Huffman và mã hoáSố học

Trang 12

IV.2.2 Các phương pháp mã hoá:

Mã hoá Huffman

Phương pháp này dựa vào xác suất xuất hiện của kí hiệuđược xây dựng bởi mô hình để mã hoá Phương pháp này mãhoá một kí hiệu bằng một từ mã riêng biệt Nếu kí hiệu cóxác suất xuất hiện cao thì gán cho kí hiệu đó từ mã ngắn, vàngược lại tức là gán cho kí hiệu có xác suất xuất hiện thấptừ mã dài hơn Ở đây từ mã là một số nguyên các bit

Với phương pháp này để xây dựng mã ta sử dụng cấu trúccây nhị phân Các nút lá của cây là các kí hiệu, các nút lá này cótrọng lượng là tần số hoặc xác suất xuất hiện của các kíhiệu Quá trình xây dựng cây tiến hành qua các bước như sau:

 Bước 1: xác định 2 nút lá có trọng lượng nhỏ nhất tức làcác kí hiệu có xác suất xuất hiện nhỏ nhất

 Bước 2: xây dựng nút cha của 2 nút con này với trọng lượngcủa nút cha là tổng trọng lượng của 2 nút con cộng lại

 Bước 3: lúc này nút cha được xem như là một nút lá, và nóđược bổ sung vào danh sách các nút lá, còn các nút con đã xétthì được đánh dấu là đã xét

 Bước 4: đánh dấu một trong hai nút lá là “0” thì nút còn lạilà “1” Để thuận lợi cho việc đánh dấu “0” hay “1" ta qui ướcrằng nút trái ta sẽ đánh dấu là “0” còn nút phải là “1”

 Bước 5: lặp lại các bước trên cho đến khi chỉ còn một nút láthì nút này chính là nút gốc của cây nhị phân ta vừa xây dựng

Ví dụ 3: Để hiểu rõ hơn quá trình làm việc của mã hóa Huffman taxét ví dụ như sau Giả sử ta có một thông điệp đầu vào gồmcác kí tự và xác suất xuất hiện của mỗi kí hiệu cho như trongbảng dưới đây:

Xác suấtxuất hiện

20 18 15 10 6 5

Bảng 1: Xác suất xuất hiện của các kí hiệu

Ta tiến hành theo các bước trên để xây dựng cây nhị phân cho

ví dụ này Ban đầu thì cả sáu nút đều là các nút tự do tức làcác nút lá Đầu tiên ta tìm được hai nút lá có trọng lượng nhỏnhất là E và G có trọng lượng lần lượt là 6 và 5 Hai nút này

Trang 13

nút cha được xem là nút lá và ta đánh dấu là đã xét các nút nàyrồi Khi đó ta có nút E được đánh dấu là “0” còn nút G đượcđánh dấu là “1”

Tiếp tục quá trình trên ta có các nút D và nút cha vừa tạothành và các nút có trọng lượng nhỏ nhất lần lượt là 10 và 11.Khi đó ta có nút cha mới tạo thành từ hai nút này có trọng lượnglà 21 Khi đó các nút đã xét qua ta đánh dấu là đã xét rồi Tạithời điểm này ta có cây nhị phân như sau:

Hình 2: Cây Huffman sau hai bước

Ở các bước tiếp theo hai nút có trọng lượng nhỏ nhất là Bvà C được nối với nhau tạo thành nút cha có trọng lượng là 33.Sau bước này các nút có trọng lượng nhỏ nhất là nút A và nútcha được tạo thành sau bước thứ hai tức là nút có trọng lượnglà 21và chúng kết hợp với nhau tạo thành nút cha mới có trọnglượng là 41 Cuối cùng là chỉ còn lại hai nút cha có trọng lượnglần lượt là 33 và 41 và chúng kết hợp với nhau tạo thành nútcha mới có trọng lượng là 74 Cuối cùng đây là nút cha duy nhấtvà ta đã hoàn thành việc xây dựng cây Huffman cho việc mã hóa.Kết quả cuối cùng của quá trình thực hiện được thể hiệnbằng cây như hình vẽ dưới đây

Hình 3 Cây Huffman hoàn chỉnh

Để đưa ra từ mã cho các kí hiệu chúng ta phải đi từ các nútlá đến gốc của cây Huffman Tuy nhiên các bước trả về phảingược lại với từ mã nên ta phải đặt chúng vào ngăn xếp để khilấy ra thì theo thứ tự ngược lại và cho ta từ mã của các kítự Kết quả đưa ra các từ mã cho các kí hiệu trong thông điệp ởtrên như sau:

A

20 18 15 10 6 5

01121

10

0

00

4174

11 21

18 15 20 10 6 5

1 33

Gố

c

0

Trang 14

Mã hóa Số học

Ngay từ khi ra đời phương pháp này không mang tính khả thi vìnó phức tạp về mặt khái niệm lẫn việc thực hiện nó trongthực tế Khi thực hiện phương pháp này nó yêu cầu bộ nhớ códung lượng lớn, thới gian thực hiện lâu nên trong một thời gian dàinó vẫn chỉ mang tính thử nghiệm ở trong các cuộc thí nghiệmvà nghiên cứu Cho đến khi có sự phát triển của tốc độ tínhtoán cũng như dung lượng bộ nhớ của các máy tính thì phươngpháp này mới được người ta chú ý đến nhiều hơn Khi đó người

ta mới nghĩ đến việc áp dụng phương pháp này vào trong thựctế

Bây giờ ta xem xét quá trình làm việc của phương pháp này.Giả sử chúng ta có một thông điệp bao gồm có các kí hiệu khácnhau thuộc một bảng alphabet có độ lớn giới hạn Cũng giả sửrằng chúng ta biết xác suất xuất hiện của mỗi kí hiệu là khácnhau, và ta tìm cách diễn tả lại thông điệp đó mà dùng một sốbit nhỏ nhất có thể Ngay từ khi được công bố thì mã hóa Sốhọc đã không được nhiều người chấp nhận bởi nó là mộtphương pháp khó thực hiện, nó yêu cầu bộ nhớ lớn, thời gianthực hiện lâu Với phương pháp này nó không tạo ra từng từ mãriêng biệt cho từng kí hiệu mà nó chỉ tạo ra một từ mã duynhất cho toàn bộ nguồn số liệu Từ mã này sẽ bị thay đổi trongquá trình mã hóa mỗi khi có thêm một kí hiệu được mã hõa Dođó từ mã ở đầu ra không còn là một số nguyên các bit nữa mà làmột số lẽ các bit Vì vậy nó gần với entropy hơn và mang lạihiệu quả nén tốt hơn

Cơ chế hoạt động như sau: giả sử rằng pI là xác suất của kíhiệu thứ i trong bảng alphabet, và các biến L và R được khởi tạolần lượt bằng 0 và bằng 1 Trong đó L biểu diễn giá trị nhị phânnhỏ nhất phù hợp với việc biểu diễn từ mã các kí hiệu đượcxử lí, R là vùng kết quả xác suất xuất hiện của các kí hiệu Để

Trang 15

cả L và R phải được tính toán lại, 

i ip.RL

L và R = R.pj , vẫnđảm bảo mối quan hệ giữa L, R và xử lí các kí hiệu tiếp theo.Khi kết thúc thông điệp, bất kì giá trị nào nằm giữa L và L + R sẽđược chỉ định rõ ràng để làm từ mã cho thông điệp đầu vào Để hiểu rõ hơn quá trình làm việc của mã hóa Số học ta xét

ví dụ sau: giả sử ta có bảng alphabet gồm các kí tự {a, b, c, d}vàmột thông điệp gồm các kí tự a, b, c là abc và chúng có xácsuất xuất hiện như trong bảng dưới đây:

Xác suấtxuất hiện

0,25

0,50

0,25

Bảng 3: Bảng xác suất của các kí hiệu

Khi bắt đầu quá trình nén ta có L = 0 và R = 1 Khi mã hóa kítự đầu tiên là a ta tiến hành tính toán lại L và R như sau:

25 , 0 25 , 0 1 0

Trang 16

CHƯƠNG III

KỸ THUẬT MÃ HÓA SỐ HỌC

V.1 Mã hóa các kí tự lạ

Với mô hình kí tự bậc 0 thì nó mã hóa 257 kí tự khác nhaulà vì ngoài 256 kí tự bình thường thì nó còn mã hóa kí tự đặc

biệt là end_of_file Tấ cả chúng đều có giá trị trong ngữ cảnh bằng cách gọi hàm install_symbol() Trái ngược với điều này, mô

hình từ không giới hạn về số kí hiệu đầu vào , dãy đầu vào ởđây có thể là hàng trăm hàng ngàn thậm chí là hàng triệu kíhiệu khác nhau Để giải quyết tình huống này ta tạo ra một bảngalphabet các kí hiệu đầu vào có độ lớn không giới hạn Ta gọihàm encode(C,s) để thực hiện việc mã hóa kí hiệu s trong ngữcảnh C Hàm này trả về cờ là kí hiệu escape (mã thoát) nếu kíhiệu s không có trong ngữ cảnh C hoặc vì một lý do nào đó mà kíhiệu s có xác suất xuất hiện bằng 0 Trong trường hợp này thìcác từ được mã hóa bằng cách dùng mô hình kí tự cho các kítự ở trong từ đó và đẩy từ đó vào bảng chứa các từ Trả vềmột cờ để chỉ định đến kí hiệu có xác suất bằng 0 Bộ mã hóacũng phải chuyển một mã thoát đến bộ giải mã để gọi hàmdecode(C) và tương tự như mã hóa thì bộ giải mã cũng trả vềmột cờ để loại trừ từ này ra Chính điều nay làm tăng thêm sựphiền toái với các vấn đề như xác suất sẽ được gán lại cho mãthoát Với các kí hiệu có tần số bằng 0 ta gọi hàm

zero_frequency_problem() để biến đổi tần số của nó thành 1 Để

tính xác suất thoát ta gọi t1 là các k có tần số bằng 1 (tức làxuất hiện 1 lần), kí hiệu si xuất hiện ci lần và ti ic là tổngtần số của các kí hiệu đã được cập nhật trong quá trình mãhóa Khi đó xác suất thoát là pescape được tính bằng công thức:

Trang 17

đoạn thứ nhất là bước chuyển thông tin không có gì mới mẽ đóvà bước thứ hai là chỉ định kí hiệu không mới đó có xác suất làt

ci

, chính điều này gây ra sự bất lợi trong việc tính toán xácsuất thực tế cho việc dùng các bước mã hóa riêng lẽ Từ yêucầu tính lại pi được giới hạn bởi t đến một vùng giá trị rất nhỏcủa nó và nếu tràn quá thì phải hủy bỏ Do đó ta tính pescape và pitheo phương án sau:

1

11

1

1 1

c p

t t

t p

i i

escape

Ở đây việc cộng thêm 1 cho phép kí hiệu được biểu diễn lại ngay cả khi không có trường hợp là tần số bằng 1 và t1 được thêm vào trong mẫu số bằng cách lấy xấp xỉ

1 1

t tương tự với độ lớn của số nguyên lớn nhất mà có thể biểudiễn trong một cơ chế từ Các thay đổi không dùng đến xác suấtnhỏ nhưng tất cả các phương pháp với tần số 0 đều được khámphá bằng bất kỳ cách nào và nó mang lại hiệu quả nhỏ

V.2 Quản lý bộ nhớ

Sức mạnh của một hệ thống nén là đưa ra vài cơ chế đểtìm ra tổng số bộ nhớ đã dùng trong khi mã hóa và giải mã Vídụ, vài bộ nén thu hồi danh sách các khoản đang dùng ít nhất làcách giải quyết mới, do đó cấu trúc của mô hình tiếp tục đượcmở ra khi bộ nhớ được dùng hết Mô hình khác sẽ được gỡ bỏkhi bộ nhớ đã đầy, nhưng giữ lại cửa sổ đệm của kí hiệu hiệntại do đó có thể thay thế bằng mô hình nhỏ hơn và có thể đượcxây dựng lại lập tức Trong thực tế thì cơ chế đã dùng trongbất kì ứng dụng nào sẽ phụ thuộc vào sự cần thiết của ứngdụng đó, đặc biệt là tổng bộ nhớ đã dùng bằng cấu trúc của

mô hình Giới hạn bộ nhớ 1Mb là phong phú và đủ để xử lý vănbản với bộ từ vựng có khoảng 30.000 từ khác nhau

Trang 18

VI MÃ HÓA

VI.1 Nguyên tắc mã hóa

Mã hóa Số học không thay thế các kí hiệu đầu vào bằngcác từ mã riêng biệt mà thay thế luồng ký hiệu đầu vào bằngmột từ mã duy nhất ở đầu ra Đầu ra của mã hóa Số học làmột số lớn hơn 0 và nhỏ hơn 1 Mã hóa Số học bắt đầu hoạtđộng của nó bằng việc phân chia khoảng giữa 0 và 1 dựa vàosự phân bố xác suất xuất hiện của kí hiệu trong mô hình đã xâydựng Khoảng này sẽ được tính toán lại sau khi có một kí hiệuđược mã hóa

VI.2 Cấu trúc dữ liệu và giải thuật

Bước mã hóa cơ sở của bộ mã hóa được thực hiện bởi

arithmetic_encode(l, h, t) trong đó l và h lần lượt là mức thấp và

mức cao của biến đếm trước khi tích lũy tần số trong ngữ cảnhcủa các kí hiệu tương ứng, hàm này mã hóa 1 kí hiệu giả sửngầm định là nó xuất hiện h - l lần trong tổng số t lần, và nóchỉ định vùng xác suất là [ l/t, h/t ] Trạng thái nội tại của bộ mãhóa được cho bởi 2 giá trị là R và L, trong đó L là mức thấp hiệntại và R là vùng của đoạn đang mã hóa, và tại mỗi giai đoạn thìthông điệp có thể được diễn tả bằng bất kì giá trị nào trongđoạn [ L, L+R ] Quá trình xử lý của bộ mã hóa được minh họa ởhình 4 Giá trị L và R được thể hiện thông qua b bit., L được khởitạo là 0 và nó có giá trị nằm giữa 0 và 2b - 2b - 2, R được khởi tạolà 2b - 1 và có giá trị nằm giữa 2b - 2 + 1 và 2b - 1 Chúng tôi cho rằng 0

< l < h < t và t là tổng tần số của tất cả các kí hiệu khác nhauđược chỉ định trong ngữ cảnh, t phải thỏa mãn điều kiện t < 2fvới f là số bit đã dùng để giữ tần số của kí hiệu và có thểkhông vượt quá giá trị điều khiển bởi lựa chọn của b và kíchthước từ máy đang dùng

Thuật toán mã hóa kí hiệu thể hiện ở hình dưới

Đầu vào là các biến thành phần l, h, t

Đầu ra là các bit biểu diễn kí hiệu đó

t

h R R

Trang 19

Hình 4: Thuật toán mã hóa Số học

Hoạt động cơ sở của bộ mã hóa, trong các bước 1,2 và 3 làlàm nhỏ khoảng [ L, L + R ) thành các khoảng nhỏ hơn để biểu diễncác kí hiệu mới [ l / t, h / t ), mang lại một vùng mới là [ L + R.l/t, L+ R.h/t ] Giá trị của L và R đưọc cập nhật để phản ánh vùng mớinày Vùng này phải chuẩn hóa lại thành các giai đoạn để ngăncản nó trở thành các khoảng quá nhỏ để diễn tả đúng b bit củagiá trị này

Để giảm tối đa sự mất mát hiệu quả nén bởi vì sự chiakhông chính xác của không gian mã, R nên được giữ ở giá trị lớnnếu có thể và trong hoạt động hiện tại, nó phải có độ rộngtối thiểu cũng như t Điều này được thực hiện bằng cách duytrì R trong khoảng 2b-2 < R < 2b-1 trước mỗi bước mã hóa và khẳngđịnh rằng t  2f với f  b -2 Đó là R phải được chuẩn hóa lại mộtcách định kỳ với một hoặc nhiều hơn các bit ở đầu ra Chi tiếtcủa quá trình xử lí này phù hợp với sự chuẩn hóa lại của L, R

và chuẩn hóa lại R là một bước của arithmetic_encode()

Trong thuật toán chuẩn hóa lại R trong bộ mã hóa, khi L vàL+R đều  2b -1,bit 0 có thể là đầu ra và L, R nên điều chỉnh chođúng Tương tự, kết quả đầu ra có thể là bit 1 khi cả 2 đều lớnhơn 2b - 1 Khi R  2b -2 và cả 2 trường hợp trên không chấp nhận,khoảng [L,L+R) phải thuộc 2b -1 Trong trường hợp thứ 3 thì biến

bit_outstanding được tăng, đây là biến lưu giữ tất cả các bit biểu

diễn kí hiệu được đề cập đến ở đầu vào, do đó bit 0 hoặc bit 1của đầu ra sẽ đi theo sau bởi một hoặc nhiều hơn các bit đối lập

với nó Hàm bit_plus_follow( ) kiểm tra vị trí có sự tồn tại các bit

ngược nhau của các bit tại thời gian mà nó được gọi trên đầu ravới một bit khác đã biết

Tất cả đầu ra này hoạt động mang lại kết quả trong R, do đósau một số thao tác của đầu ra R sẽ được ở lại trong vùng,chuẩn bị cho bước mã hóa tiếp theo Thực vậy, mã hóa một bit

kí hiệu tùy theo các tham số l, h và t phải tự động sinh ra

Trang 20

(-log((h-l)/t)) bit hoặc -log((h-l)/t) bit được sinh ra trong vòng lặp chuẩn hóalại.

Hình 5: Thuật toán chuẩn hóa lại của bộ mã hóa Số học

Hàm bis_plus_follow(x): ghi bit x có giá trị là 0 hay 1 vào dãy bit

đầu ra Cộng vào bất kỳ một bit tự do nào vào sau các bit đónếu biết được rằng nó ngược nhau

}

Bất kì thông tin còn lại của kí hiệu được ghi lại bởi việc thayđổi trạng thái mã hóa, được phản chiếu trong giá trị mới của Lvà R Thuật toán chuẩn hóa lại được thể hiện trong hình 5 ởdưới Sự chuẩn hóa lại chính là bước thứ (4) trong thuật toánmã hóa ở trên

Sau mỗi kí hiệu được nhận ra bộ mã hóa phải điều chỉnhlại độ rộng vùng Do đó với mỗi bit được xử lí bằng cách dichuyển nó ra ngoài mức kết thúc cao của 0 và 1 bit mới đượcchuyển đến trong mức kết thúc thấp

Đây là bước thứ 4 trong thuật toán mã hóa

{

Trong khi R < 2b - 2 làm

Nếu L + R < 2b - 1 thì bis_plus_follow(0)

Khác { Nếu 2b - 1 < L thì

bis_plus_follow(1)

gán L = L - 2b -1

Khác gán bit_outstanding = bit_outstanding + 1

L = L - 2b –2}

Gán L = 2.L, R = 2.R

}

Trang 21

VII GIẢI MÃ

VII.1 Nguyên tắc giải mã

Hoàn toàn ngược lại với mã hóa thì giải mã dựa vào từ mãvà các giá trị L và R để xác định và đưa ra các kí hiệu Để giảimã ta tìm kí tự đầu tiên của thông điệp bằng cách tìm xem giátrị của từ mã mà bộ mã hóa gửi đến là bao nhiêu và nằm trongkhoảng nào và nó tương đương với kí hiệu nào và xuất kí hiệuđó ra Sau đó ta tính lại giá trị từ mã cho kí hiệu tiếp theo dựavào L và R

Một vấn đề đặt ra là làm thế nào để bộ giải mã biếtđược đã kết thúc luồng đầu vào Ơí đây có 2 cách để giải quyếtvấn đề này là ta gửi cho bộ giải mã biết độ dài của thông điệphoặc một kí hiệu đặc biệt để báo cho bộ giải mã biết là đãkết thúc thông điệp

VII.2 Cấu trúc dữ liệu và giải thuật

Thuật toán của bộ giải mã như hình dưới Với V là cửa sổhiện tại mở rộng với b bit vào luồng bit đã nén Ở đây có 2 hàm

là decode_target(t) và arithmetic_decode(l,h ,t) tương đương với haibước cơ bản được yêu cầu để giải mã một kí hiệu Qui định

đầu tiên là giá trị target dựa trên V và giá trị của t đã dùng trong

mã hóa tương đương, nó đáp ứng cho quá trình tìm kiếm cấu trúcdữ liệu và xác định kí hiệu s, tìm kí hiệu với điều kiện l < target

< h Rồi gọi hàm arithmetic_decode(l, h, t), nó không mang theo tỉ lệ

liên kết và chuyển dịch dãy bit, nó giống với kết quả của mãhóa

Hàm arithmetic_decode() thay đổi giá trị của các biến L và R

để phản ánh sự thay đổi tương đương trong bộ mã hóa trong khi

gọi hàm arithmetic_encode() Hàm decode_target() trả về giá trị

nguyên target, 0 < target < t đảm bảo rằng target nằm trongvùng [l,

h) tương đương với khi gọi arithmetic_encode().

Đầu vào là các biến thành phần l, h, t

Đầu ra là các kí hiệu tương ứng với các bit đã mã hóa

Chuẩn hóa lại R

Thay đổi các giá trị của L và VDịch chuyển bit đầu vào kế tiếp vàotrong V

}

}

Trang 22

Hình 6: Thuật toán giải mã Số học

Hàm decode_target() chỉ có một lệnh:

decode_target( )

{ return (((V - L + 1) x t ) - 1) / R }

Trang 23

Hình 7: Thuật toán chuẩn hóa lại của bộ giải mã Số học

Với cách thực hiện này ta gặp phải các hạn chế sau:

Thứ nhất liên quan đến sự tràn của mã hóa Số học Giả sửrằng máy đang dùng hỗ trợ w bit số học Ví dụ, trên máy làmviệc hiện tại w = 3, rồi nếu vượt quá thì hủy bỏ không thực

hiện các bước 1 và bước 3 của arithmetic_encode tương đương với

việc tính R.l và R.h, ở đây phải có sự thỏa mãn 2w - 1 > 2b - 1.t, khi w

 b -1+ f và t < 2f Hơn nữa, nếu ở mức dưới tức là chưa tràn vàR= 0 là xảy ra bước 3, R > t được yêu cầu, đó là 2b - 2 > 2f Trongviệc liên kết hai cái ép buộc này chỉ thỏa mãn khi w  2f+1 Từđây, với w = 3L của trị lớn nhất của giá trị f có thể hỗ trợ là 15và tổng tần số trong bất kì ngữ cảnh nào đều phải không vượtquá 32767 Với nén mô hình từ và mô hình khác sử dụng bảngalphabet lớn thì đây là một hạn chế khắt khe

Thứ hai là có một mất mát nhỏ của việc tràn trong số học

là sự nguy hiểm trong việc tính toán bits_outstanding Tưởng

tượng là một mô hình tĩnh của ba kí hiệu A, B, C và giả sử rằngmột file có một tỷ hoặc vài tỷ kí tự được mã hóa Do đó

{ Trong khi R < 2b - 2 làm {

Nếu L + R < 2b - 1 thìKhông làm gì cảKhác

Nếu 2b - 1 < L thì

- Đặt L = L - 2b = 1

- Đặt V = V - 2b = 1 Khác

- Đặt L = L - 2b -2

- Đặt V = V - 2b = 1}

Gán - L = 2 L, R = 2 R

- V = 2 x V + read_one_bit()

}

Trang 24

bits_outstanding sẽ tăng và trên thực tế không một bit nào được

phát ra Cái rủi ro của việc tràn là nhỏ, xác xuất của 232 bit tất cảcùng sự khác biệt, trong một mô hình thích hợp bậc một sẽ mãhóa 232, tuy nhiên điều đó là có thể Có ba cách để hạn chế vấnđề này

 Thứ nhất và cách thực hiện kinh tế nhất là xuất ra màn

hình bits_outstanding trong bộ mã hóa, và nó sẽ trở thành rất lớn

 Thứ hai là ghi một thông báo lỗi và bỏ qua chương trình Nếuđây là điều không chấp nhận được nên xử lí nén phải mạnh đểmở rộng cho cả một trong một tỷ thay đổi, sự thất bại khôngthể không tổn hao, rồi bộ giải mã nên sửa lại để nhận biết giá

trị hiện tại của bits_outstanding, do đó cho phép cả bộ mã hóa và bộ giải mã đồng bộ thực hiện finish_encode và start_encode để

làm đầy bit hiện tại và thiết lập lại trạng thái của bộ mã hóa

bất kì khi mà bits_outstanding tiến đến gần giá trị hiện tại của

nó Tuy nhiên với điều này thì một sự bất lợi đối với bộ giảimã là làm chậm tốc độ

 Cái thay đổi thứ ba là cho rằng một ưu tiên kết nối với độdài của một file nào sẽ được xử lí và mở rộng độ chính xác số

học cho bits_outstanding để bảo đảm rằng tràn là điều không thể.

Trang 25

CHƯƠNG IV

XÂY DỰNG MÔ HÌNH

I.1 Tính tần số xuất hiện của các kí hiệu

Để tính tần số cho các kí hiệu ta sử dụng một mảng

cumfreq dùng để chứa đựng việc tích lũy tần số của các kí

hiệu s được gửi từ mô hình để mã hóa và hoàn thành việcchuyển đổi mỗi kí hiệu Tổ chức một cây ngầm định cho việccất giữ mảng chứa biến đếm tích lũy tần số của các kí hiệumà vẫn giữ được thứ tự của các kí hiệu và chỉ cần n từ chobảng có n kí hiệu Phương pháp ở đây là tính toán và cập nhậtlại các giá trị ls ,hs như sau:

1

i ss

1 s

1

i ss

fh

fl

Trong đó: ls là mức thấp, hs là mức cao của của biến đếmtrước khi tích luy tần số trong ngữ cảnh của các kí hiệu tươngứng, fs là biến chứa tần số của kí hiệu s

Việc đếm tích lũy dần có thể được cập nhật trong logariththời gian trong cấu trúc bằng cách dùng theo sự điều khiển đểtrao đổi cấu trúc cây ngầm định trong mảng đó Giả sử rằng s làsố kí hiệu trong khoảng từ 1 đến n Ta định nghĩa hàm backward(s)để chứa đựng giá trị từ s bằng cách trừ đi 1đối với các bit 1 ởbên phải nhất của s biểu diễn bằng giá trị nhị phân Ví dụ: số

13 có dãy bit nhị phân là 1101 do đó backward(13) = 1100 = 12,backward(12) = 1000 = 8, và backward(8) = 0000

Tương tự như vậy ta định nghĩa hàm forward(s) là s + 2I vớiđiều kiện i là vị trí xuất hiện lần thứ một của bit 1 tính từ bênphải qua Ví dụ forward(13) = 13 + 20 = 14, forward(14) = 14+ 21 = 16,forward(16) = 16 + 24 = 32

Trang 26

Cả backward(s) và forward(s) có thể thực hiện bằng cáchdùng các thao tác đối với bit Đó là backward(i) là i - (i and - i) hoặc

i and (i - 1), forward(i) là i+ (i and -i)

Đưa ra mảng F, tính hs và tăng tần số của kí hiệu s đượchoàn thành bởi vòng lặp Để tính hs dùng F với điều kiện 1 < s <n

s 1 2 3 4 5 6 7 8 9 10 11 12 13 14

Fs 1 1 1 4 3 5 2 3 6 5 4 1 1 9F[s] 1 2 1 7 3 8 2 20 6 11 4 16 1 10

Bảng 4: Ví dụ về cấu trúc cây ngầm định

Ví dụ: h13 được tính như F[13] + F[12] | + F[8] đây là hình thứcrút gọn của tổng (h13 - h12 ) + (h12 - h8 ) + (h8 - h0 ) Đây chính làcác bước 1 và bước 2 trong thuật toán ở hình dưới Nó cũnghướng thẳng đến việc đếm tăng tần số dùng một qui trình cậpnhật đến lũy thừa bậc hai của bên phải F[s] đây là các bước thứ

3 và thứ 4 của thuật toán ở hình dưới Giá trị của biến increment

có thể lấy là 1, nhưng như cách trình bày ở hình dưới có thể lànó lớn hơn 1nếu có một vài sự ép buộc như là các tần số củabộ phận được thông thường hóa trong một vùng và nó cũngđược duy trì Từ ls = hs - 1, dĩ nhiên là ta có thể xử lý tương tựđể tính ls mà không cần các bước 3 và bước 4

Hình 8: Thuật toán lấy tần số theo cây ngầm định.

Get_frequecy(C,s)

{1- Đặt i = s và hs = 02- Trong khi i != 0 làmĐặt hs = hs + F[i]

i = backward(i)3- Đặt i = s4- Trong khi i < n làm Đặt F[i] = F[i] + increment

i = forward(i)5- return hs }

Trang 27

Hàm get_frequency(C, s) trả về sự tích lũy tần số của các kí

hiệu đứng trước và bao gồm cả s ở trong bảng alphabet Giả sửrằng mảng F và kích thước của bảng là n là thành phần của ngữcảnh C, với C là cấu trúc dữ liệu đã dùng Khi một kí hiệu đượcđọc vào thì hs được tính lại, biến đếm tần số của kí hiệu là

increment cũng được tăng Biến increment cũng là một thành phần

- initial_size là độ dài gốc của ngữ cảnh.

- max_length, length độ dài tối đa của cây ngầm định và độ

dài hiện tại

- nSingletons là số các kí hiệu có tần số bằng 1

- type là kiểu của ngữ cảnh đó, ở đây có hai iểu của type là STATIC và DYNAMIC

- nSymbol là số kí hiệu đã được mã hoá

- total là tổng của các tất cả các tần số của các kí hiệu

- *tree con trỏ của cây ngầm định

- increment biến tăng dùng trong thuật toán của cây ngầm định

- most_freq_symbol là kí hiệu có tần số lớn nhất.

- most_freq_count là biến đếm các kí hiệu có tần số lớn

Trang 28

I.2 Mô hình từ

Với mô hính từ ta xem đầu vào dưới dạng các từ và khôngtừ xen kẽ lẫn nhau Do đó các từ và không trở từ trở thành các kíhiệu được nén do vậy chúng ta có nhiều cách để nén chúng.Nhìn chung hiệu quả nhất là mô hình bậc không cho các từ và môhình bậc khác không cho các không từ Ở đây nó cho rằng nội dungcác văn bản là sự xen kẻ giữa các từ và không từ Do đó phải cóhai mô hình khác nhau được dùng luân phiên ở đây cho mỗi loại kíhiệu Thông thường thì kí hiệu thoát được mã hoá trước và tiếptheo các từ mới xuất hiện, và các từ này được cấu tạo bởi các

kí tự liên tiếp nhau Đối với các kí tự ta có thể dùng mô hìnhđơn giản hơn ví dụ như mô hình kí tự bậc không

Các mô hình nén từ đặc biệt thích hợp cho các loại văn bảnlớn, bởi vì các từ thường được lưu trữ với mục đích để làm chỉmục, do đó các chỉ mục này có thể được dùng như một phầncủa mô hình nén

Làm thế nào để chia một văn bản thành các từ và không từxen kẽ nhau? Một sơ đồ đặc biệt đó là coi sự chấm câu như làmột phần của từ Cách chia này không mang lại hiệu quả nén,nhưng nó mang lại kết quả là danh sách các từ tiện lợi cho mụcđích lập chỉ mục

Một vấn đề khác cần chú ý ở đây là việc xử lý các con số.Nếu các chữ số được xem như các kí tự thì một hàng liên tiếpcác chữ số sẽ được xem như là một từ Sự phân phối tần sốcủa các số khác xa với sự phân phối tấn số của các từ do đónếu ta sử dụng cách xử lý của các từ để xử lý các số thì nókhông mang lại hiệu quả nén cao Do đó ta sẽ chia các số dài hơnthành các số ngắn bằng cách ta giới hạn độ dài tối đa các chữsố trong một số Nếu số nào dài quá thì ta sẽ tách số đó thànhhai phần

Thuật toán dùng cho mô hình từ bậc không được mô tả như ở

hình dưới Dùng hàm get_word() để đọc vào danh sách cả các

từ Rồi nén danh sách tương ứng đó, với cấu tạo của các từ làdãy liên tiếp các kí tự tại lần xuất hiện đầu tiên rồi thiết lậpmột từ mã để dùng cho các lần xuất hiện sau đó Ởí đây sửdụng ba cấu trúc dữ liệu là các ngữ cảnh gồm: C, W và L Trongđó:

 C: là tập hợp các kí tự có giá trị trong thành phần của cáctừ

Trang 29

 L: là tập hợp các độ dài của các từ xác định.

Cấu trúc D là từ điển để chuyển đổi một từ trong số cáctừ tương ứng với số các từ đã gán trong lần xuất hiện đấu tiên

ở trong danh sách đầu vào

Hình 9: Thuật toán mã hóa file dùng mô hình từ bậckhông

Ở đây hàm cread_context() dùng để khởi tạo các giá trị của

các hành phần một ngữ cảnh thông thường nó được khởi tạonhư sau:

Encode-file()

{

1- Đặt W = creat_context()

Install_symbol(W, end_of_message) 2- Đặt D = make_empty_dictionary()

3- Đặt C = creat_context()

Trong khi kí tự c còn hợp lệ làm

Install_symbol(C, c) 4- Đặt L = creat_context()

Trong khi độ dài l còn hợp lệ làm

Install_symbol(L, l)

5- start-encode()

6- Trong khi còn các từ làm

Đặt word = read_one_word() Đặt w = lookup_word_number(D, word) Nếu (encode(W, w) = escape_transmitted) thì

Encode(L, length(word)) Với mỗi kí tự c trong từ làm Encode(C, c)

Insert_into_dictionary(D, word) Install_symbol(W, w)

7- encode(W, end_of_message)

8- finish_encode()

}

Trang 30

Context *create_context(int length, int type)

Hàm install_symbol() dùng để cài đặt một kí tự vào trong

một ngữ cảnh Tức là nó gán các giá trị của kí tự cho các thànhphần của biến ngữ cảnh có liên quan

I.3 Mô hình kí tự

Với mô hình kí tự thì nó dễ thực hiện nhưng hiệu quả nénkhông cao Chương trình đọc vào lần lượt các kí tự rồi ến hànhmã hoá chũng dựa vào xác suất xuất hiện của chúng Ở đâychương trình xét các kí tự trong bảng mã ASCII mở rộng, mỗi mãASCII mở rộng có 8 bit

Thuật toán của dùng cho mô hình kí tự bậc không được môtả ở các hình dưới đây:

Encode_file( )

{

1- Đặt C = creat_context( ) Install_symbol(C, end_of_message)

2 – Trong khi c != end_of_message làm

install_symbol(C, c)

3- start_encode() 4- Trong khi c != end_of_message làm Đặt c = read_one_character()

Encode(C, c)

5- encode(C, end_of_message) 6- finish_encode()

}

Trang 31

Hình 10: Thuật toán mã hóa file dùng mô hình kí tự bậc không

Trong cả hai trường hợp mã hoá và giải mã, ngữ cảnh Cđược khởi tạo để chứa đựng các kí tự có giá trị cộng thêm kí

hiệu mở rộng là end_of_message

Hình 11: Thuật toán mã hóa file dùng mô hình kí tự bậc không

Phần trên sử dụng các mô hình bậc không để nén dữ liệu.Nếu chúng ta chuyển đến bậc cao hơn thì sẽ đạt được hiệu quảnén tốt hơn Khi sử dụng mô hình bậc cao thì nó đòi hỏi nhiềungữ cảnh hơn do đó thời gian lâu hơn Với mô hình bậc một cầntối đa là 256 ngữ cảnh, mô hình bậc hai cần tối đa 256*256(65536) ngữ cảnh và mô hình bậc ba cần có tối đa khoảng mườisáu triệu (256256256) bảng ngữ cảnh để làm việc Chúng ta sẽphải đọc vào một lượng văn bản lớn trước khi các ngữ cảnh nàythống kê đủ để bắt đầu nén dữ liệu, và rất nhiều bản của cácngữ cảnh này sẽ không bao giờ được sử dụng hết gây lãng phíbộ nhớ của máy tính Ví dụ một khi nén văn bản tiếng Anh

chương trình không cần phải cấp không gian cho bảng QQW bởi vì

nó sẽ không bao giờ xuất hiện

Để giải quyết vấn đề này ta thiết lập xác suất khởi tạocủa tất cả các ký hiệu đến không cho ngữ cảnh đưa ra và quay

decode_file( )

{

1- Đặt C = creat_context( ) Install_symbol(C, end_of_message)

2 - Trong khi c != end_of_message làm install_symbol(C, c)

3- start_encode()

4- Lặp Đặt c = decode(C)

Nếu c = end_of_message thì

break Khác

write_one_character(c) 5- finish_encode( )

}

Trang 32

về ngữ cảnh khác khi không nhìn thấy ký hiệu xuất hiện phíatrước Làm thế nào chúng ta sử dụng ngữ cảnh quay về sau khiphát đi một mã thoát ? Ở đây chúng ta trả về một ngữ cảnhngầm định gọi là ngữ cảnh thoát Ngữ cảnh thoát không bao giờđược cập nhật, điều này có nghĩa rằng sử dụng nó thôngthường sẽ không cung cấp bất kỳ sự nén nào.

Trong mô hình bậc cao nhất, có một cách tốt hơn chỉ quay trởvề ngữ cảnh ngầm định một cách tự động Nếu một ngữcảnh đang tồn tại không thể mã hóa ký hiệu, quay về ngữ cảnh

bậc nhỏ hơn tiếp theo Ví dụ nếu ngữ cảnh đang tồn tại là REQ, và U cần được mã hóa cho lần đầu, một mã thoát sẽ được sinh

ra Tiếp theo, chúng ta hạ xuống mô hình bậc hai để cố gắng mã

hóa ký tự U sử dụng ngữ cảnh EQ Nó tiếp tục giảm xuống cho

đến ngữ cảnh bậc 0, nếu mã thoát vẫn được sinh ra ở bậc 0chúng ta quay về một ngữ cảnh đặc biệt bậc -1 mà ngữ cảnhkhông bao giờ được cập nhật và thiết lập cho sự khởi tạo đểcó một bộ đếm cho mọi ký tự có thể Vì vậy nó được bảođảm để mã hóa mọi ký hiệu

Ở trên ta có nói đến mã thoát, vậy mã thoát là gì? Mã thoát

là một ký hiệu đặt biệt (giống như END_OF_MESSAGE) mã này

chỉ ra cho chương trình biết cần thoát khỏi ngữ cảnh hiện thời Khimột ngữ cảnh phát ra một ký hiệu thoát, nó thường quay vềngữ cảnh bậc thấp hơn, nó có thể quay về ngữ cảnh thoát, mộtngữ cảnh mà không bao giờ được cập nhật Ngữ cảnh này chứa

257 ký hiệu, mỗi ký hiệu này có số đếm bằng một Việc nàybảo đảm bất kỳ ký tự nào bắt gặp trong thông điệp đều có thểđược mã hóa bởi việc xuất ra một mã thoát ngữ cảnh hiện thờivà bằng cách mã hoá ký hiệu sử dụng ngữ cảnh thoát

Ví dụ cần mã hóa cho ký hiệu u là một ký hiệu mới Như đã

giới thiệu khi sử dụng mã thoát nó tạo một sự khác nhau lớn

Ví dụ để mã hoá ký hiệu u đầu tiên lấy 8 bit để mã hóa Mã thoát không lấy bit nào để mã hóa và trong ngữ cảnh thoát u có xác suất 1/257 Sau đó u được thêm vào bảng và cho số đếm bằng một Lần xuất hiện tiếp theo của u sẽ yêu cầu chỉ một bit để mã hóa, khi đó nó có xác suất 1/2 Khi u đã xuất hiện 16 lần,

trong khi mô hình trước vẫn lấy 4 bit để mã hóa nó, mô hình điềukhiển thoát sẽ lấy 0.06 bit

Mã thoát giải phóng chương trình khỏi gánh nặng các mô hìnhcủa các ký tự mà các ký tự này không bao giờ xuất hiện Điềunày cho phép mô hình điều chỉnh tốc độ để thay đổi xác suất vànhanh chóng giảm số bit cần để mã hóa các ký hiệu có xác suất

Trang 33

Bộ mã hóa xử lý cho sự cài đặt riêng này của một mô hìnhnhiều bậc yêu cầu chỉ một vài thay đổi của chương trình trước.Nó phải kiểm tra một ký hiệu biểu diễn trong ngữ cảnh đưa ra.Nếu không, mã thoát được mã hóa thay thế

Trang 34

CHƯƠNG V

CHƯƠNG TRÌNH VÀ THỰC NGHIỆM

Chương trình thực hiện trên ngôn ngữ C và chạy trên hệđiều hành Linux Do đó nó không được đẹp về mặt hình thức

I.1 Mã hóa

Khi mã hóa dùng các thao tác di chuyển /cộng các số nguyênđể tính toán, với độ chính xác thấp đã được chấp nhận, trongmột vài cấu trúc nó thực thi nhanh hơn Một đặc điểm nổi bậtcủa mã hóa là dùng sự chính xác rõ ràng khi thực hiện Tổngtần số có thể lên đến 30 bit (giả sử rằng số nguyên là 32 bit,hoặc hơn nữa là n - 2 cho n bit các số nguyên) Tổng tần số cóthể có lên đến giá trị rất lớn là 1.073.741.824 trước khi các tầnsố cần phải được chia đều Giá trị ngầm định của số bit dùngcho việc đếm tần số là 27

I.2 Mô hình

Mô hình từ thực hiện việc đọc vào dãy liên tiếp các từ vàkhông từ xen kẽ nhau Sau khi đọc vào dãy các từ và không từ nóđưa vào bảng lộn xộn và sắp xếp lại chúng để tìm số thứ tựtương ứng của số lượng các từ để gửi đi cùng với ngữ cảnhtương đương của từ và không từ Một ngữ cảnh cất giữ tấn sốtương ứng với thứ tự của các kí hiệu Đây là mô hình minh họacác ưu điểm của cách thực hiện mã hóa mới khi dùng bảngalphabet lớn và sự thao tác của mmọt ngữ cảnh trong mộtchương trình riêng lẽ

Một mô hình kí tự bậc không thích ứng là cái cụ thể tươngđương để minh họa việc thực hiện của tập CACM Tuy nhiên nómang lại tỷ số nén thấp

Trang 35

I.3 Các mô đun

Chương trình được viết dưới nhiều mô đun khác nhau đểthuận lợi cho việc theo dõi và sửa lỗi, nó cũng đảm bảo chochương trình được rõ ràng hơn Gồm có bảy file nguồn (.c), năm filetiêu đề (.h), một file mở rộng (.i) và một file Makefile

main.c: thực hiện công việc nhận các đối số dòng lệnh vàthực hiện nén hay giải nén

word.c: thực hiện công việc xây dựng mô hình từ

char.c: thực hiện công việc xây dựng mô hình kí tự

bitio.c: chứa các hàm thực hiện việc vào ra ở mức bit vàmức byte

stats.c: chứa các hàm thực hiện việc duy trì và tính toán tầnsố của các kí hiệu

arith.c: chứa các hàm thực hiện việc mã hóa và giải mã các

I.4 Cách dùng

Chương trình sử dụng giao diện giao tiếp chung cho cả hai quátrình nén và giải nén thông qua việc lựa chọn các thông số(thực tế thì ở trong cùng chương trình) Kết quả đưa ra ở đầu rachuẩn stdout Nếu không chỉ định file đầu vào đầu vào sẽ lấy dữliệu từ đầu vào chuẩn stdin Một trong các thông số -e hoặc -dphải được chọn để thực hiện việc nén hay giải nén

Để tìm hiểu cách dùng thì gõ tên của chương trình thực thi

Cách dùng:

Tên chương trình.exe [ -e [ -t s ][ -m n ]| [ -d ]| [ -v ][ filename1 ][ filename2 ]

Trang 36

Trong đó:

-e: chọn nén

-t: chọn mô hình Có mô hình từ và mô hình kí tự

-m: chọn giới hạn kích thước bộ nhớ từ 1 đến 255 MB Chỉchọn khi dùng mô hình từ

-d: chọn giải nén

-v: đưa ra các thông số của quá trình thực hiện như: tỷ sốnén, thời gian thực hiện, v.v

Filename1: là tên file cần nén hoặc giải nén

Filename2: là tên file lưu kết quả nén hoặc giải nén

II.1 Giới thiệu

Phần này trình bày kết quả thực nghiệm khi chạy chươngtrình Các thí nghiệm tiến hành với các kiểu tệp văn tiếng Anh là(.txt) và (cpp) Việc thực nghiệm chương trình tiến hành với hai

mô hình là mô hình từ và mô hình kí tự Có so sánh với kết quảnén của Gzip và giải nén Gunzip trên hệ điều hành Linux Thựcnghiệm chương trình trên máy có cấu hình như sau: bộ vi xử lýPenium(r) Intel MMX (TX), 32 MB RAM

Các kết quả được lấy là trung bình cộng của ba lần tiếnhành khác nhau Với các file (.txt) dùng để thí nghiệm thì đơnthuần chỉ gồm các kí tự và các chữ số còn với các file (.cpp) thìngoài các kí tự và các chữ số nó còn có các kí hiệu khác nhưcác dấu <, >, +, : ,v.v và các kí hiệu như &, %, #,v.v

II.2 Kết quả thực nghiệm

II.2.1 Kết quả thực nghiệm với các file kiểu *.txt

Để thể hiện kết quả thực nghiệm và tiện cho việc so sánh

ta sử dụng biểu đồ hình cột Với trục đứng biểu thị tỷ số nén

(tính bằng %) đạt được của các mô hình, trục nằm ngang biểu thị độ lớn của các file (đơn vị là MB) thí nghiệm.

Độ lớn file (MB)

Trang 37

0 20

Thời

gian (s)

Độ lớn file (MB)

Hình 12: So sánh tỷ số nén giữa các mô hình từ, kí tự với nén Gzip

Qua hình vẽ ta thấy rằng nén với mô hình từ là có tỷ số nénsố nén tốt nhất và đạt tỷ số nén tương đối tốt trung bìnhkhoảng 19% Tỷ số nén của mô hình kí tự thấp do đó khó có khảnăng trong thực tế

1.Thời gian nén

Để thể hiện kết quả thực nghiệm và tiện cho việc so sánh

ta sử dụng biểu đồì hình cột Với trục đứng biểu thị thời gian

thực hiện (tính bằng s) nén của các mô hình, trục nằm ngang

biểu thị độ lớn của các file thí nghiệm

Hình 13: So sánh thời gian nén của các mô hình từ, mô hình kí tự với nén gzip

Qua biểu đồ ta thấy mô hình kí tự có thời gian nén lâu nhấtvà lâu hơn rất nhiều so với thời gian nén của mô hình từ và néngzip Để đo được thời gian thực hiện nén của gzip ta tiến hành đobằng đồng hồ bấm giây

1.Thời gian giải nén.

Để thể hiện kết quả thực nghiệm và tiện cho việc so sánh

ta sử dụng biểu đồì hình cột Với trục đứng biểu thị thời gian

thực hiện (tính bằng s) giải nén của các mô hình, trục nằm

ngang biểu thị độ lớn của các file thí nghiệm

0 20 40 60 80 100

1 3 5 7 10 15 20 25 30

Mô hình kí tự

Mô hình từ Gunzip

Thời gian

(s)

Độ lớn file (MB)

Trang 38

Hình 14: So sánh thời gian giải nén giữa mô hình từ, kí tự với giải nén bằng gunzip

So với thời gian nén thì thời gian giải nén của gunzip là nhanhnhất và nhanh hơn nhiều so với các mô hình từ và mô hình kí tự

II.2.2 Kết quả thực nghiệm với các file kiểu *.cpp

Các bước tiến hành thí nghiệm giống như khi tiến hành vớikiểu file *.txt Cách thể hiện trên biểu đồ cũng giống như với ởtrên Ta cũng tiến hành với mô hình từ, mô hình kí tự và nén vàgiải nén bằng gzip và gunzip

1.Thời gian nén

Hình 15: So sánh thời gian nén của các mô hình từ, mô hình kí tự với nén gzip

Đối với kiểu file này thì thời gian nén của mô hình từ là tồinhất và của gzip là tốt nhất

1.Thời gian giải nén

Độ lớn file (MB)

Thời gian

(s)

0 20 40 60 80

1 3 5 7 10 15 20 25 30

Mô hình kí tự

Mô hình từ Gzip

0 20 40 60 80 100

1 3 5 7 10 15 20 25 30

Mô hình kí tự

Mô hình từ Gunzip

Độ lớn file (MB)

Thời gian

(s)

Trang 39

Hình 16: So sánh thời gian giải nén giữa mô hình từ, kí tự với giải nén bằng gunzip

Với kiểu file này thì thời gian giải nén bằng mô hình kí tự quálâu so với các phương pháp khác Còn giải nén bằng gunzip thì rấtnhanh

NGHIỆM

Qua các kết quả thực nghiệm thể hiện bằng biểu đồ ởtrên nhằm đưa ra cách nhìn tổng thể về phương pháp nén mãhóa Số họcvà so sánh nó với phương pháp khác Các kết quả sosánh này chỉ mang tính chất tương đối vì nó phụ thuộc vàonhiều yếu tố khác nhau như quá trình đọc ghi ở mức bit và mứcbyte ngoài ra còn phụ thuộc vào kiểu dữ liệu lựa chọn

Qua kết quả thực nghiệm ta thấy rằng với mô hình từ thìthời gian giải nén luôn nhỏ hơn thời gian nén Với mô hình kí tự thìngược lại tức là thời gian nén luôn nhỏ hơn thời gian giải nén

0 20 40 60 80

1 3 5 7 10 15 20 25 30

Mô hình kí tự

Mô hình từ Gzip

Độ lớn file (MB)

Tỷ số

nén (%)

Trang 40

Thời gian nén và giải nén, tỷ số nén của mô hình từ xấp xỉvới thời gian nén và giải nén của phương pháp nén gzip và giải néngunzip Điều này chứng tỏ rằng nén số học dùng mô hình từmang lại tỷ số rất tốt

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

Nguồn tham khảo

Tài liệu tham khảo Loại Chi tiết
[1] Mark Nelson vaì Jean-Loup Gally, The Data Copression Book, M&amp;T Books, 1996 Sách, tạp chí
Tiêu đề: The Data Copression Book
[2] Ian H. Written, Alistair Moffat vaì Timothy C. Bell, Magazine Gigabyte: Compressing and Indexing Documents and Images,Van Nostrand Reinhold, New York, 1994 Sách, tạp chí
Tiêu đề: MagazineGigabyte: Compressing and Indexing Documents and Images
[3] Ian H. Written, Alistair Moffat, Radford M. Neal, "Arithmetic Coding Revisited" 1995 Sách, tạp chí
Tiêu đề: Arithmetic CodingRevisited
[4] Gilbert Held, Thomas R. Marshall, Data and Image Compression, John Wiley &amp; Sons Ltd, 1996 Sách, tạp chí
Tiêu đề: Data and Image Compression
[5] Alistair Moffat,Timothy C.Bell vaì Ian H.Witten, " Lossless Compression for Text and Images", 1997 Sách, tạp chí
Tiêu đề: LosslessCompression for Text and Images
[6] Phạm Văn Âút, Kỹ Thuật Lập Trình C Cơ Sở và Nâng Cao, Nhà Xuất Bản Khoa Học Kỹ Thuật, 1995 Sách, tạp chí
Tiêu đề: Kỹ Thuật Lập Trình C Cơ Sở và Nâng Cao
Nhà XB: Nhà Xuất Bản Khoa Học Kỹ Thuật
[7] Phan Kim Long, Cẩm nang lập trình trong C++, Nhà Xuất Bản Đồng Nai, 1998 Sách, tạp chí
Tiêu đề: Cẩm nang lập trình trong C++
Nhà XB: Nhà Xuất BảnĐồng Nai

HÌNH ẢNH LIÊN QUAN

Bảng 3: Bảng xác suất của các kí hiệu -  Kỹ thuật nén số liệu mã hóa Số học
Bảng 3 Bảng xác suất của các kí hiệu (Trang 17)

TỪ KHÓA LIÊN QUAN

TRÍCH ĐOẠN

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

TÀI LIỆU LIÊN QUAN

w