Phân tích thuật toán

Một phần của tài liệu Tìm hiểu các thuât toán nén dữ liệu và xây dựng chương trình ứng dụng (Trang 43 - 46)

3.2.1. Thuật toán Huffman

Thành lập cây nhị phân từ tập hợp các kí hiệu trong thông báo, mỗi kí hiệu là một nút lá của cây. Cách thành lập cây như sau:

Chọn 2 nút a, b có xác suất nhỏ nhất trong tập hợp các nút, giả sử xác suất nút a nhỏ hơn hoặc bằng xác suất nút b. Thành lập cây nhị phân có nút gốc x, con trái là a, con phải là b. Nút x có xác suất bằng tổng xác suất của a và b.

Tập hợp các nút bây giờ là các nút còn lại (đã loại bỏ a, và nút x). Lặp lại một cách đệ qui quá trình trên tập hợp đang xét cho đến khi tập này chỉ còn lại một nút.

Mã của a, b sẽ tìm được bằng cách lấy mã của x nối thêm 0 cho a và 1 cho b. Mã của nút gốc là rỗng.

Như vậy, thực chất quá trình trên là ta xây dựng một cây nhị phân từ tập hợp các ký tự muốn mã hóa, cuối cùng ta được một cây nhị phân có lá là các ký tự đó. Mã của một ký tự là một đường đi trên cây từ gốc đến lá chứa kí tự, với 0 đi sang trái còn 1 đi sang phải. Ý tưởng của giải thuật mã hóa cũng hết sức đơn giản, ta tìm bộ mã cho các kí tự sao cho các kí tự có tần suất xuất hiện cao (xác suất xuất hiện là lớn) sẽ được mã ngắn (gần với gốc) để độ dài trung bình để mã hóa một kí tự là nhỏ nhất.

Ví dụ: Cho bảng tần suất của 5 chữ cái A, B, C, D, E tương ứng là 0.10; 0.15; 0.30; 0.16; 0.29

A B C D E 0.10 0.15 0.30 0.16 0.29

44

45

Như vậy bộ mã tối ưu tương ứng là: A B C D E 010 011 11 00 10

- Đọc file văn bản, lưu vào mảng a.

- Xây dựng cây Huffman để giải mã dòng văn bản.

- Hiển thị cây Huffman và bảng mã Huffman ra màn hình. - Thực hiện mã hóa dòng văn bản và giải mã.

Mở rộng mã hóa và giải mã một file văn bản. Kết quả giải mã và mã hóa được ghi vào 2 file văn bản khác.

3.2.3. Thuật toán Run-length (RLE)

Thuật toán RLE là một thuật toán nén dữ liệu được hỗ trợ bởi hầu hết các định dạng tập tin bitmap. Chẳng hạn như: TIFF, BMP và PCX. RLE thích hợp cho nén bất kỳ loại dữ liệu nào bất kể nội dung thông tin của nó, nhưng nội dung của dữ liệu sẽ ảnh hưởng đến tỉ lệ nén đạt được bằng RLE. Mặc dù hầu hết các thuật toán RLE không thể đạt được tỷ lệ nén cao của phương pháp nén tiên tiến hơn nhưng lại dễ dàng và nhanh chóng để thực hiện. Điều này làm cho RLE trở thành một lựa chọn tốt.

RLE hoạt động bằng cách giảm kích thước vật lý của một chuỗi lặp đi

lặp lại, điều này gọi là chạy và thường được mã hóa thành hai byte. Byte đầu tiên đại diện cho số lượng ký tự trong thời gian và được gọi là số chạy. Byte

thứ hai là giá trị của các ký tự trong thời gian, đó là trong phạm vi từ 0 đến

46

Chương trình RLE rất đơn giản và nhanh chóng nhưng hiệu quả nén của nó phụ thuộc vào loại dữ liệu được mã hóa. Một hình ảnh màu đen và trắng mà chủ yếu là màu trắng, chẳng hạn như các trang của một cuốn sách sẽ mã hóa rất tốt (do số lượng lớn các dữ liệu tiếp giáp đó cùng một màu sắc).

Một phần của tài liệu Tìm hiểu các thuât toán nén dữ liệu và xây dựng chương trình ứng dụng (Trang 43 - 46)