Thuật toán tạo mã Huffman

Một phần của tài liệu Tiếp cận mã huffman theo tần suất và ứng dụng (Trang 28 - 38)

6. Bố cục của luận văn

2.3.4.Thuật toán tạo mã Huffman

Thuật toán Huffman đƣa cho chúng ta cách xây dựng một cây đơn từ một nhóm (một rừng) các cây. Ban đầu, tất cả các cây có một nút đơn tƣơng ứng với một kí tự và tần số xuất hiện của kí tự đó. Các cây đƣợc kết hợp bằng cách chọn ra hai cây và tạo ra một cây mới từ hai cây này. Số các cây giảm đi một tại mỗi bƣớc vì hai cây đƣợc tổ hợp thành một cây.Thuật toán đƣợc mô tả nhƣ sau:

1. Bắt đầu với một rừng các cây. Tất cả các cây có một nút, cùng với trọng lƣợng của cây bằng trọng lƣợng của mỗi kí tự trong nút. Các kí tự xuất hiện thƣờng xuyên nhất có trọng lƣợng lớn nhất. Các kí tự ít xuất hiện nhất có trọng lƣợng nhỏ nhất.

2. Lặp bƣớc này cho đến khi chỉ còn một cây: Chọn hai cây có trọng lƣợng nhỏ nhất, gọi là cây T1 và T2. Tạo ra một cây mới mà gốc của cây

Số hóa bởi Trung tâm Học liệu - ĐHTN

http://www.lrc.tnu.edu.vn/

này có trọng lƣợng bằng tổng trọng lƣợng của cây T1 + T2 và cây con trái là T1 và cây con phải là T2.

3. Một cây đơn thu đƣợc sau bƣớc 2 là cây mã hoá tối ƣu.

Ví dụ 1: Với chuỗi đầu vào là “khoahocmaytinh”, số lần xuất hiện của từng chữ là: h(3), a(2), o(2), n(1), i(1), t(1), y(1), m(1), c(1), k(1); tƣơng ứng với tần số xuất hiện là 0,15; 0,1; 0,1; 0,05; 0,05; 0,05; 0,05; 0,05; 0,05; 0,05.

2. 1: Sắp xếp danh sách các kí tự (ví dụ 1)

Hai ký tự k và c có tần số xuất hiện ít nhất, đƣợc ghép thành một nút, có trọng số là tổng trọng số 2 nút k và c ban đầu. Nút mới có thể đƣợc xếp vào một trong các vị trí: trƣớc hoặc sau o, sau a tùy ý. Thực hiện lặp lại để xây dựng cây hoàn chỉnh: [5], [7]

Bước 1: Ghép k va c ta đƣợc nút 1

Số hóa bởi Trung tâm Học liệu - ĐHTN

http://www.lrc.tnu.edu.vn/ Bước 3: Ghép i và t ta đƣợc nút 3

Bước 4: Ghép nút 3 với n ta đƣợc nút 4

Bước 5: Ghép nút 1 với nút 2 ta đƣợc nút 5

Số hóa bởi Trung tâm Học liệu - ĐHTN

http://www.lrc.tnu.edu.vn/ Bước 7: Ghép nút 4 với h ta đƣợc nút 7

Bước 8: Ghép nút 5 với nút 7 ta đƣợc nút 8

Số hóa bởi Trung tâm Học liệu - ĐHTN

http://www.lrc.tnu.edu.vn/

2. 2: Xây dựng cây Huffman (ví dụ 1)

Điền các nhãn cho mỗi cạnh: Khi duyệt từ gốc cây đến các lá, điền các nhãn 0 và 1 cho các cạnh theo quy ƣớc nhất định, dãy các nhãn chính là mã ở dạng tiền tố cho mỗi ký tự ở lá.

Số hóa bởi Trung tâm Học liệu - ĐHTN

http://www.lrc.tnu.edu.vn/

Từ mã của các kí tự đƣợc sinh ra từ cây cuối cùng này, đƣợc thể hiện trong bảng sau. 0 đƣợc sử dụng cho cạnh trái, 1 đƣợc sử dụng cho cạnh phải. Kí tự Từ mã Độ dài k 1110 4 c 1111 4 m 1100 4 y 1101 4 t 0010 4 i 0011 4 n 000 3 o 100 3 a 101 3 h 01 2

Nhƣ vậy với mỗi ký hiệu đƣợc lƣu trữ bình thƣờng là 8 bit khi đó với chuỗi đầu vào là “khoahocmaytinh” thì ta phải mất 8 x 14 = 112 bit trong khi đó sử dụng phƣơng pháp nén Huffman “khoahocmaytinh” -> 111001100101011001111110010111010010001100001 = 6 bit

Ví dụ 2: Với chuỗi đầu vào là “congnghethongtin”, số lần xuất hiện của từng chữ là: n(4), g(3), o(2), h(2), t(2), c(1), e(1), i(1); tƣơng ứng với tần số xuất hiện là 1; 0.75; 0,5; 0,5; 0,5; 0,25; 0,25; 0,25

2. 4: Sắp xếp danh sách các kí tự (ví dụ 2)

i e c t h o g n

Số hóa bởi Trung tâm Học liệu - ĐHTN (adsbygoogle = window.adsbygoogle || []).push({});

http://www.lrc.tnu.edu.vn/

Hai ký tự i và e có tần số xuất hiện ít nhất, đƣợc ghép thành một nút, có trọng số là tổng trọng số 2 nút i và e ban đầu. Nút mới có thể đƣợc xếp vào một trong các vị trí: trƣớc hoặc sau t, trƣớc hoặc sau o tùy ý.

Bước 1: Ghép i với e ta được nút 1

Bước 2: Ghép c với t ta được nút 2

Bước 3: Ghép nút 1 với h ta được nút 3

Số hóa bởi Trung tâm Học liệu - ĐHTN

http://www.lrc.tnu.edu.vn/ Bước 5: Ghép nút 3 với g ta được nút 5

Số hóa bởi Trung tâm Học liệu - ĐHTN

http://www.lrc.tnu.edu.vn/ Bước 7: Ghép nút 5 và 6 ta được nút 7

Số hóa bởi Trung tâm Học liệu - ĐHTN

http://www.lrc.tnu.edu.vn/

Bước 8: Điền các nhãn cho mỗi cạnh: Khi duyệt từ gốc cây đến các lá, điền các nhãn 0 và 1 cho các cạnh theo quy ước nhất định, dãy các nhãn chính là mã ở dạng tiền tố cho mỗi ký tự ở lá.

2. 6: Cây Huffman điền đầy đủ thành phần (vi dụ 2)

Từ mã của các kí tự đƣợc sinh ra từ cây cuối cùng này, đƣợc thể hiện trong bảng sau. 0 đƣợc sử dụng cho cạnh trái, 1 đƣợc sử dụng cho cạnh phải.

Kí tự Từ mã Độ dài

n 10 4

g 00 3

Số hóa bởi Trung tâm Học liệu - ĐHTN http://www.lrc.tnu.edu.vn/ h 010 2 t 1111 2 i 0111 1 c 1110 1 e 0111 1

Nhƣ vậy với mỗi ký hiệu đƣợc lƣu trữ bình thƣờng là 8 bit khi đó với chuỗi đầu vào là “congnghethongtin” thì ta phải mất 8 x 16 = 128 bit trong khi đó sử dụng phƣơng pháp nén Huffman “congnghethongtin” ->

1110110100010000100111111101011010001111011110= 6 bit

Một phần của tài liệu Tiếp cận mã huffman theo tần suất và ứng dụng (Trang 28 - 38)