Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 21 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
21
Dung lượng
2,51 MB
Nội dung
Nhóm 5: Thuật tốn mã hố nguồn Huffman Thành viên nhóm: Nguyễn Duy Tin (102210380) Nguyễn Văn Dũng (102210356) Lê Tuấn Nguyên Khôi (102210359) Nguyên tắc xây dựng mã Hufman ● Huffman đưa nguyên tắc để xây dựng hệ thống tối ưu sau: để prefix mãcó độ dài tối thiểu điều kiện cần đủ thỏa mãn tính chất sau: ● Tính chất 1: Tính thứ tự độ dài mã: Nếu xếp tin theo thứ tự giảm củadần xác suất p()≥p() với i < j độ dài từ mã tương ứng phải thỏa điều kiện ni≤nj ● Tính chất 2: Tính chất từ mã cuối: với thõa mãn điều kiện ≤ ≤ m (m số mã) từ mã cuối ln có độ dài n nhau, trọng số khác ký hiệu bên phải = = = ● Tính chất 3: Tính liên hệ từ mã cuối từ mà trước cuối: Một dãy gồm hiệu phải từ mã prefix từ mã thứ N từ mã cuối mã Đánh giá độ tối ưu thuật toán Huffman ● Với phép mã hóa tối ưu ta có: = H(A) ● Nguồn rời rạc A = , i = ● ● H(A) = Þ So sánh H(A) Nhận xét: phép mã hóa gần tối ưu Các bước xây dựng thuật toán Huffman Đề Một văn viết từ kí từ … , biết tần số xuất ký tự văn 1200, 2400, 1200, 3200, 1500, 500 ( lần ) Hãy thực mã hố Huffman cho văn Kí tự Tần số 1200 2400 1200 3200 1500 500 Tần suất 0.12 0.24 0.12 0.32 0.15 0.05 Bước 1: Sắp xếp nguồn X theo xác suất giảm dần Kí tự Tần số 3200 2400 1500 1200 1200 500 Tần suất 0.32 0.24 0.15 0.12 0.12 0.05 Các bước xây dựng thuật toán Huffman Bước 2: Tạo danh sách chứa nút bao gồm phần tử đầu vào trọng số nút tần suất xuất theo xác suất bảng xếp 퐱퐱 퐱퐱 퐱 0.32 0.24 퐱퐱 0,15 퐱퐱 0.12 퐱퐱 0,12 퐱 0,05 Các bước xây dựng thuật toán Huffman Bước 3: Từ danh sách này, lấy phần tử có tần suất xuất Sau gắn nút vừa lấy vào nút gốc với trọng số tổng trọng số nút vừa lấy để tạo thành 퐱퐱 퐱퐱 퐱퐱 퐱퐱 퐱퐱 퐱퐱 0.32 0.24 0,15 0.12 0,12 0,05 퐱퐱−퐱 0,17 Các bước xây dựng thuật toán Huffman Bước 4: Đẩy vào lại danh sách 퐱퐱 퐱퐱 0.32 0.24 퐱퐱−퐱 0,17 퐱퐱 0,15 퐱퐱 0.12 퐱퐱 퐱퐱 0,12 0,05 Bước 5: Lặp lại bước danh sách nút gốc Các bước xây dựng thuật toán Huffman Lần lập 1: 퐱퐱 퐱퐱−퐱 퐱퐱 0.32 0.27 0.24 퐱퐱 퐱퐱 0,15 0.12 퐱퐱−퐱 0,17 퐱퐱 퐱퐱 0,12 0,05 Các bước xây dựng thuật toán Huffman Lần lập 2: 퐱퐱−퐱−퐱 0.41 퐱퐱 퐱퐱−퐱 0.24 0,17 퐱퐱 퐱퐱−퐱 0.32 0.27 퐱퐱 퐱퐱 0,15 퐱퐱 퐱퐱 0,12 0,05 0.12 Các bước xây dựng thuật toán Huffman Lần lập 3: 퐱퐱−퐱−퐱 퐱퐱−퐱−퐱 0.41 퐱 퐱 0.24 0.59 퐱퐱−퐱 0,17 퐱퐱 퐱퐱 0,12 0,05 퐱퐱 퐱퐱−퐱 0.32 0.27 퐱퐱 퐱퐱 0,15 0.12 Các bước xây dựng thuật toán Huffman Lần lập 4: 퐱풓 풓풓 풓 퐱퐱−퐱−퐱 퐱 퐱퐱−퐱 0.59 −퐱 0.41 퐱 0.24 퐱퐱−퐱 퐱퐱 0,17 퐱퐱−퐱 0.27 0.32 퐱퐱 퐱퐱 퐱퐱 퐱퐱 0,12 0,05 0,15 0.12 Các bước xây dựng thuật toán Huffman Bước 6: Xuất phát từ nút góc đánh số tập tin 0,1 cho nhánh ( cho nhánh bên trái, cho nhánh bên phải ) Quá trình dùng lại tất nhánh gán mã 퐱풓 풓 퐱퐱−퐱−퐱 퐱 퐱 0.24 0.41 1 풓풓 퐱퐱−퐱 퐱퐱−퐱 0,17 0.59 −퐱 퐱퐱 0.32 1 퐱퐱−퐱 0.27 퐱퐱 퐱퐱 퐱퐱 퐱퐱 0,12 0,05 0,15 0.12 Các bước xây dựng thuật toán Huffman Bước 7: Đánh mã cho nút lá, loại tất nút phụ ta thu tập tin cần tìm 퐱풓 00 퐱 0.41 퐱 010 퐱퐱−퐱 0,17 0.24 1 퐱퐱−퐱 퐱 풓풓 풓 퐱퐱−퐱−퐱 퐱 0,12 10 퐱퐱 0.32 퐱 퐱 011 0,05 0.59 −퐱 퐱퐱−퐱 퐱 110 퐱 0,15 0.27 퐱 퐱 0.12 111 Các bước xây dựng thuật toán Huffman Bước 7: Đánh mã cho nút lá, loại tất nút phụ ta thu tập tin cần tìm 퐱퐱 퐱퐱 퐱퐱 00 10 010 퐱퐱 퐱퐱 퐱퐱 011 110 111 Ứng dụng mã hoá Huffman để nén file Các bước thực nén: • Đọc file xác định ký tự xuất file & tần suất chúng • Dựng mã Huffman • Dựa vào mã thu mã hóa ký tự ghi vào file nén • Lưu mã vào cuối file nén Các bước thực giải nén: • Dựa vào mã lưu vào cuối file nén ta xây dựng lại mã Huffman • Dựa vào mã Huffman ta thu mã hoá ký tự • Sau dựa vào file nén tiền hành mã hố ngược lại kí tự H M U F A N 00 10 010 011 110 111 00-010-011-011-10-110-111 H U F F M A N Ví dụ minh hoạ Ví dụ : Một file có 500 kí tự tương ứng với kí tự khác S, V, D, U, T Mỗi kí tự có xác suất xuất S: 0.5, V: 0.2, D: 0.15, U: 0.1, T: 0.05 Dùng giải thuật mã hóa Huffman, tính độ lớn file sau mã hóa ● Đối với cách mã hóa thơng thường, để mã hóa 500 kí tự cần tới 1500 bit để mã hóa để biểu diễn kí tự cần bit ●Với cách mã hóa Huffman ta gán chuỗi bit ngắn cho kí tự có xác suất xuất cao Ta S: V: D: U: T: gán: 01 001 0000 0001 →Số bit cần để biểu diễn file : 500*( 1*0.5 + 2*0.2 + 3*0.15 + 4*0.1 + 4*0.05) = 975 bit →975 bit < 1000 bit (so với cách thông thường) Bài tập Cho bảng phân phối xác suất tín hiệu rời rạc sau: x A B C D E f(x) 0.2 0.5 0.1 0.05 0.15 a) Xây dựng mã Huffman b) Giải mã đoạn mã nhị phân sau: 10111110110111010100 c) Tính hiệu suất mã Bài tập 1: Cho bảng phân phối xác suất tín hiệu rời rạc sau: a) Xây dựng mã Huffman 퐱풓 퐱풓풓풓풓 퐱풓−풓−풓−풓 0.5 0.5 100 퐱풓−풓−풓 퐱풓 0.15 1010 0.3 퐱풓 0.1 퐱풓 퐱풓 −풓 0.15 11 0.2 퐱풓 0.05 1011 x A B C D E f(x) 0.2 0.5 0.1 0.05 0.15 Bài tập Cho bảng phân phối xác suất tín hiệu rời rạc sau: b) Giải mã đoạn mã sau: 10111110110111010100 Từ bảng Huffman ta có: A: 11 B: → 1011 11 1011 11 1010 100 C: 1010 D A D B A C E D: 1011 →DADBACE E: 100 x A B C D E f(x) 0.2 0.5 0.1 0.05 0.15 c) Tính hiệu suất mã ●Entropy = -0.2* -0.5* -0.15* -0.1* -0.05* = ●Độ dài trung bình từ mã: ●Hiệu suất mã: / H(x) = = 2*0.2 + 1*0.5 + 4*0.1 + 4*0.05 + 3*0.15 = Bài tập 2: Cho mã sau, mã mã Huffman: a) 010, 00, 011, 10, 111 b) 000, 001, 010, 011, 11, 10 a) b) 0 1 1 1 ● Bị dư 110 → Không phải mã Huffman 0 10 1 ● Đầy đủ từ mã → Mã Huffman THANKS ! ... • Dựng mã Huffman • Dựa vào mã thu mã hóa ký tự ghi vào file nén • Lưu mã vào cuối file nén Các bước thực giải nén: • Dựa vào mã lưu vào cuối file nén ta xây dựng lại mã Huffman • Dựa vào mã Huffman. . .Nguyên tắc xây dựng mã Hufman ● Huffman đưa nguyên tắc để xây dựng hệ thống tối ưu sau: để prefix mãcó độ dài tối thiểu điều kiện cần đủ thỏa mãn tính chất sau: ● Tính... 0.05 0.15 a) Xây dựng mã Huffman b) Giải mã đoạn mã nhị phân sau: 10111110110111010100 c) Tính hiệu suất mã Bài tập 1: Cho bảng phân phối xác suất tín hiệu rời rạc sau: a) Xây dựng mã Huffman 퐱풓