Thuật toán LZ78:

Một phần của tài liệu Nén và xử lý dữ liệu (Trang 40 - 42)

- Thuật toán nén động

3. 5 PHƯƠNG PHÁP LOẠI TRỪ NHỮN GÔ TRỐNG

4.2.1. Thuật toán LZ78:

Thay vì thông báo vị trí đoan văn lặp lại trong quá khứ, mã LZ78 đá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ế mà đoạn mới khác với đoạn cũ trong quá khứ.

Ví dụ:

Giả sử chúng ta có một đoạn văn bản sau: ”aaabbabaabaaabab”. Theo thuật toán LZ78 thì chúng được phân thành các đoạn như sau: Input a aa b ba baa baaa bab Đoạn 1 2 3 4 5 6 7 Output 0+a 1+a 0+b 3+a 4+a 5+a 4+b 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).

Tiếp theo chúng ta sẽ sử dụng tập phân tách để mã các con số còn dùng, mã có độ dài cố định một byte cho các ký tự.

Biểu diễn quá trình thực hiện của thuật toán LZ78 bằng cây:

a b a a a b 0 3 2 5 7 4 1

a

Qua ví dụ trên, khi thuật toán LZ78 được biểu diễn dưới cấu trúc dữ liệu dạng cây sẽ làm cho việc xử lý đơn giản hơn.

Thuật toán nén:

Bước 1: Đọc một ký tự -> ch, đoạn đươch gán bằng 1, kết nạp ký tự đó vào từ điển, w:=ch;

Bước 2: While not eof(f) do

Begin

Đọc tiếp ký tự tiếp theo w:=ww+ch;

If w 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

Bước 1: Đọc thông tin về từ điển đã được lưu trong tệp nén, tl:=false;

Bước 2: While not eof(f) do

Begin

Đọc byte tiếp theo ->b Decode(b,s,t); If tl=false then w:=w+s Else w:=ww+s; TIMCHU(w,t); If t=false then Begin 6

Ghi s ra tệp giải nén Thêm s vào từ điển

End Else Begin ww:=s; End; End; Bước 3: Dừng chương trình.

Đânh giá: Nói chung thuật toán LZ78 là một thuật toán nén văn bản 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 tối đa.

Một phần của tài liệu Nén và xử lý dữ liệu (Trang 40 - 42)

Tải bản đầy đủ (DOC)

(53 trang)
w