Bài Báo Cáo Về Mã Hóa Huffman

You might also like

Download as docx, pdf, or txt
Download as docx, pdf, or txt
You are on page 1of 2

Bài báo cáo về mã hóa Huffman

Mã hòa Huffman

Mã Huffman là gì?
Mã Huffman là một loại mã tiền tố tối ưu cụ thể thường được sử dụng để nén dữ liệu không mất dữ
liệu.

Đầu ra từ thuật toán của Huffman có thể được xem như một bảng mã có độ dài thay đổi để mã hóa
một ký hiệu nguồn (chẳng hạn như một ký tự trong tệp). Thuật toán rút ra bảng này từ xác suất ước
tính hoặc tần suất xuất hiện ( trọng số ) cho mỗi giá trị có thể có của ký hiệu nguồn.

Đầu vào

Bảng chữ cái A=(a1,a2,…an), đó là bảng chữ cái biêu tượng về kích thước n.

Đầu ra

Mã số C=W(c1,c2,…,cn) , là bộ từ mã (nhị phân), trong đó c i là từ mã cho ai

Mục tiêu
n
Cho phép L (C(W))=∑ wi length(c i) là độ dài đường dẫn có độ trọng số của mã C.
i=1

Kỹ thuật cơ bản

Nén

Kỹ thuật này hoạt động bằng cách tạo ra cây nhị phân gồm các nút. Chúng có thể được lưu trong một
mảng thông thường. Một nút có thể là nút là hoặc nút bên trong. Ban đầu, tất cả các nút dề là nút lá,
chứa bản thân ký hiệu, xác suất của biểu tượng và tùy chọn, liên kết đến nút cha giúp dẽ dàng đọc mã.
Các nút bên trong chứa một xác suất, các liên kết đến hai nút con và một liên kết tùy chọn đến một nút
cha. Theo quy ước chung, bit ‘0’ biểu thị thao sau con bên trái và bit ‘1’ biểu thị theo sau con bên phải.
Một cây thành phẩm có tới n nút lá và n-1 các nút bên trong. Cây huffman loại bỏ các ký hiệu không sử
dụng sẽ tạo ra độ dài mã tối ưu nhất.

Thuật toán xây dựng đơn giản nhất sư dụng hàng đợi ưu tiên trong đó nút có xác suất cao nhất:

1. Tạo một nút là cho mỗi biẻu tượng và thêm nó vào hàng đợi ưu tiên

2. Trong khi có nhiều hơn một nút trong hàng đợi:

- Xóa hai nút có mức độ ưu tiên cao nhất (xác suất thấp nhất) khỏi hàng đợi

- Tạo một nút bên trong mới với hai nút này là con và với xác suất bằng tổng xác suất của hai nút.

- Thêm nút mới vào hàng đợi.

3. Nút còn lại là nút gốc và cây đã hoàn thành.


Nếu các ký hiệu được sắp xếp theo xác suất, có một phương pháp thời gian tuyến tính (O ( n )) để tạo
cây Huffman bằng cách sử dụng hai hàng đợi , hàng đầu tiên chứa trọng số ban đầu (cùng với con trỏ
đến các lá liên quan) và trọng số kết hợp (cùng với các con trỏ đến cây) được đưa vào phía sau của hàng
đợi thứ hai. Điều này đảm bảo rằng trọng lượng thấp nhất luôn được giữ ở phía trước của một trong hai
hàng đợi:

1. Bắt đầu với càng nhiều lá càng có biểu tượng.


2. Xếp tất cả các nút lá vào hàng đợi đầu tiên (theo xác suất theo thứ tự tăng dần để mục ít có khả
năng nhất nằm trong đầu hàng đợi).
3. Trong khi có nhiều hơn một nút trong hàng đợi:
1. Xếp hàng hai nút có trọng số thấp nhất bằng cách kiểm tra mặt trước của cả hai hàng đợi.
2. Tạo một nút bên trong mới, với hai nút vừa xóa là nút con (một trong hai nút có thể là nút
con) và tổng trọng số của chúng là trọng số mới.
3. Xếp nút mới vào phía sau của hàng đợi thứ hai.
4. Nút còn lại là nút gốc; cây hiện đã được tạo ra.
Khi cây Huffman đã được tạo, nó được duyệt qua để tạo ra một từ điển ánh xạ các ký hiệu sang mã nhị
phân như sau:

1. Bắt đầu với nút hiện tại được đặt thành gốc.
2. Nếu nút không phải là nút lá, hãy gắn nhãn cạnh con bên trái là 0 và cạnh cho con bên phải
là 1 . Lặp lại quy trình ở cả trẻ bên trái và trẻ bên phải.
Mã hóa cuối cùng của bất kỳ ký hiệu nào sau đó được đọc bằng cách ghép các nhãn trên các cạnh dọc
theo đường dẫn từ nút gốc đến ký hiệu.
Mã hóa Huffman động
Mã hóa Huffman thích ứng (còn gọi là mã hóa Huffman động ) là một kỹ thuật mã hóa thích ứng dựa trên mã
hóa Huffman . Nó cho phép xây dựng mã khi các ký hiệu đang được truyền đi, không có kiến thức ban đầu về
phân phối nguồn, cho phép mã hóa một lần và thích ứng với các điều kiện thay đổi trong dữ liệu. [1]
Lợi ích của thủ tục một lần là nguồn có thể được mã hóa trong thời gian thực, mặc dù nó trở nên nhạy cảm
hơn với các lỗi truyền dẫn, vì chỉ một mất mát duy nhất sẽ làm hỏng toàn bộ mã.

You might also like