Một số tính chất của cây HuffmanĐịnh lý 1 ◮ Cây Huffman là cây nhị phân đầy đủ ◮ Các nút có tần suất cao nằm gần gốc ◮ Các nút có tần suất thấp nằm xa gốc ◮ Tổng số nút của cây là 2n − 1
Trang 1CÁC THUẬT TOÁN NÉN DỮ LIỆU
Bùi Tiến Lên01/01/2017
CuuDuongThanCong.com https://fb.com/tailieudientucntt
Trang 3Giới thiệu (cont.)
Có hai dạng thuật nén
Spring 2017 Data structure & Algorithm 3
CuuDuongThanCong.com https://fb.com/tailieudientucntt
Trang 4Giới thiệu (cont.)
◮ N: kích thước dữ liệu trước khi nén
◮ M: kích thước dữ liệu sau khi nén
Hiệu suất nén tùy thuộc vào:
Spring 2017 Data structure & Algorithm 4
CuuDuongThanCong.com https://fb.com/tailieudientucntt
Trang 5Thuật toán nén RLE
dựa trên sự lặp lại
(run)
◮ Đường chạy sẽ được nén bằng công thức sau
[số ký tự][ký tự]
Spring 2017 Data structure & Algorithm 5
CuuDuongThanCong.com https://fb.com/tailieudientucntt
Trang 6Thuật toán nén RLE (cont.)
Trang 7Đánh giá thuật toán RLE
Spring 2017 Data structure & Algorithm 7
CuuDuongThanCong.com https://fb.com/tailieudientucntt
Trang 8Thuật toán nén LZW
Giới thiệu
[Lempel, 1978]
từ điển Do đó nó còn được gọi là thuật toán nén từ điển
Spring 2017 Data structure & Algorithm 8
CuuDuongThanCong.com https://fb.com/tailieudientucntt
Trang 9Thuật toán nén dữ liệu
w ← k
XUẤT mã c ← Code(w)
Spring 2017 Data structure & Algorithm 9
CuuDuongThanCong.com https://fb.com/tailieudientucntt
Trang 10Minh họa thuật toán nén dữ liệu
Trang 11Minh họa thuật toán nén dữ liệu
Trang 12Minh họa thuật toán nén dữ liệu
Trang 13Minh họa thuật toán nén dữ liệu
Trang 14Minh họa thuật toán nén dữ liệu
Trang 15Minh họa thuật toán nén dữ liệu
Trang 16Minh họa thuật toán nén dữ liệu
Trang 17Minh họa thuật toán nén dữ liệu
Trang 18Minh họa thuật toán nén dữ liệu
Trang 19Minh họa thuật toán nén dữ liệu
Trang 20Minh họa thuật toán nén dữ liệu
Trang 21Minh họa thuật toán nén dữ liệu
Trang 22Minh họa thuật toán nén dữ liệu
Trang 23Minh họa thuật toán nén dữ liệu
Trang 24Minh họa thuật toán nén dữ liệu
Trang 25Minh họa thuật toán nén dữ liệu
Trang 26Minh họa thuật toán nén dữ liệu
Trang 28Thuật toán giải nén dữ liệu
Trong thuật toán giải nén không cần phải cung cấp hết toàn bộ từđiển mà có thể sử dụng lại kỹ thuật của thuật toán nén dữ liệu đểxây dựng lại từ điển
Trang 29Minh họa thuật toán giải nén dữ liệu
Cho chuỗi mã hóa nén dữ liệu “0 1 2 4 3 6” →
Trang 30Minh họa thuật toán giải nén dữ liệu
Cho chuỗi mã hóa nén dữ liệu “0 1 2 4 3 6” → a
Trang 31Minh họa thuật toán giải nén dữ liệu
Cho chuỗi mã hóa nén dữ liệu “0 1 2 4 3 6” → ab
Trang 32Minh họa thuật toán giải nén dữ liệu
Cho chuỗi mã hóa nén dữ liệu “0 1 2 4 3 6” → abab
Trang 33Minh họa thuật toán giải nén dữ liệu
Cho chuỗi mã hóa nén dữ liệu “0 1 2 4 3 6” → abababa
Trang 34Minh họa thuật toán giải nén dữ liệu
Cho chuỗi mã hóa nén dữ liệu “0 1 2 4 3 6” → ababababa
Trang 35Minh họa thuật toán giải nén dữ liệu
Cho chuỗi mã hóa nén dữ liệu “0 1 2 4 3 6” → abababababab
Trang 37Thuật toán nén Huffman
Ý tưởng
Sử dụng tần suất xuất hiện của dữ liệu để nén dữ liệu Những dữliệu nào có tần suất cao thì dùng ít bits còn những dữ diệu nào cótần suất thấp thì dùng nhiều bits
Spring 2017 Data structure & Algorithm 15
CuuDuongThanCong.com https://fb.com/tailieudientucntt
Trang 38Các phương pháp mã hóa dữ liệu
Có rất nhiều phương pháp để mã hóa dữ liệu
bits) để mã hóa ký tự: ASCII
mã hóa ký tự: Morse, Huffman
Spring 2017 Data structure & Algorithm 16
CuuDuongThanCong.com https://fb.com/tailieudientucntt
Trang 40Bảng thông kê số lần xuất hiện
Bảng thông kê số lần xuất hiện của ký tự trong dữ liệu được minhhọa qua ví dụ dưới đây
Trang 41dữ liệu
số của nút con trái phải
là 1
Spring 2017 Data structure & Algorithm 19
CuuDuongThanCong.com https://fb.com/tailieudientucntt
Trang 42Minh họa cây Huffman
Trang 43Một số tính chất của cây Huffman
Định lý 1
◮ Cây Huffman là cây nhị phân đầy đủ
◮ Các nút có tần suất cao nằm gần gốc
◮ Các nút có tần suất thấp nằm xa gốc
◮ Tổng số nút của cây là 2n − 1 với n là số ký tự
Spring 2017 Data structure & Algorithm 21
CuuDuongThanCong.com https://fb.com/tailieudientucntt
Trang 44Thuật toán nén Huffman
của mỗi ký tự
tương ứng
Spring 2017 Data structure & Algorithm 22
CuuDuongThanCong.com https://fb.com/tailieudientucntt
Trang 45Phát sinh bảng mã bit cho cây Huffman
Trang 46Thuật toán tạo cây Huffman
Từ bảng thông kê tần suất xuất hiện của các ký tự ta khởi tạo cây
T gồm có n nút là các ký tự với các trọng số của chúng
là tổng của x và y và chuỗi của z là tổng của x và y
với x và y là nút con trái và phải
Spring 2017 Data structure & Algorithm 24
CuuDuongThanCong.com https://fb.com/tailieudientucntt
Trang 47Minh họa thuật toán tạo cây Huffman
Hình 4:Khởi tạo cây Huffman
Spring 2017 Data structure & Algorithm 25
CuuDuongThanCong.com https://fb.com/tailieudientucntt
Trang 48Minh họa thuật toán tạo cây Huffman (cont.)
Hình 5:Thêm nút ED cho cây Huffman
Spring 2017 Data structure & Algorithm 26
CuuDuongThanCong.com https://fb.com/tailieudientucntt
Trang 49Minh họa thuật toán tạo cây Huffman (cont.)
Hình 6: Thêm nút CED cho cây Huffman
Spring 2017 Data structure & Algorithm 27
CuuDuongThanCong.com https://fb.com/tailieudientucntt
Trang 50Minh họa thuật toán tạo cây Huffman (cont.)
CED,13 C,6 ED,7 E,2 D,5
Hình 7:Thêm nút BA cho cây Huffman
Spring 2017 Data structure & Algorithm 28
CuuDuongThanCong.com https://fb.com/tailieudientucntt
Trang 51Minh họa thuật toán tạo cây Huffman (cont.)
Chuỗi ký tự Tần suất
Loại bỏ BA, CED và thêm
CEDBA vào bảng tần suất
Chuỗi ký tự Tần suất
CEDBA 31
CEDBA,31 CED,13 BA,18
B,8 A,10 C,6 ED,7
Trang 52Một số điểm hạn chế của thuật toán nén Huffman
Hạn chế
dữ liệu phát sinh theo thời gian thực
Spring 2017 Data structure & Algorithm 30
CuuDuongThanCong.com https://fb.com/tailieudientucntt
Trang 53Adaptive Huffman
Lịch sử
toán và thuật toán còn có tên “thuật toán FGK”
tối ưu cây Huffman
Spring 2017 Data structure & Algorithm 31
CuuDuongThanCong.com https://fb.com/tailieudientucntt
Trang 54Adaptive Huffman (cont.)
Ưu điểm
Spring 2017 Data structure & Algorithm 32
CuuDuongThanCong.com https://fb.com/tailieudientucntt
Trang 55Adaptive Huffman (cont.)
Định nghĩa 3
Cây Adaptive Huffman (Adaptive Huffman Tree) là
xuất hiện của ký tự tính đến thời điểm đang xét
các nút con của nó
Transmitted Symbol) luôn có trọng số bằng 0 (tương ứng với
các ký tự chưa xuất hiện trên cây đến thời điểm đang xét)
Spring 2017 Data structure & Algorithm 33
CuuDuongThanCong.com https://fb.com/tailieudientucntt
Trang 56Adaptive Huffman (cont.)
Spring 2017 Data structure & Algorithm 34
CuuDuongThanCong.com https://fb.com/tailieudientucntt
Trang 57Adaptive Huffman (cont.)
Trang 58Thuật toán nén
Spring 2017 Data structure & Algorithm 36
CuuDuongThanCong.com https://fb.com/tailieudientucntt
Trang 59Thuật toán nén (cont.)
Bước 1: Khởi tạo cây Adaptive Huffman
NYT 0
Hình 10:Cây Adaptive Huffman khởi tạo
Spring 2017 Data structure & Algorithm 37
CuuDuongThanCong.com https://fb.com/tailieudientucntt
Trang 60Thuật toán nén (cont.)
Bước 2.2: Mã hóa ký tự c Kiểm tra ký tự c có trong cây
Adaptive Huffman hay chưa?
thông thường)
NYT + mã ASCII 8 bit của ký tự c” (?)
Spring 2017 Data structure & Algorithm 38
CuuDuongThanCong.com https://fb.com/tailieudientucntt
Trang 61Thuật toán nén (cont.)
14
4
c 10
Hình 11: Mã hóa ký tự đã có trong cây: mã của b là 01, mã của c là 1
Spring 2017 Data structure & Algorithm 39
CuuDuongThanCong.com https://fb.com/tailieudientucntt
Trang 62Thuật toán nén (cont.)
14
4
c 10
Hình 12:Mã hóa ký tự chưa có trong cây: mã của d là : 0001100100
Spring 2017 Data structure & Algorithm 40
CuuDuongThanCong.com https://fb.com/tailieudientucntt
Trang 63Thuật toán nén (cont.)
Bước 2.3: Cập nhật cây
Lặp p 6= NULL
phải và dưới → trên) có cùng trọng số (không tính nút cha của p)
Spring 2017 Data structure & Algorithm 41
CuuDuongThanCong.com https://fb.com/tailieudientucntt
Trang 64Thuật toán nén (cont.)
Cho cây Adaptive ban đầu hãy cập nhật cây với chuỗi ký tự “aad”
NYT 0
Hình 13:Cây Adaptive Huffman khởi đầu
Spring 2017 Data structure & Algorithm 42
CuuDuongThanCong.com https://fb.com/tailieudientucntt
Trang 65Thuật toán nén (cont.)
Đọc dữ liệu “aad”
1
Hình 14: Cập nhật cây sau khi thêm a
Spring 2017 Data structure & Algorithm 43
CuuDuongThanCong.com https://fb.com/tailieudientucntt
Trang 66Thuật toán nén (cont.)
Đọc dữ liệu “aad”
2
Hình 15: Cập nhật cây sau khi thêm a
Spring 2017 Data structure & Algorithm 44
CuuDuongThanCong.com https://fb.com/tailieudientucntt
Trang 67Thuật toán nén (cont.)
Hình 16: Cập nhật cây sau khi thêm d
Spring 2017 Data structure & Algorithm 45
CuuDuongThanCong.com https://fb.com/tailieudientucntt
Trang 68Minh họa cập nhật trọng số
Cho một cây Adaptive Huffman Và thêm a vào cây
188
Hình 17: Cây Adaptive Huffman
Spring 2017 Data structure & Algorithm 46
CuuDuongThanCong.com https://fb.com/tailieudientucntt
Trang 69Minh họa cập nhật trọng số (cont.)
188
Hình 18: Tìm nút xa nhất có trọng số bằng với a và chuẩn bị hoán đổi
Spring 2017 Data structure & Algorithm 47
CuuDuongThanCong.com https://fb.com/tailieudientucntt
Trang 70Minh họa cập nhật trọng số (cont.)
188
Trang 71Minh họa cập nhật trọng số (cont.)
188
Hình 20:Cập nhật trọng số và di chuyển lên nút cha
Spring 2017 Data structure & Algorithm 49
CuuDuongThanCong.com https://fb.com/tailieudientucntt
Trang 72Minh họa cập nhật trọng số (cont.)
188
Hình 21:Cập nhật trọng số và di chuyển lên nút cha
Spring 2017 Data structure & Algorithm 50
CuuDuongThanCong.com https://fb.com/tailieudientucntt
Trang 73Minh họa cập nhật trọng số (cont.)
198
Trang 74Thuật toán giải nén
Spring 2017 Data structure & Algorithm 52
CuuDuongThanCong.com https://fb.com/tailieudientucntt
Trang 75Đánh giá cây Huffman và Adaptive Huffman
Đánh giá thuật toán cây Huffman và Adaptive Huffman
◮ ?
◮ ?
Spring 2017 Data structure & Algorithm 53
CuuDuongThanCong.com https://fb.com/tailieudientucntt
Trang 76Tài liệu tham khảo
Huffman, D A (1952)
A method for the construction of minimum-redundancy codes
Proceedings of the IRE, 40(9):1098–1101.
Lempel, A (1978)
Compression of individual sequences via variable-rate coding
IEEE Transactions on Information Theory, 24(5):530–536.
Vitter, J S (1987)
Design and analysis of dynamic huffman codes
Journal of the ACM (JACM), 34(4):825–845.
Spring 2017 Data structure & Algorithm 54
CuuDuongThanCong.com https://fb.com/tailieudientucntt