www.tinhgiac.com de tai lempel ziv encoding tài liệu, giáo án, bài giảng , luận văn, luận án, đồ án, bài tập lớn về tất...
Trang 1
TRƯỜNG ĐẠI HỌC ĐIỆN LỰC Khoa Điện Tử Viên Thông
- && lL &<s -
=,
DAI HOC DIEN LUC
ELECTRIC POWER UNIVERSITY
BAI TAP NHOM MON LY THUYET THONG TIN
DE TAI :“LEMPEL-ZIV ENCODING”
Gling vién b§ mén: Vit Ngọc Cham Nhóm Sink Vién Thc ên: Nhóm to
Sink vién Kip: D 2ZÐ7/ V7?
Trang 2
TRUONG DAI HQC DIEN LUC Khoa Điện Tử Viên Thông
MON LY THUYET THONG TIN
LEMPEL-ZIV ENCODING
Danh Sách Các Thành Viên Nhóm Số 10 1: NGUYEN QUOC QUAN
2: NGUYEN VAN HUNG 3: NGUYEN VAN KHOAI 4: HOANG VAN LAM
5: NGUYEN VAN TIEN LAM
Hà nội ngày II tháng 9 năm 2012
Trường Đựi Học Điện Lực Khoa Điện Tử Viễn T: hông Nhớm 10
Trang 3
Muc Luc
1.Danh sach thanh vién trong nhóm 10 1 2.Lời g1ới thiỆU - chê 2 3.Tổng quan về nén giữ liệu .- - << 4
4 Cơ sở một số phương pháp nén 5
5 Tổng quan về Lempel-ziv coding .- - 6 6.Từ điển mã hóa . - - ST 222122211111 cày 7
7 Họ thuật toán Lempel-Z⁄1v - 8 + Thuật toán LZ78 0 occ cece eee eee ceeenneeeeveeueuueseeens 8
+Thuật toán LZW HS ve 11
S.Kt LUan eee cecccececcceeeeeeececeeeeeseeeeeseeeeeeeeeeeeeeeass 19
9.,Tài liệu tham khảo .-. -. - 21 2.Mục lục QQ nen 22
Trường Đựi Học Điện Lực Khoa Điện Tử Viễn T: hông Nhớm 10
Trang 4
| ời giới thiệu
Ngàu nau thông tín là một phan gan kết không thê thiếu của con người
trong cuộc song hiện đại việc trao đôi thông tín là công việc thường xuuên và được coi như là bình thường của mỖi chúng ta.C_ó rất nhiều hình thức thể hiện khác nhau của thông tín như âm thanh, hình ảnh,tiếng nóí,chữ viết và các loại kú tự C hinh vi vay ma cling nay sinh ra rất nhiều vẫn đề bức thiết xung quanh việc chuyén tai thông tín từ người nàu tới người khác cũng như đến vẫn đề lưu trữ bạn không thể bỏ 2o Gigabyte dung lugng 6 nhớ máu ví tính của bạn ra chỉ để lưu trữ và ghi nhớ một thông tin không quan trọng lắm, hoặc trong việc lưu trữ nó \/¡ dụ như dung lượng tập tín mà quá lớn nó sẽ ảnh hưởng vân đề trao đối thông tín bạn không thể chờ cả ngàu dé cap nhap một lượng tín quá lớn mà không cần thiết lắm cho cuộc sống của
ban.C hinh vi vậu mà người ta mới nghĩ ra một thuật toán mà làm thế nào đó để có thê giảm dung lượng thông tin cần trao đôi đó xuống nhằm mục đích đơn giản và thuận tiện hơn trong việc trao đôi và lưu trữ thông tin Dé giải quuêt vẫn đề đó, các thuật toán nén đã được ra đời
Ban đầu với phương pháp mã hóa loạt dai REC (Run | ength Coding),
phat hiện một loạt các bít lặp lại Day la phuong pháp đơn giản nhất
Nguuên tắc cơ bản của phương pháp nàu là phát hiện một kú tự có số lần xuất hiện liên tiếp vượt qua một ngưỡng cô định nào đó _] rong trường hợp nàu day sẽ được thau thế bằng 5 kú tự: Ky tự thứ nhất là kú tự đặc
biệt,thông báo day tiếp là day đặc biệt Ky tự thứ hai chỉ số lần lặp Ky tự thứ ba chỉ kú tự lap Nhu vay tu tưởng của phuong pháp nàu là thau thế một day bang một day khác ngắn hơn tuân theo một ngưỡng nào đó, và
thông thường ngưỡng có giá trị là +Kéế đến là phương pháp Fluffman, dựa
vào mô hình thong kê, tính tần suất xuất hiện của các kú tu, rồi gán cho các
Trường Đựi Học Điện Lực Khoa Điện Tử Viễn T: hông Nhớm 10
Trang 5
ky tự có tần suất cao một từ mã ngắn, các kú tự tần suất thập từ mã dài [hương pháp nàu phải lưu giữ lại bảng mã gan kèm cùng với dữ liệu nén Một phương pháp nén hoàn toàn khác là thuật toán nén dữ liệu theo từ
điền cơ sở: (Dictionary-based compression) (62 loai:
Ma hóa từ điển tĩnh (static dictionary coding)
Mã hóa từ điền động (dynamic dictionary coding)
Có rất nhiều thuật toán Ap dung kỹ thuật nàu như| Z77,LZR, L799, | ZƑ] nhưng trong nỘi dung bài báo cáo nàu, chúng ta chỉ đề cập đến hai thuật toán chình la:
+ | hudt Toán] /78 + Thuât toán | Z/\W
Nhin chung khong có phương pháp nén tong quat nao cho két qua la tốt
đối với tất cả các loại tập tín mà ta cần mã hóa cả.Năm 1985 Sperry nop một bằng sáng chế cho một thuật toán phát triển bởi | erry Welch, mét
nhân viên tại | rung tam nghién cứu Sperry Thuật toán nàu la bién thé
trên một kỹ thuật nén dữ liệu lần đầu tiên được đề xuất bởi Jakob Ziv va Abraham | empel năm ¡978 của Welch Kỹ thuật cua Welch la ca hai don gian hon va nhanh hon Ong đã xuất bản một bài báo trong van dé 19384
của Tap chi may tinh IF FF mo ta kỹ thuật Kỹ thuật nàu của erry Welch tré nén rat phô biến và được chấp nhận rộng rãi Đó chính là thuật toán mã hóa mà ngàu nau người ta gọi nó với cái tên là | empel-Ziv-Welch
Ƒla nội ngàu ï Ï tháng 9 nam 2012
C ác thành viền nhóm 1O
Trường Đựi Học Điện Lực Khoa Điện Tử Viễn T: hông Nhớm 10
Trang 6
I: TONG QUAN VE NEN GIU LIEU
I.1:Nén giữ liệu là gì?
Nén giữ liệu được định nghĩa đơn giản như sau: Nén đữ liệu là quá trình làm giảm lượng thông tin “dự thừa” trong dữ liệu gốc và do vậy, thông tin thu được sau nén thường nhỏ hơn dữ liệu gốc rất nhiễu
Ngoài thuật ngữ “nén dữ liệu ”, do bản chất của kỹ thuật này nó còn
có một số tên gọi khác như: giảm độ dự thừa, mã hóa ảnh gốc
1.2:Ty Số Nén ( Compression rate )
Compression rate được định nghĩa như sau: Tỷ số nén là tý lệ giữa kích thước file đã nén và kích thước file khi mà chưa nén + Công thức tỷ số nén như sau:
Compressed Size
Compression Ratio = P Uncompressed Size =
Chú thích: + Compression rate: Tỷ số nén
+Compressed Size: Kich cé file sau nén +Uncompressed Size :Kich cé file truéc nén +Don vi thuong ky hiéu là tỳ số ví dụ như 1/5 +Ví dụ ở đây ta có một file gốc kích thước 10M sau khi nén thì dung lượng giảm xuống còn 2M.Vậy rõ ràng Tỷ số nén ở đây là 2/10=1/5 Và thường được ký hiệu là tỷ lệ rõ ràng là 1/5
I3: Khoảng Tiết Kiệm Khong Gian (Space savings)
M@ Space savings: được định nghĩa như sau nó là sự giảm kích thước tương đối so với kích thước không nén, đơn vị ở đây được dùng là don v1 % +Công thức tính như sau Compressed Size Space Savings = 1 — = = Uncompressed Size
Chú thích: +Space Savings : Khoảng tiết kiệm không gian
+Compressed Size: Kich cỡ file sau nén +ƯUncompressed S1ze :Kích cỡ file trước nén +Đơn vị thường ký hiệu
+Ví dụ Ta có tỷ lệ nén là 1/5 thì sẽ mang lại một khoảng tiết kiệm không gian là 1 - 1/5 = 0.8, vậy sau khi nén ta tiết kiệm được 80% không gian bộ nhớ so với trước khi nén
Đối với các tín hiệu của kích thước không xác định, chẳng hạn như tuyén âm thanh và video, tỉ lệ nén được định nghĩa về tốc độ đữ
Trường Đựi Học Điện Lực Khoa Điện Tử Viễn T: hông Nhớm 10
Trang 7
liệu khi không nén và khi đã nén thay vì kích thước đữ liệu như tài liệu đã nêu ở trên Và thay vì tiết kiệm không gian, người ta nói về tốc
độ đữ liệu tiết kiệm, được định nghĩa là giảm tốc độ đữ liệu liên quan đến tốc độ đữ liệu không nén
+ Công thức tính trong trường hợp này sẽ là:
Compressed Data Rate
Compression Ratio =
Uncompressed Data Rate
Và Tỷ lệ tiết kiệm giữ liệu Data rate saving sẽ là:
Compressed Data Rate
Data Rate Savings = Ì —
= Uncompressed Data Rate Chu thich: + Compression ratio : Ty sé nén
+Compressed Data Rate : Toc d6 nén giữ liệu
+Uncompressed S1ze :Tôc độ khi chưa nén giữ liệu
+ Vĩ dụ, bài hát không nén ở định dạng CŨ có tốc độ đữ liệu 16 bit / kênh x
2 kénh x 44,1 kHz = 1,4 Mbit/s, trong khi AAC cac tap tin trén iPod thường
được nén đến 128 kbit/s, ty lé nang suất nén của 0,09, một khoản tiết kiệm
dit liéu toc độ 0,91, hoặc 91%
+ Khi tý lệ dữ liệu không nén được biết, ty lé nén co thé duoc suy ra tu tốc độ dữ liệu nén
H: CƠ SỞ CỦA MỘT SỐ PHƯƠNG PHÁP NÉN
Nguyên tắc của các chương trình nén nói chung giống nhau: Tận
dụng sự lặp lại của đữ liệu, các chuôi đữ liệu lặp lại được thay thê bởi
con trỏ chung có độ đài bé hon
Néớn nhằm mục đích giảm kích thước đữ liệu bằng cách loại bỏ dự thừa dữ liệu Việc xác định bản chất các kiểu dự thừa đữ liệu rất có
ích cho việc xảy dựng các phương pháp nén dữ liệu khác nhau Nói một cách khác, các phương pháp nén đữ liệu khác nhau là do sử dụng các kiểu dự thừa đữ liệu khác nhau.Người ta coi có 4 kiểu dự thừa giữ liệu và chính vì thế cũng có bốn phương pháp mã hóa cơ bản hiện nay đó là:
Trường Đựi Học Điện Lực Khoa Điện Tử Viễn T: hông Nhớm 10
Trang 8
LI.1:Phương pháp m4 hoa Huffman
Trong một dãy ký tự, có một số ký tự có tân suất xuất hiện nhiều hơn một số dãy khác Do vậy, ta có thê mã hoá dữ liệu một cách cô đọng hơn Các
dãy ký tự có tần xuất cao được thay bởi một từ mã nhị phân với số bít nhỏ;
ngược lại các dãy có tân xuất thấp sẽ được mã hoá bởi từ mã có nhiều bít
hơn Đây chính là bản chất của phương pháp mã hoá Huffman
LI.2: Phương pháp mã hoá Run Length Coding
Trong một số tình huống như trong ảnh, 1 ký hiệu (bít "0" hay bít "1") được lặp đi lặp lại một số lần Kỹ thuật nén dùng trong trường hợp này là thay dãy lặp đó bởi dãy mới gồm 2 thành phân: số lần lặp và kí hiệu dùng để mã Phương pháp mã hoá kiểu này có tên là mã hoá loạt dài RLC (Run Length Coding)
II3:Phương pháp mã hóa Lempel-Ziv Welch
Có thể có dãy ký hiệu nào đó xuất hiện với tần suất tương đỗi cao Do vậy, có thê mã hoá bởi ít bít hơn Đây là cơ sở của phương pháp mã hoá kiểu từ điển do Jacob Ziv và Abraham Lempel đề ra vào năm 1977-1978 và do đó có tên gọi là phương pháp nén LZ77, LZ7§ Năm 1984, Terry Welch đã cải tiến hiệu quả hơn và đặt tên là LZW (Lempel-Ziv- Welch).Do đó kỹ thuật
được cải thiện hơn và nhanh hơn H4: Phương pháp mã hoá dự đoán
Do sự phụ thuộc lẫn nhau của đữ liệu, đôi khi biết được ký hiệu (giá trỊ)
xuất hiện tại một vị trí, đồng thời có thể đoán trước sự xuất hiện của các giá
trị ở các vị trí khác nhau một cách phù hợp.Chắng hạn, ảnh biểu diễn trong
một lưới hai chiều, một số điểm ở hàng dọc trong một khối đữ lệu lại xuất
hiện trong cùng vị trí ở các hàng khác nhau.Do vậy, thay vì lưu trữ dữ liệu,
ta chỉ cần lưu trữ vị trí hàng và cột.Phương pháp nén dựa trên sự dư thừa này
gọi là phương pháp mã hoá dự đoán
Trường Đựi Học Điện Lực Khoa Điện Tử Viễn T: hông Nhớm 10
Trang 9
Ill: TONG QUAN VE LEMPEL-ZIV CODING
Jacob Ziv và Abraham Lempel đã mô tả kỹ thuật dựa trên từ điển bằng mã
hóa LZ77 và LZ78 Ý tưởng dựa trên việc thay thé 1 cum ki tự bang mot con trỏ, trỏ đến vị trí xuất hiện trước đó cha cum kí tự.LZW là mã hóa trong ho
LZ, hoan thién hon LZ77-LZ78 va dang được sử dụng phố biến hiện nay
LIL1: Lempel-Ziv (LZ)
Thuật toán L⁄⁄ (Lempel-Z1v): là thuật toán nén dữ liệu theo từ điên cơ so (Dictionary-based compression)
Được tính bằng tỷ số giữa tổng số bit cần nén 1 từ hay 1 văn bản (vd:mã ascci-7bit) và số bít sử dụng đề nén trong bộ từ điển đó Sử dụng một bảng chứa tất cả các chuỗi ký tự có thể xuất hiện trong
văn bản và được chứa trên cả bộ mã hóa và giải mã
Bộ mã hóa thay vì gửi các từ riêng lẻ, nó chỉ gửi chỉ số của từ được
lưu trong bảng Bộ giải mã sẽ truy cập vào báng xử lý để tái tạo lại
văn bản đó
Như các thuật toán tĩnh khác, thuật toán L⁄Z sử dụng Ì từ điển chung
cho cả mã hóa và giải mã
Một số gói xử lý từ có liên quan tới từ điển được sử dụng cho việc
kiêm tra chính tả và nén văn bán Thông thường trong khu vực gồm
khoảng 25000 từ, do đó cần đùng15 bit để mã hóa Vì vậy nếu dùng
thuật toán L⁄Z để nén từ “multimedia” ta sử dụng 15 bit Thay vì khi sử dụng mã ASCII (mỗi từ mã dùng 7 bit) ta sẽ phải sử dụng 70 bit — Compression ratio = 70/15 = 4.7:1
Những từ ngắn hơn sẽ có tỉ lệ nén nhỏ hơn so và những từ dài hơn sẽ có tỉ lệ nén lớn hơn
Thuật toán LZ được phát triển, là sử dụng một bộ từ điển động được
xây dựng trên cả bộ mã hóa và giải mã Do đó kích thước của từ điển sẽ được tôi ưu hơn so với từ điển tĩnh thông thường
III.2: Lempel-Ziv-Welch( LZW)
Phương pháp nén LZW được phát minh bởi Lempel - Zip va Welch Nó hoạt động đựa trên một ý tưởng rất đơn giản là người mã hoá và người giải mã cùng xây dựng bản mã
Trang 10
Chúng ta có thê thấy, các từ lưu trữ trong từ điển xuất hiện thường
xuyên trong văn bản thì mức độ nén cao hơn
IV: TU DIEN MA HOA (DICTIONNARY CODING)
Từ điển mã hóa( Dictionnary coding) gom có hai loại là từ điển tĩnh (static dictionary coding) va tu điển động (dynamic dictionary coding) hai loại từ điển này gộp chung lại và người ta gọi nó là từ điển cơ sở (Dictionary-based compression), hay hiểu một cách đơn giản từ điển cơ sở là loại từ điển mà bao gôm có hai phân kết hợp tạo thành là từ điển tĩnh và từ điển động IV.1: Statie coding : Dành cho các ứng dụng trong các văn bản biết được các đặc điểm của kí tự và tần suất xuất hiện của chúng Thay vì sử dụng các
từ mã có chiều dài cô định, ta sử dụng bộ từ mã tối ưu có chiều dài thay đôi
Từ mã ngắn nhất sử dụng đề biểu diễn cho văn bản
IV.2: Dynamic hodc adaptive coding : Dành cho các ứng dụng tông quát hơn trong các văn bản có thê bị chuyên từ dạng này sang dạng khác và bộ từ mã tôi ưu cũng thay đôi từ dạng này sang dạng khác
V:HO THUAT TOAN LEMPEL-ZIV
Co rat nhiéu thuat toản áp dụng kỹ thuật nay nhu LZ77, LZR, LZSS, LZH duoc mo ta trong hinh 1 L777 ¬< LZFG L2 LZSS | [ LZH | | LZB j ee LZW LZMW Applications: Applications: e zip e GIF e gzip e V.42 e Stacker e compress
Hình 1:Ho thuat toan Lempel-Ziv
Trong bài báo cáo này chúng ta chỉ đê cập đến hai thuật toán chính và được ứng dụng nhiêu trong thực tế hiện nay là:
Trường Đựi Học Điện Lực Khoa Điện Tử Viễn T: hông Nhớm 10
Trang 11+Thuật Toán LZ76 + Thuật toán LZW
V.1: Thuật Toán LZ78
Nói chung thuật toán LZ78 là một thuật toán nén văn bản khả tốt, có thời
gian chạy chương trình tương đối nhanh tuy nhiên khả năng tiết kiệm chưa
được khai thác
Phương Pháp Nén: Thay vì thông báo vị trí đoạn văn lặp lại trong
quá khứ, mã L/Z78 đánh số tất cả các đoạn văn sao cho mỗi đoạn ghi
nhận số hiệu đoạn văn lặp lại trong quá khứ cộng với một ký tự mà nó làm cho đoạn đó khác với đoạn trong quá khứ Như vậy mỗi đoạn
mới là một đoạn ký tự trong quá khứ cộng với một ký tự trong quá khứ Chính vì thế đoạn mới khác với đoạn cũ trong quá khứ
+ Ví dụ: Giả sứ ta có đoạn văn bản :” aaabbabaabaaabab” Theo thuật toán LZ.78 thì chúng được phân đoạn như sau: Input A Aa b Ba baa baaa bab Doan 1 2 3 4 5 6 7 output 0+a l+a 0+b 3+a 4+a S+a 4+b
Bảng bÌ Mơ phỏng thuật toan LZ78 Bảng bl: Mô tả thuật toan LZ78
Như vậy bản nén của chúng ta là: (0,a); (1,a); (0,b); (3,a); (4,a); (5,a); (4,b)
- Thuật toán nén: Thuật toán nén bao bồm 3 bước
Bước 1: Đọc một ký tự -> ch, đoạn được gán bằng 1, kết nạp ký tự đó vào từ điên, w=ch;
Bước 2: While not eof() do
Trường Đựi Học Điện Lực Khoa Điện Tử Viễn T: hông Nhớm 10
Trang 12
Begin
Doc tiép ký tự tiếp theo w:= ww+ch; Ifw thuộc từ điển then ww:=w; Else begin Code(w.J); Ghi j và ch vào tệp nén Thêm w vào từ điển End; End; Bước 3: Dừng chương trình
- Thuật toán giải nén: Thuật toán giải nén cũng bao gồm 3 bước
Bước 1: Doc thong tin về từ điển đã được lưu trong tệp nén, tÌ:=false;
Trang 13Else Begin WW:=S; End; End; Bước 3: Dừng chương trình V.2: Thuật Toán LZW
Thuật toán nén LZWW có các wu điểm là hệ số nén tương đối cao, trong tập tin nén không cân phải chứa bảng mã Nhược điểm của thuật toán này là
ton nhiễu bộ nhớ, khó thực hiện dựa trên các mang don giản (bé hơn 64KB)
Giải thuật nén LZW xây dựng một từ điển lưu các mẫu có tân suất xuất hiện cao trong dữ liệu Từ điển là tập hợp những cặp từ vựng và nghĩa của nó Trong đó, từ vựng sẽ là các từ mã được sắp xếp theo thứ tự nhất định Nghĩa là một chuỗi con trong đữ liệu, từ điển được xây dựng đông thời với
quá trình đọc đữ liệu sự có mặt của một chuỗi con trong từ điển khẳng định rằng chuỗi đó đã từng xuất hiện trong phan đữ liệu da doc Thudat toan lién tục “tra cứu ` và cập nhật từ điên sau môi lân đọc một ký tự đữ liệu đâu vào
Do kích thước bộ nhớ không phải vô hạn va dé dam bảo tốc độ tìm kiếm,
từ điển chỉ giới hạn 4096 ở phân tử dùng để lưu lớn nhất là 4096 giá trị của
các từ mã Như vậy độ dài lớn nhất cia tie ma la 12 bits (4096 = 212 ) Cau
trúc từ điển như sau 256 từ mã đấu tiên theo thứ tự từ 0 255 chứa các số
nguyen tur 0 255 Day la ma cua 256 ky tu co ban trong bang ma ASCIL Tv mã thứ 256 chứa một mã đặc biệt là “mã xoá” (CC- Clear Code) Mục đích
việc dùng mã xoá nhằm khắc phục tình trạng SỐ mẫu lặp trong ảnh lớn hơn 4096 Khi đó một ảnh được quan niệm là nhiều mảnh ảnh, và từ điển là một bộ từ điên gôm nhiễu từ điên con Cứ hêt một mảnh ảnh người ta lại gui mét
Trường Đựi Học Điện Lực Khoa Điện Tử Viễn T: hông Nhớm 10
Trang 14
mã xoá để báo hiệu kết thúc mảnh ảnh cũ, bắt đầu mảnh ảnh mới động thời
khởi tạo lại từ điển cho mảnh ảnh mới Mã xoá có giá trị là 256.Từ mã thứ
257 chứa mã kết thúc thông tin (EOI — End oƒ information) Mã này có giá trị là 257 Như chúng ta đã biết, một file ảnh GIF' có thể có chứa nhiễu ảnh Mỗi một ảnh sẽ được mã hoá riêng Chương trình giải mã sẽ lặp lại thao tác giải mã từng ảnh cho đến khi gặp mã kết thúc thông tin thì dừng lại Các từ mã còn lại (từ 258 đến 4095) chứa các mẫu thường lặp lại trong ảnh 512 phan tử đấu tiên của từ điển biểu diễn bằng 9 bịt Các từ mã từ 512 đến
1023 biếu diễn bởi 10 bù, từ 1024 đến 2047 biếu diễn bởi I1 bit và từ 2048 đến 4095 biểu điễn bởi 12 bi 0 0 255 255 256 256| Clear Code 257 257| End of Information 258 Chuỗi mới 4095 Chuỗi mới
256:Mã xoá CC để khắc phục tình trạng mẫu lặp lớn hơn 4096, nếu mẫu lặp lớn
hơn 4096 thì gởi CC để xây dựng từ điển cho phần tiếp theo Eoi: Báo hiệu hết một phần nén
Nguyên Tắc Hoạt Động LZW
Nguyên tắc hoạt động của nó như sau:
- _ Một xâu kí tự là một tập hợp từ hai kí tự trở lên
Trường Đựi Học Điện Lực Khoa Điện Tử Viễn T: hông Nhớm 10
Trang 15
- Nhé tat cd cdc x4u ki ty di gap va gan cho né mot dau hiéu (token)
riêng
- Nếu lần sau gặp lại xâu kí tự đó, xâu kí tự sẽ được thay thế bằng dẫu hiệu của nó
Phần quan trọng nhất của phương pháp nén này là phải tạo một máng rất lớn dùng đề lưu giữ các xâu kí tự đã gặp (Máng này được gọi là "Từ điển")
Khi các byte đữ liệu cần nén được đem đến, chúng liền được giữ lại trong một bộ đệm chứa (Accumulator) và đem so sánh với các chuỗi đã có trong "từ điển" Nếu chuỗi dữ liệu trong bộ đệm chứa không có trong "từ điển" thì nó được bô sung thêm vào "từ điển" và chỉ số của chuỗi ở trong "từ điển" chính là dấu hiệu của chuỗi Nếu chuỗi trong bộ đệm chứa đã có trong "từ điển" thì dẫu hiệu của chuỗi được đem ra thay cho chuỗi ở dòng đữ liệu ra
Có bốn qui tắc đề thực hiên việc nén đữ liệu theo thuật toán LZW là:
Qui tắc 1: 256 đấu hiệu đầu tiên được dành cho các kí tự đơn (0 - 0ffh)
Qui tắc 2: Cố gang so sánh với "từ điển" khi trong bộ đệm chứa đã có
nhiều hơn hai kí tự
Qui tắc 3: Các kí tự ở đầu vào (Nhận từ tập tin sẽ được nén) được bổ
sung vào bộ đệm chứa đến khi chuỗi kí tự trong bộ đệm chứa không có trong
"từ điển",
Qui tắc 4: Khi bộ đệm chứa có một chuỗi mà trong "từ điển" không có thì chuỗi trong bộ đệm chứa được đem vào "từ điển" Kí tự cuỗi củng của chuỗi kí tự trong bộ đệm chứa phải ở lại trong bộ đệm chứa dé tiép tuc tao thanh chuỗi mới
)>- Các bước thực hiện thuật toán Quá trình nén:
LZW bắt đầu bởi 1 từ điển 256 kí tự (trong trường hợp sử dụng bảng mã
8 bits) và sử dụng chúng như tập kí tự chuẩn Sau đó mỗi lần đọc nó doc 8
Trường Đựi Học Điện Lực Khoa Điện Tử Viễn T: hông Nhớm 10
Trang 16bits (vi du 't', 'r', .) và mã hóa thành con sô tương ứng với chỉ mục của kí tự đó trong từ điển Mỗi khi LZW đi qua 1 chuỗi con mới (giả sử "tr") thì nó thêm chuỗi con đó vào từ điển
Mỗi khi nó đi qua I chuỗi con mà nó đã thấy trước đó, nó chỉ đọc thêm 1 kí tự mới nữa và cộng với chuỗi con đã biết để tạo ra I chuỗi con mới Lần
tiếp theo LZW bắt gặp một chuỗi con đã có, nó chỉ có việc sử dụng số chỉ
mục tương ứng trong từ điền
Thường thì người ta sẽ định sẵn số lượng lớn nhất các từ trong từ điển (giả
sử 4096), vì thế việc nén LZW không làm tiêu tốn hết toàn bộ bộ nhớ Vì
vậy mã của các chuỗi con trong ví dụ này là 12 bits (2 ^ 12 = 4096) Cân
thiết phải lập ma dai hon sé bits cua mét ki ty (12 vs 8 bits), do do khi rat
nhiều chuỗi con lặp lại sẽ được thay thế bởi một mã duy nhất thì việc nén được thực hiện “ Vi du 1: Các bước để mã hoá chuỗi "!'BAN!BA!BAA!BAR'!" như Sau : - Bước 1: Kí tự thứ nhất “!° được cất vào bộ đệm chứa đề chuẩn bị tạo nên một chuôi
- Bước 2: Kí tự thứ hai “B' nỗi thêm vào sau kí tự ! Vì trong "từ điển" chưa
có chuỗi "!B" nên chuỗi này được thêm vào "từ điển" và được gán dẫu hiệu là 100h (Vì từ 000h đến 0ffh được dành riêng cho các kí tự đơn: Qui tắc 1)
“sy?
được gửi ra còn “B' phải ở lại trong bộ đệm chứa
- Bước 3: Kí tự thứ ba “Aˆ thêm vào sau “Bˆ Chuỗi "BA" cũng chưa có
trong "từ điển" nên nó được thêm vào "từ điển" và gán dấu hiệu là 101h ‘A’
ở lại trong bộ đệm chứa còn “B' được gửi ra
- Bước 4: Kí tự thứ tư “N'ˆ thêm vào sau “A” tạo thành chuỗi "AN" cũng chưa
có trong "từ điển" nên được thêm vào "từ điển" và có dâu hiệu là 102h “N'? ở lại trong bộ đệm chứa còn “A"ˆ được gửi ra
Trường Đựi Học Điện Lực Khoa Điện Tử Viễn T: hông Nhớm 10
Trang 17
- Bước 5: Kí tự thứ năm ‘!’ thêm vào sau ‘N’ để tạo thành chuỗi "N!", "N!" được thêm vào "từ điển" với dẫu hiệu là 103h “!? ở lại còn “N' được gui ra
- Bude 6: Ki tu thir s4u ‘B’ thém vào sau “!° Lần này thì chuỗi "B!" đã có
trong "từ điển" nên không có kí tự nào được gửi ra "B!" tiếp tục ở lại trong "từ điển" để tạo ra chuỗi mới
- Bước 7: Kí tự thứ bảy “A"” thêm vào sau “B' để tạo thành chuỗi "B!A", do
"B!IA" không có trong "từ điển" nên nó được thêm vào "từ điển" và gán dấu hiệu là 104h đồng thời dấu hiệu 100h được gửi ra thay cho "B!" (Qui tắc 4)
A tiép tục ở lại trong bộ đệm chứa để tạo thành chuỗi mới
Các bước trên cứ thế tiếp tục cho đến khi hết tập tin cần nén Việc giảm kích thước chỉ thực sự bắt đầu tại bước 7 khi mà một dấu hiệu 12 bits là
<100h> được gửi ra thay cho hai byte "B!" Các bước được mô tả rõ hơn trong bảng 5.I dưới đây
Trang 1810 11 1= LS Le 15 16 17 18 19 +0 IB 4 _ IBA h <104h> 106h=!84A, &, Ị - - oi! B <105h> LO7hH=AIB B & | - = BA R <101Lh> L1OSh=BAR E ! R 109h=R! Ị B = = IB & - - IBA T <104h> LO4h=!BAT ¬ š T $
Bảng 5.I: Các bước thực hiện thuật toán LZW
s%* Ví dụ 2: Các bước để mã hoá chuỗi "ABCBCABCABCD" như SaU:
Các bước thực hiện
cho
Buoc 1: w= NIL;
Bước 2: Trong khi đọc được ký tự thứ k trong chuỗi: Bước 3: Nếu wk đã tôn tại trong từ điển thì w=wk
Trang 192 B C BC BC 259 66 3 C B CB CB 260 67 4 B C BC 5 BC A BCA BCA 261 259 6 A B AB 7 AB C ABC ABC 262 258 8 C A CA CA 263 67 9 A B AB 10 AB C ABC II AB D ABC ABC 264 262 C D D 12 D Nil D 68
Bang 5.2: Các bước thực hiện mã hoá chuỗi "ABCBCABCABCD" Chuỗi ra: 65- 66- 67- 259 -258- 67 (output)
e_ Đầu vào kích thước: 12 x 8= 96 bits
e Dau ra kich thudc la: 5 x 8+ 3 x 9 = 67 bits
e Ti lé nén la: 96 /67 =1.43
Trong thuật toán nén này, phân lớn thời gian khi bắt đầu nén chủ yếu mat
2 Ad!"
vào việc tạo "từ dién" Khi "tu dién" du lon, xac suat gap chudi 6 bd dém
chứa trong "từ điên” tăng lên và càng nén được nhiêu hơn Một điêu cân chú
Trường Đựi Học Điện Lực Khoa Điện Tử Viễn T: hông Nhớm 10
Trang 20
ý ở đây là mỗi một dấu hiệu, ta phải lưu một chuỗi trong "từ điển" để so
sánh Vì dẫu hiệu được biểu diễn băng một số 12 bits nên "từ điển" sẽ có 4096 lỗi vào, khi tăng số bit dé biếu diễn dấu hiệu lên thì hiệu quả nén sẽ tốt
hơn nhưng lại bị giới hạn bởi bộ nhớ của máy tính Vì dụ, khi dùng 16 bits
để biểu diễn một dấu hiệu thì "từ điển" phải có đến 65536 lối vào, nếu mỗi
lỗi vào có khoảng 20 kí tự thì "từ điển" phải lớn khoảng 1,2 MB Với một từ điển có dung lượng như vậy rất khó có thể thực hiện trên các máy tính PC hoạt động dưới hệ điều hành DOS vì giới hạn của một đoạn (Segment) là
64KB Ưu điểm của phương pháp nén LZW là bên nhận có thê tự xây dựng
bảng mã mà không cần bên gửi phải gửi kèm theo bản tin nén ï Quá trình giải nén LZW,
Quá trình giải nén LZW cũng không có gì phức tạp Thêm vào đó nó có nhiều lợi thế hơn so với các phương thức nén tĩnh vì không cần một từ điển hay những thông tin tạp phí cần thiết cho quá trình thuật giải nén Một từ
điển mới đồng nhất với từ điển gốc đã tạo trong khi nén được tái tạo lại
trong quá trình giải nén này.Quá trình mã hóa và giải mã cần phải sử dụng cùng 1 từ điển khởi đầu, trong trường hợp này là 256 kí tự của bảng mã ASCII Sau đây là cơ chế nó hoạt động Bộ giải mã LZW trước hết đọc một chỉ mục (là 1 số nguyên), tìm chỉ mục đó trong từ điển, và cho ra chuỗi con
gan với chỉ mục đó Kí tự đầu tiên của chuỗi con này được cộng thêm vào chuỗi dang lam viéc Chuỗi mới tạo ra được thêm vào từ điển (hoàn toàn
giống với quá trình nén) Chuỗi đã được giải mã lại trở thành chuỗi đang làm việc và cứ thế quá trình này được tiếp tục
Ưu điểm, nhược điểm của phương pháp mã hoá LZW
o Uudiém:
"Thuật toán nén LZW có các ưu điêm là hệ sô nén tương đôi cao, trong tập tin nén không cân phải chứa bảng mã
Trường Đựi Học Điện Lực Khoa Điện Tử Viễn T: hông Nhớm 10
Trang 21
= Bén nh4n cé thé tu x4y dung bang mã mà không cần bên gửi phải gửi kèm theo bản tin nén
"Thuật toán LZW đã khắc phục được sự lãng phí về bộ nhớ mà các thuật toán trước không tận dụng được hết Đồng thời khắc phục được sự cứng nhắc của thuật toán nén, góp phần làm
thuật toán nén trở nên mềm dẻo hơn, có sức hấp dẫn hơn đối
VỚI người sử dụng
o Nhược điểm:
= Nhuoc điểm của thuật toán này là tốn nhiều bộ nhớ, khó thực hiện dựa trên các mảng đơn giản (bé hơn 64KB)
Trường Đựi Học Điện Lực Khoa Điện Tử Viễn T: hông Nhớm 10
Trang 22
VI KET LUAN
| rong giới hạn tìm hiểu nén dữ liệu dưới dạng một bản tín em nhận thấu các phương pháp nén được dùng phô biến trên có những đặc điểm đáng
chú Ú: thuật toán nén độ dài loạt (Kunlength) không thê ap dung cho nhiéu
loai tap tín được, ví dụ như tập tín chương trình, tập tin cơ sở dữ liệu vì ở đó
các loạt chạu la rat ngắn, do dé néu ap dụng thuật tốn nàu khơng những
khơng làm bé tập tín mà còn làm phình to chúng C ác thuật toán còn lại
(luffman, Shannon-Ƒ ano,| Z 78 và | ZW) déu CÓ thể ap dung được dé
nén nhiéu loai tap tin trên các máu ví tính J huật toán OShanon có hệ 56 nén khá thap va yéu cầu khá phức tạp nên hiểm khí được sử dụng "Thuật
toán Huffman có ưu điểm là hệ sỐ nén tương đỗi cao, phương pháp thực
hiện tương đôi đơn giản, đòi hỏi ít bộ nhớ, có thê xâu dựng dựa trên các mảng bá hơn ó4+K.Ƒb Nhược điểm của nó là phải chứa cả bang ma vao tap tin nén thi phia nhận mới có thể giải mã được do đó hiệu suất nén chỉ cao khí ta thực hiện nén các tập tín lớn | huật toán nén | ZÂW có các ưu điểm là hệ số nén tương đối cao, trong tập tín nén không cần phải chứa bảng mã
Nhược điểm của thuật toán nàu là tốn nhiều bộ nhớ, khó thực hiện dựa trên các mảng đơn giản (E4 hơn 6ó+K ƑŠ) Ƒ ừ các ưu và nhược điểm trén, Fim chọn thuật toán nén | ZWN có các ưu điểm là hệ số nén tương đối cao, trong tập tín nén không cần phải chứa bảng mã Nhược điểm của thuật toán nàu là tốn nhiều bộ nhớ, khó thực hiện dựa trên các mảng đơn giản (E4 hơn
ó+KP) Bai báo cáo của chúng em còn sơ sài và có nhiều thiếu sót, do
Trường Đựi Học Điện Lực Khoa Điện Tử Viễn T: hông Nhớm 10
Trang 23
nhiéu nguuên nhân khách quan và chủ quan Như trong quá trình làm bài
chúng em có tham khảo một số tài liệu tiếng anh nên việc đọc hiểu và dịch còn nhiều hạn chế,cho nên bài báo cáo nàu chắc chắn là không thê đầu đủ
được chúng em rất mong cô cho Ú kiến và bỗ sung thêm những phan chúng
2 norngay 20 thang 9 nam 2O/ 2
Trường Đựi Học Điện Lực Khoa Điện Tử Viễn T: hông Nhớm 10
Trang 24
Tài Liệu Tham khảo
[1] Applied Coding and Information Theory for Engineers text book by Richard B Wells [2] http://en.wikipedia.org/wiki/LZW [3] http://marknelson.us/1989/10/01/lzw-data-compression/ [4] http://www.answers.com/topic/data-compression [5] http://www.prepressure.com/library/compression_algorithms/Izw [6] http://en.wikipedia.org/wiki/Data_compression_ratio [7] The Lempel Ziv Algorithm, Christina Zeeh ,Seminar ’Famous Algorithms” January 16, 2003
[8] Project Report on Lempel Ziv compression technique Tu King Fahd University Of Petroleum & Minerals
° Ngoài ra còn một sô nguôn trên 1 sô blog cá nhân, một sô bài báo
cáo của các bạn sinh viên của các trường đại học khác như Đại học
Thái nguyên, học viện công nghệ bưu chính viên thông
Trường Đựi Học Điện Lực Khoa Điện Tử Viễn T: hông Nhớm 10