ban đầu
Dung lợng tệp sau khi nén (Kbytes) Run - Length Huffman LZW
Dạng text 3714 3732 2022 2715 194381 193882 106998 44692 316662 315820 174285 74650 2677818 2438906 1713022 1369442 Dạng ảnh (*.bmp) 32086 4439 6139 2541 137818 19963 33449 3584 388470 401919 278718 319531 Dạng *.exe 8935 8471 7624 7684 15145 15127 12887 13981 31383 33071 27657 31897
89857 79853 66133 70370
Dạng *.dbf 4610 3455 2518 1731
21906 15064 10455 5887
58080 31863 25256 18841
Bảng 5. Kết quả thực nghiệm.
Qua kết quả thu đợc ở bảng trên ta nhận thấy rằng đối với tệp dạng văn bản thì khi nén bằng phơng pháp Run-Length thờng không mang lại hiệu quả, dung l- ợng sau khi nén không giảm là bao nhiêu so với ban đầu. Tuy nhiên, khi nén các tệp ảnh dạng bmp thì cho hiệu quả cao hơn với dung lợng có trờng hợp giảm đi khoảng 1/7 (4439/32086) so với ban đầu. Trong khi đó, phơng pháp nén Huffman có phần hiệu quả hơn so với phơng pháp Run-Length khi nén các văn bản với dung lợng giảm đi khoảng 1/2 so với dung lợng ban đầu. Nhng khi đối mặt với các tệp ảnh thì cho kết quả không tốt bằng phơng pháp Run-Length tuy nhiên trong một số trờng hợp lại cho kết quả tốt hơn. Cụ thể trong bảng trên ta có: với dung lợng tệp ban đầu là 388470 Kbytes, nếu nén bằng Run-Length thì dung lợng lớn hơn ban đầu còn nếu nh nén bằng mã LZW thì dung lợng giảm không đáng kể. Trong khi đó, nếu nén bằng mã Huffman thì dung lợng chỉ là 278718 Kbytes. Hoặc với tệp văn bản có dung lợng là 3732 Kbytes thì khi nén theo mã Huffman cũng cho hiệu quả cao hơn so với hai phơng pháp kia. Sở dĩ, trong trờng hợp này phơng pháp nén theo mã Huffman cho kết quả cao hơn là vì trong chính bản thân các tệp đó chứa các byte dữ liệu có tần số xuất hiện chênh lệch nhau nhiều.
Qua bảng trên ta cũng có thể khẳng định rằng phơng pháp mã hóa theo mã LZW là phơng pháp thờng đem lại hiệu quả cao hơn so với hai phơng pháp kia. Nó có thể đối mặt với bất kỳ dòng dữ liệu nào. Thật vậy, đối với tệp văn bản có dung l- ợng ban đầu là 194381 Kbytes khi áp dụng phơng pháp nén theo mã LZW thì dung lợng chỉ còn 44696 Kbytes, nghĩa là giảm đi khoảng 1/3 so với ban đầu trong khi đó dung lợng sau khi nén bằng phơng pháp mã Huffman là 106998 Kbytes và bằng phơng pháp Run-Length là 193882 Kbytes. Đối với các tệp ảnh dạng Bmp thì trong một số trờng hợp phơng pháp LZW lại cho kết quả tốt hơn so với dạng Text chẳng hạn trong bảng trên ta thấy dung lợng của tệp giảm đi khoảng 1/31 (137818/3584) so với ban đầu. Tuy nhiên, trong một số trờng hợp khác thì phơng pháp LZW lại cho hiệu quả không cao bằng khi nén các tệp dạng văn bản với tỉ lệ nén chỉ là 1:1 ( 319531/388470).
Trong khi đó, nếu sử dụng 3 phơng pháp này để nén các tệp dạng EXE thì nói chung hiệu quả nén không cao, dung lợng không giảm là bao nhiêu so với ban
thì dung lợng sau khi nén là 8471 Kbytes, với Huffman là 7624 Kbytes và với LZW là 7684 Tuy nhiên, khi nén các tệp dạng DBF thì lại cho kết quả tốt hơn. Trong đó,… ta có thể nhận thấy rằng phơng pháp nén theo mã LZW cho hiệu quả cao hơn so với 2 phơng pháp kia với dung lợng có thể giảm đi khoảng 1/3 so với dung lợng ban đầu. Thật vậy, với tệp có dung lợng là 21906 Kbytes, nếu nén bằng mã LZW thì cho kết quả là 5887 Kbytes, giảm đi hơn 1/3 so với ban đầu tuy nhiên, nếu nén bằng mã Huffman thì dung lợng chỉ giảm đi 1/2 so với trớc khi nén và với phơng pháp nén theo mã loạt dài thì dung lợng sau khi nén giảm không đáng kể. Qua đây ta cũng thấy rằng ngoài việc ứng dụng để nén các tệp dạng văn bản và tệp ảnh thì các phơng pháp này còn có thể đợc dùng để nén bất kỳ loại tệp nào chẳng hạn nh tệp EXE, hoặc tệp dạng DBF…
Kết luận:
Trong ba phơng pháp mã hóa, mỗi phơng pháp đều có mặt mạnh và mặt yếu của nó. Tuỳ thuộc vào chính dòng dữ liệu cùng với dung lợng của tệp mà chúng ta có thể chọn phơng pháp nén phù hợp nhất. Với phơng pháp nén theo mã loạt dài thì ngời ta thờng dùng để nén các tệp ảnh nhị phân. Còn khi tệp có dung lợng nhỏ hoặc trong tệp chứa các byte dữ liệu có tần số chênh lệch nhau nhiều thì ngời ta lại sử dụng phơng pháp mã hóa theo mã Huffman. Trong khi đó, ta có thể dùng phơng pháp mã hóa theo mã LZW cho các tệp có dung lợng lớn với bất kỳ kiểu dữ liệu nào. Trong một số trờng hợp ngời ta cũng có thể sử dụng cả 3 phơng pháp này để tiến hành nén một tệp dữ liệu trong đó mỗi ph- ơng pháp đảm nhiệm một phần nào đó của tệp.
ở đây, tôi chỉ mới đa ra các phơng pháp nén đơn giản và riêng lẻ vì vậy khi cần nén một tệp nào đó muốn có đợc hiệu quả cao đòi hỏi chúng ta phải biết đợc kiểu dữ liệu của tệp đó từ đó chọn ra phơng pháp nén phù hợp. Tuy nhiên, từ các phơng pháp nén đơn giản này chúng ta cũng có thể phát triển thành một chơng trình nén "thông minh" đó là một chơng trình tự động tìm
kiếm kiểu nén phù hợp với chính bản thân kiểu dữ liệu của tệp và đem lại hiệu quả nén cao nhất.
Phụ lục : mã nguồn của các phơng pháp mã hóa.