Tải bản đầy đủ (.pptx) (21 trang)

BÀI BÁO CÁO-Các kỹ thuật nén số liệu

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (69.39 KB, 21 trang )

Các kỹ thuật nén số liệu


Huffman

• Nguyên lý :
• Nguyên lý của phương pháp Huffman là mã hóa các bytes trong tệp dữ liệu nguồn bàng biến nhị phân. Nó tạo mã độ dài
biến thiên là một tập hợp các bits. Đây là phương pháp nén kiểu thống kê, những ký tự xuất hiện nhiều hơn sẽ có mã
ngắn


Huffman

• Thuật tốn nén
Bước 1
Tìm hai ký tự có trọng số nhỏ nhất ghép lại thành một, trọng số của ký tự mới bằng tông trọng số của hai ký tự đem ghép.

Bước 2
Trong khi số lượng ký tự trong danh sách cịn lớn hơn một thì thực hiện bước một, nếu khơng thì thực hiện bước ba.

Bước 3
Tách ký tự cuối cùng và tạo cây nhị phân với quy ước bên trái mã 0, bên phải mã 1.


Huffman
Thuật toán giải nén :
Bước 1
Đọc lần lượt tùng bit trong tập tin nén và duyệt cây nhị phân đã được xác định cho đến khi hết một lá. Lấy ký tự ớ lá đó ghi ra tệp giải nén.

Bước 2
Trong khi chưa hết tập tin nén thì thực hiện bước một, ngược lại thì thực hiện



Bước 3
Kết thúc thuật toán.


Huffman

• Ưu điểm :
• Thuật tố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ây dựng dựa trên các mảng bé hơn 64KB.


Huffman

• Nhược điểm :
• Mã Huffman chỉ thực hiện được khi biết được tần suất xuất hiện của các ký
• Mã Huffman chỉ giải quyết được độ dư thừa phân bố ký tự.
• Huffman tĩnh địi hỏi phải xây dựng cây nhị phân sẵn chứa các khả năng. Điều này địi hỏi thời gian khơng ít do ta khơng
biết trước kiểu dừ liệu sê được thực hiện nén.

• Q trình giải nén phức tạp do chiều dài mã không biết trước cho đến khi ký tự đầu tiên được tìm ra.


Run - Length

• Nguyên lý :
• Loại dư thừa đơn giản nhất trong một tập tin là các đường chạy dài gồm các kí tự lặp lại, điều này thường thấy trong các
tập tin đồ hoạ bitmap, các vùng dừ liệu hằng của các tập tin chương trình, một số tập tin văn bản...



Run - Length

• AAAABBBAABBBBBCCCCCCCCDABCBAAABBBBCCCD
• Chuồi này có thể được mã hố một cách cơ đọng hơn bằng cách thay thế chuồi kí tự lặp lại bàng một thể hiện duy nhất

của kí tự lặp lại cùng với một biến đếm số lần kí tự đó được lặp lại. Ta muốn nói ràng chuỗi này gồm bốn chữ A theo sau
bởi ba chữ B rồi lại theo sau bởi hai chữ A, rồi lại theo sau bởi năm chữ B... Việc nén một chuỗi theo phương pháp này
được gọi là mã hố độ dài loạt. Khi có những loạt dài, việc tiết kiệm có thể là đáng kể. Có nhiều cách để thực hiện ý
tưởng này, tuỳ thuộc vào các đặc trưng của ứng dụng (các loạt chạy có khuynh hướng tương đổi dài hay khơng . Có bao
nhiêu bit được dùng để mã hố các kí tự đang được mã ?).


Run - Length

• Nếu ta biết ràng chuỗi của chúng ta chỉ chứa các chữ cái, thì ta có thể mã hoá biến đếm một cách đơn giản bàng cách
xen kẻ các con số với các chữ cái. Vì vậy chuồi kí tự trên được mã hố lại như sau: 4A3BAA5B8CDABCB3A4B3CD

• Ở đây "4A" có nghĩa là "bốn chữ A"... Chú ý là khơng đáng đê mã hố các loạt chạy có độ dài 1 hoặc 2 vì cần đến hai kí tự
đế mã hố.


Run - Length

• Đối với các tập tin nhị phân một phiên bản được tinh chế của phương pháp này được dùng đế thu được sự tiết kiệm
đáng kế. Ý tưởng ở đây là lun lại các độ dài loạt, tận dụng sự kiện các loạt chạy thay đổi giữa 0 và 1 để tránh phái lun
chính các số 0 và 1 đó. Điều này giả định ràng có một vài loạt chạy ngắn (Ta tiết kiệm các bit trên một loạt chạy chỉ khi độ
dài của đường chạy là lớn hơn so bit cần đổ biễu diễn chính nó trong dạng nhị phân), nhưng khó có phương pháp mã
hố độ dài loạt nào hoạt động thật tốt trừ phi hầu hết các loạt chạy đều dài.



