Công nghệ nén này có được là dựa trên cơ sở gán các mã ngắn hơn cho các ký tự có tần suất xuất hiện lớn hơn.. Ký tự có tần xuất xuất hiện lớn nhất được mã hoá bằng số bit ngắn nhất..
Trang 1Trường Đại Học Thông Tin Liên Lạc
Khoa Công Nghệ Thông Tin
BÁO CÁO THỰC HÀNH TRUYỀN THÔNG ĐA PHƯƠNG TIỆN (6405)
Nhóm 2 GVHD: Đại úy, Ths Nguyễn Trung Hiếu
Khánh Hòa, ngày 25 tháng 12 năm 2017
Trang 2Trường Đại Học Thông Tin Liên Lạc Khoa Công Nghệ Thông Tin
BÁO CÁO THỰC HÀNH TRUYỀN THÔNG ĐA PHƯƠNG TIỆN (6405)
Nhóm 2
(Nhóm trưởng) Nguyễn Hồng Phú
Lê Trịnh Thiên Thạch Trần Minh Hoàng Trần Minh Cường Nguyễn Lê Phú Cường Huỳnh Quốc Cương Trần Minh Thời
GVHD: Đại úy, Ths Nguyễn Trung Hiếu
Khánh Hòa, ngày 25 tháng 12 năm 2017
Trang 3I Giới thiệu mã hóa HUFFMAN
Mã hóa Huffman (David A Huffman)là một thuật toán mã hóa dùng để nén
dữ liệu
Nén Huffman là một trong những phương pháp nén phổ biến Việc mã hoá này dựa trên phương thức mã hoá theo độ dài thay đổi của các bit cho từng
ký tự
Công nghệ nén này có được là dựa trên cơ sở gán các mã ngắn hơn cho các
ký tự có tần suất xuất hiện lớn hơn
Mã là Để đảm bảo cho kết quả giải duy nhất nếu không có mã nào là tiền tố của mã khác Các ký tự được lưu dưới dạng tần xuất xuất hiện của chúng
Số lượng các Bit của các ký tự được mã hoá là khác nhau Ký tự có tần xuất xuất hiện lớn nhất được mã hoá bằng số bit ngắn nhất
Để xác định được bảng mã Huffman, chúng ta đi xây dựng cây nhị phân
II Giới thiệu cây nhị phân HUFFMAN
Là cây nhị phân, mỗi nút chứa ký tự và trọng số (tần suất của ký tự đó)
Mỗi ký tự được biểu diễn bằng 1 nút lá (tính tiền tố)
Nút cha có tổng ký tự, tổng trọng số của 2 nút con
Các nút có trọng số, ký tự tăng dần từ trái sang phải
Các nút có trọng số lớn nằm gần nút gốc Các nút có trọng số nhỏ nằm xa nút gốc hơn
1 Nén với mã HUFFMAN
Mã Huffman
Là chuỗi nhị phân được sinh ra dựa trên cây Huffman
Mã Huffman của ký tự là đường dẫn từ nút gốc đến nút lá đó
Sang trái ta được bit 0
Sang phải ta được bit 1
Có độ dài biến đổi (tối ưu bảng mã)
Các ký tự có tần suất lớn có độ dài ngắn
Các ký tự có tần suất nhỏ có độ dài dài hơn
Nén huffman không mất thông tin
Trang 4 Nén không mất thông tin
Dựa trên thống kê tần số: những ký tự xuất hiện nhiều lần, sử dụng ký
mã mới ít bit hơn
Thuật toán hiệu quả sử dụng: nén jpg, …
Ý tưởng:
Xây dựng bộ mã huffman
Đọc ký tự, chuyển sang dãy bit mới
Gửi đến nơi nhận.q
Đọc dãy bit, nhận dạng ký tự chuyển về ký tự cũ
2 Xây dựng mã HUFFMAN
Ý tưởng:
Xây dựng bảng thống kê tần số xuất hiện của các ký tự cần mã hóa
Mỗi phần tử được xem như là đỉnh của một cây
Lặp cho đến lúc chỉ còn một cây
Chọn 2 cây có trọng số bé nhất ghép thành một cây mới
Từ đỉnh duyệt cây
Nếu về bên trái chọn bit 0
Về phải chọn bit 1
Đến lá thì dãy bit đã duyệt chính là mã mới của ký tự
3 Xây dựng cây nhị phân HUFFMAN
B1: Tạo N cây, mỗi cây chỉ có một nút gốc, mỗi nút gốc chỉ chứa một kí tự và
trọng số (tần suất của ký tự đó) (N = số ký tự)
B2: Lặp lại thao tác sau cho đến khi chỉ còn 1 cây duy nhất:
Ghép 2 cây con có trọng số gốc nhỏ nhất thành 1 nút cha, có tổng ký tự, tổng trọng số trọng số của 2 nút con
Xóa các cây đã duyệt
Điều chỉnh lại cây nếu vi phạm tính chất
Trang 5Ví dụ:
Trang 64 Ưu điểm và nhược điểm
Ưu điểm:
Hệ số nén tương đối cao
Phương pháp thực hiện tương đối đơn giản
Đòi hỏi ít bộ nhớ
Nhược điểm:
Mất 2 lần duyệt file khi nén
Phải lưu trữ thông tin giải mã vào file nén
Phải xây dựng lại cây Huffman khi giải nén
III Bài tập thực hành
Đề: Vẽ cây nhị phân phân Huffman cho tập ký tự sau
Lập bảng thông kê tần suất xuất hiện
Trang 7Sau khi sắp xếp theo thứ tự thì bắt đầu vẽ cây HUFFMAN
Bên trái 0
Bên phải 1
Từ cây nhị phân ta có bảng mã HUFFMAN đếm từ gốc xuống
Ký tự Mã Huffman
A 01
B 101
C 11110
D 1110
E 110
F 100
G 00
H 11111
Trang 8Sau khi làm xong ta có thể rút ra một hệ quả là:
Ký tự nào xuất hiện càng ít thì chuỗi bit càng dài như ký tự A xuất hiện 8 lần thì số bit chỉ có 2 và ký tự H xuất hiện 2 lần thì chuỗi bit có 5 ký tự
Đó chính là ưu điểm của Huffman, nó sẽ biến 1 ký tự có số lần xuất hiện nhiều nhất bằng 1 chuỗi bit ngắn nhất và ký tự nào xuất hiện với tần số ít nhất bằng chuỗi bit nhiều nhất
Do đó khi ta nén xuống thì sẽ giảm được độ chiếm không gian, tuy nhiên với Huffman một số trường hợp sau khi nén xong thì không gian lại nhiều hơn Ngoài ra còn lưu ý
Cây nhị phân này có 15 node đếm từ gốc xuống, và cây nhị phân này có 8 ký tự Vậy ta có công thức:
Số node = 2n-1 (với n là số ký tự)