Quá trình giải nén dữ liệu

Một phần của tài liệu (LUẬN văn THẠC sĩ) xây dựng kho dữ liệu an toàn với mã huffman (Trang 56 - 59)

Với quá trình nèn văn bản: phân tích và cắt văn bản gốc thành các đoạn, các câu/ từ, sau đó gán cho chúng ký hiệu để xác định chúng.

Quá trình giải nén: phân tích các đoạn mã và khôi phục các đoạn văn bản gốc. Tập hợp các đoạn, các câu/từ gọi là từ điển.

4.2.3. Nén văn bản

Bảng chữ cái: là một tập hợp các chữ cái hay ký tự.

Văn bản: Là một dãy gồm các chữ cái của một bảng chữ cái. Độ dài của văn bản: là số lượng các chữ cái trong văn bản.

Với một bảng chữ cái B={b1, b2, …, bn}, với xác suất hay tuần suất xuất hiện của các chức cái tương ứng là T={t1, t2, …, tn}; Ta có một văn bản V được sinh ra từ bảng chữ cái B.

Nén văn bản không phải là việc các văn bản này được ghi nén lại nhỏ hơn mà các thuật toán nén văn bản sẽ ghi lại văn bản ở một dạng khác.

Giới hạn nén của một văn bản: Giới hạn nén của một văn bản gọi là lương tin của văn bản. Lượng tin của văn bản chỉ phụ thuộc và chính văn bản đó mà không phụ thuộc vào

thuật toán. Mọi thuật toán nén văn bản đều không thể nén văn bản đến mức nhỏ hơn lượng tin mà văn bản đó có. Lượng tin còn được gọi là entropy.

4.3. Giải thuật mã hóa Huffman

4.3.1. Mã hóa dữ liệu trong máy tính

Để mã hóa các kí hiệu (bao gồm kí tự, chữ số, …) trong máy tính, ta thay chúng bằng các xâu nhị phân, được gọi là từ mã của kí hiệu đó.

Ví dụ bộ mã ASCII ra đời năm 1967, mã hóa cho 256 kí hiệu là biểu diễn nhị phân của các số từ 0 đến 255, mỗi từ mã gồm 8 bit. Trong ASCII từ mã của kí tự “a” là 1100001, của kí tự “A” là 1000001. Trong cách mã hóa này các từ mã của tất cả 256 kí hiệu có độ dài bằng nhau (mỗi từ mã 8 bít). Nó được gọi là mã hóa với độ dài không đổi.

Khi mã hóa một tài liệu có thể không sử dụng đến tất cả 256 kí hiệu. Hơn nữa trong tài liệu chữ cái “a” chỉ có thể xuất hiện 1000000 lần còn chữ cái “A” có thể chỉ xuất hiện 2, 3 lần. Như vậy ta có thể không cần dùng đủ 8 bit để mã hóa cho một ký hiệu, hơn nữa độ dài (số bit) dành cho mỗi kí hiệu có thể khác nhau, kí hiệu nào xuất hiện nhiều lần thì nên dùng số bit ít, ký hiệu nào xuất hiện ít thì có thể mã hóa bằng từ mã dài hơn. Như vậy ta có việc mã hóa với độ dài thay đổi. Để phân biệt được xâu bít nào là mã hóa của ký hiệu nào, một trong các giải pháp là dùng các dấu phẩy (“,”) hoặc một kí hiệu quy ước nào đó để tách từ mã của các kí tự đứng cạnh nhau. Nhưng như thế số các dấu phẩy sẽ chiếm một không gian đáng kể trong bản mã. Một cách giải quyết khác dẫn đến khái niệm mã phi tiền tố.

4.3.2. Mã phi tiền tố

Mã phi tiền tố là bộ các từ mã của một tập hợp các kí hiệu sao cho từ mã của mỗi ký hiệu không là tiền tố (phần đầu) của từ mã một ký hiệu khác trong bộ mã ấy.

Ví dụ có từ “CNTT” gồm 3 chữ cái là C,N,T. Nếu dùng cách mã hóa với độ dài không đổi thì mỗi chữ cái được mã hóa tối thiểu là 2 bit chẳng hạn C=00, N=01, T=10. Khi đó xâu được mã hóa là 00011010.

Nếu mã hóa C=0, N=01, T=11 thì bộ từ mã này không là mã phi tiền tố vì từ mã của chữ C là tiền tố của từ mã của N. Để mã hóa cả từ này ta phải đặt dấu ngăn cách vào giữa các từ mã 0,01,10,10.

Nếu mã hóa C=0, N=10, T=11 thì bộ mã này là mã phi tiền tố. Với bộ mã phi tiền tố này thì xâu được mã hóa là 0101111.

4.3.3. Lý thuyết Mã Huffman

Mẫ hóa Huffman là một thuật toán mã hóa dùng để nén dữ liệu, dựa trên tần suất xuất hiện các ký tự cần mã hóa để xây dựng một bộ mã nhị phân cho các ký tự sao cho dung lượng (số bit) thu được sau khi mã hóa là nhỏ nhất.

Mỗi ký tự với độ dài mã nhị phân cố định (ASCII) được thay bằng một đoạn mã có độ dài biến đổi, độ dài này phụ thuộc vào số lần xuất hiện của ký tự đó trong file sao cho việc giải hiện của ký tự đó trong file sao cho việc giải mã là duy nhất đối với mỗi loại ký tự:

- Ký tự xuất hiện nhiều lần có độ dài mã thấp hơn các ký tự ít xuất hiện - Bộ mã tạo ra phải có tính chất tiền tố:

o Mã của ký tự này không được là tiền tố cho mã của ký tự khác

- Mã Huffman dựa trên cơ sở của cây Huffman, là một cây nhị phân với các tính chất:

o Mỗi ký tự được biểu diễn bằng một nút lá.

o Mã cho một ký tự được lấy thông qua đường dẫn từ gốc đến nút lá với quy tắc:

 Đi sang trái được bit 0

 Đi sang phải được bit 1

 Các ký tự phải nằm ở nút lá.

a. Bài toán:

Tìm cách mã hóa tối ưu, tức là tìm cây nhị phân T làm tối thiểu hóa tổng độ dài có trọng số

B(T) = ∑ f(c) depth(c)

trong đó f(c) và depth(c) là tần số và độ dài đường đi từ gốc đến lá tương ứng với ký tự c.

Ý tưởng: Chữ cái có tần suất nhỏ hơn cần được gán cho lá có khoảng cách đến gốc là lớn hơn, chữ cái có tần suất xuất hiện lớn hơn cần được gán cho nút gần gốc hơn.

b. Thuật toán xây dựng cây mã Huffman

Bước 1: Tìm 02 ký tự có trọng số nhỏ nhất ghép lại làm 01, trọng số của ký tự mới bằng tổng trọng số của 02 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 01 thì thực hiện bước 1, ngược lại thực hiện bước 3.

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.

Ví dụ: Xây dựng cây mã Huffman với bảng tần suất dưới đây:

Quá trình xây dựng cây Huffman diễn ra như sau:

Một phần của tài liệu (LUẬN văn THẠC sĩ) xây dựng kho dữ liệu an toàn với mã huffman (Trang 56 - 59)

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

(78 trang)