Chương 3: PHƯƠNG PHÁP NÉN DỮ LIỆU
3.1 TỔNG QUAN VỀ NÉN DỮ LIỆU
3.1.1 Mã nén dữ liệu
3.1.1.1 Nén dữ liệu, bít trung bình 1/. Nén dữ liệu
a/ Khái niệm nén dữ liệu
Nén là một quá trình giảm lƣợng không gian cần thiết để biểu diễn cùng một lượng thông tin cho trước. Người ta còn gọi nén là biến đổi một luồng ký hiệu thành một luồng các từ mã.
Quá trình nén nhƣ sau:
Hình 3.1: Quá trình nén dữ liệu Trong đó:
Văn bản là văn bản ban đầu cần nén.
Mô hình là tập hợp các chữ cái cùng quy tắc đƣợc sử dụng để xử lý các chữ cái vào và đƣa ra các từ mã. Một mô hình sẽ xác định chính xác xác suất xuất hiện của từng chữ cái và một bộ mã sẽ tạo ra các từ mã dựa trên xác suất đó.
Mã hoá là chỉ quá trình thay thế các chữ cái trong văn bản ban đầu bằng các từ mã tương ứng để đưa ra bản mã chính xác.
Nhƣ vậy, quá trình nén diễn ra nhƣ sau: quá trình mô hình căn cứ vào văn bản cần nén sẽ tạo ra các từ mã. Sau đó, từ bộ từ mã vừa tạo đƣợc và văn bản ban đầu quá trình nén sẽ đƣa ra bản mã.
Mã hoá và mô hình là hai giai đoạn hoàn toàn khác nhau vì trong giai đoạn mô hình có rất nhiều cách để xử lý các chữ cái của văn bản mà cùng sử dụng một phương pháp xây dựng mã để cho ra các từ mã.
Nếu bản mã có kích thước nhỏ hơn văn bản thì phương pháp nén đó có hiệu quả.
Bản mã Văn bản
Mô hình
Mã hoá
Ví dụ
Chúng ta sử dụng cùng phương pháp mã Huffman cho hai mô hình khác nhau:
Mô hình 1: dựa trên xác suất độc lập của từng chữ cái xuất hiện bất kì trong văn bản.
Mô hình 2: cần tính đƣợc xác suất phụ thuộc dựa trên những chữ cái nhận đƣợc lúc đó trong văn bản.
Do mô hình khác nhau nên cùng sử dụng mã Huffman để đƣa ra từ mã nhƣng hiệu quả nén của chúng rất khác nhau.
Tuy nhiên, chúng ta vẫn quen dùng từ mã hoá để chỉ cho cả quá trình nén văn bản mặc dù đó chỉ là một giai đoạn của một quá trình nén.
Người ta thường mã hoá thông qua các từ mã của một bảng chữ cái nào đó.
Có thể có nhiều thuật toán nén dữ liệu khác nhau. Mỗi thuật toán có một kiểu dữ liệu nhất định và cùng một số modem có đặc điểm nén thích ứng có nghĩa là chúng có khả năng chọn thuật toán nén thích hợp phụ thuộc vào kiểu dữ liệu cần nén. Trong số các cách mã thì cách nào mã ngắn hơn chúng ta nói là nó nén tốt hơn (so với cách mã khác).
2/. Bít trung bình
Chúng ta thường dùng trình nén để nén các file, tức là các văn bản được tạo ra từ 256 byte. Nén một file nhiều lần liên tiếp thì đến một lúc nào đó chúng ta cũng sẽ thu đƣợc một file mà trình nén này không thể thu nhỏ lại đƣợc nữa. Bởi vì, nếu không chúng ta sẽ nén đƣợc file ấy xuống thành một file không có bít nào cả.
Từ đó, chúng ta có khẳng định: Với mọi thuật toán mã các file văn bản luôn tồn tại một văn bản mà nó không thể nén đƣợc thành file có dung lƣợng nhỏ hơn.
Từ khẳng định trên suy ra không thể vạch định ra đƣợc một gianh giới rõ ràng giữa một bên là mã hoá và một bên là mã nén. Để đánh giá khả năng nén của một thuật toán chúng ta đƣa ra khái niệm về số bít trung bình cần thiết để ghi lại một chữ cái của văn bản.
3.1.1.2 Mã tổng và mã phân tách 1/. Mã tổng
Định nghĩa. Văn bản tổng
Cho A và B là hai văn bản. Tổng của A + B là một văn bản mới thu đƣợc từ A viết tiếp B vào bên phải của A. Nhƣ vậy độ dài của tổng các văn bản là tổng của các độ dài của chúng.
Hình 3.2: Văn bản tổng Định nghĩa. Mã tổng
Một mã đƣợc gọi là mã tổng nếu nhƣ bản mã của tổng các văn bản là tổng các bản mã.
Hình 3.3: Mã tổng
Trong định nghĩa cho mã tổng ta đã sử dụng khái niệm “tổng của các văn bản”. Nếu bản mã của văn bản “a” là f(a), của văn bản b là f(b) thì bản mã của “ab” là
“f(a)f(b)”, bản mã của “ba” là “f(b)f(a)”.
Xét mã tổng trên bảng chữ cái Σ = {a 1 , a 2 , ...., a m }. Mỗi chữ cái a 1 , a 2 , ..., a m có từ mã tương ứng. Từ mã của các chữ cái xác định ánh xạ f : Σ → M, từ tập các chữ cái vào tập các xâu bít “0/1”. Nhƣ vậy với mọi a i Σ, xâu bít f(a i ) là từ mã của a i , độ dài xâu bít f(a i ) đƣợc ký hiệu là (a i ).
Theo định nghĩa mã tổng thì xâu các chữ cái = 1 2 ... n tương ứng duy nhất với xâu bít có dạng f( ) = f( 1 )f( 2 )...f( n ). Bản mã f( ) có độ dài L( )=
n i
i 1
) ( bit.
+ =
+ =
1001010 + 111000 = 1001010111000
bản mã
văn bản
2/. Mã phân tách
Từ đây chúng ta chỉ đề cập đến các mã tổng nhị phân. Nếu các từ mã có độ dài cố định thì ta luôn giải mã đƣợc. Nhƣng nếu độ dài của từ mã thay đổi thì không phải với cách mã nào cũng có thể giải mã đƣợc.
Xét cách mã sau:
a -> 100 b -> 1000 c -> 0
Bản mã của “ac” và b đều là dãy bít “1000”. Nhƣ vậy khi nhận đƣợc chuỗi bít 1000 chúng ta không thể biết đƣợc rằng văn bản ban đầu là “b” hay là “ac”.
Điều kiện quan trọng của việc tạo mã là cho phép khi nhận đƣợc bản mã, chúng ta phải tách ra đƣợc thành các thành phần cơ bản là các từ mã và cách tách này phải là duy nhất và đúng đắn. Tính phân tách được đưa ra dưới đây sẽ đảm bảo cho điều này.