Run - Length

• Việc mã hố độ dài loạt cần đến các biễu diễn riêng biệt cho tập tin và cho bản đã được mã hố của nó, vì vậy nó khơng

thể dùng cho mọi tập tin, điều này có thể hồn tồn bất lợi, ví dụ, phương pháp nén tập tin kí tự đã được đề nghị ở trên
sẽ khơng dùng được đối với các chuồi kí tự có chứa số. Neu những kí tụ- khác được sử dụng đê mã hố các số đếm, thì
nó sẽ khơng làm việc với các chuỗi chứa các kí tự đó. Giả sử ta phải mã hố bất kì kí tự nào từ một bảng chữ cái cố định
bằng cách chỉ dùng các kí tự từ bảng chừ cái đó. Để minh hoạ, giả sử ta phải mã hố bất kì một chuỗi nào từ một chừ cái
đó, ta sẽ giả định ràng ta chỉ có 26 chữ cái trong bảng chừ cái (và cả khoảng trống) để làm việc.


Run - Length

• Để có thể dùng vài chữ cái đổ biểu diễn các số và các kí tự khác biểu diễn các phần tử của chuồi sẽ được mã hố, ta phải
chọn một kí tự được gọi là kí tự "Escape". Mồi một sự xuất hiện của kí tự đó báo hiệu rằng hai chừ cái tiếp theo sê tạo
thành một cặp (số đếm, kí tự) với các số đếm được biểu diễn bằng cách dùng kí tự thứ i của bảng chừ cái để biểu diễn số
i. Vì vậy, chuỗi ví dụ của chúng ta sẽ được biểu diễn như sau với Q được xem là các kí tự.


Run - Length

• Escape"QDABBBAABQHCDABCBAAAQDBCCCD
• Tơ hợp của kí tự "Escape", số đếm và một kí tự lặp lại được gọi là một dãy Escape. Chú ý rằng không đáng đế mã hố các
đường chạy có chiều dài ít hơn bốn kí tự, vì ít nhất là cần đến ba kí tự đế mã hố bất kì một loạt chạy nào.

• Trong trường hợp bản thân kí tụ' "Escape" xuất hiện trong dãy kí tự cần mã hố ta sử dụng một dãy "Escape" với số đếm
là 0 (kí tự space) đổ biểu diễn kí tụ- "Escape". Như vậy trong trường hợp kí tự "Escape" xuất hiện nhiều thì có thể làm
cho tập tin nén phình to hơn trước.

• Các loạt chạy dài có thê được cắt ra đê mã hố bằng nhiều dãy Escape, ví dụ, một loạt chạy gồm 51 chữ A sẽ được mã

hoá như QZAQYA bằng cách dùng trên.


Run - Length

• Phương pháp mã hố độ dài loạt thường được áp dụng cho các tập tin đồ hoạ bitmap vì ở đó thường có các mảng lớn
cùng màu được biểu diễn dưới dạng bitmap là các chuỗi bit có đường chạy dài. Trên thực tế, nó được dùng trong các tập
tin .PCX, .RLE.


LZW

• 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 dữ liệu , từ điển được xây dựng đồng thời với quá trình đọc dừ 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 phần dữ liệu đã đọc. Thuật toán 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ự dữ liệu đầu vào.


LZW

• Ngun tắc chung
• Một xâu kí tự là một tập hợp từ hai kí tự trở lên.
• Nhớ tất cả các xâu kí tự đã gặp và gán cho nó một dấu 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ó.


LZW

• Quy tắc :

• Qui tắc 1: 256 dấu hiệu đầu tiên được dành cho các kí tụ- đon (0 - Offh).
• Qui tắc 2: Cố gắng 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 đế tiếp tục tạo thành chuỗi mới.


LZW

• Q 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ó đọc 8 bits (ví dụ '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 1 chuỗi con mà nó đã thấy trước đó, nó chi đọc thêm 1 kí tự mới nữa và cộng với chuỗi con đã biết đế
tạo ra 1 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.


LZW

• Giải nén :
• Q 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ố ngun), tìm chỉ mục đó trong từ

điển, và cho ra chuỗi con gắn 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 đang làm việc.
Chuỗi mới tạo ra được thêm vào từ điển (hồn tồn giống với q 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


LZW

• Ưu điểm :
• Thuật tố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ã.
• 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.
• Thuật tốn LZW đã khắc phục được sự lãng phí về bộ nhớ mà các thuật tố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 tốn nén, góp phần làm thuật tốn nén trở nên mềm dẻo hơn, có sức hấp dẫn
hon đối với người sử dụng


LZW

• Nhược điểm :
• Nhược điếm của thuật tố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



×