Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 78 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
78
Dung lượng
1,89 MB
Nội dung
Data Structures & Algorithms Các thuật toán nén liệu (Data Compression Algorithms) Nguyễn Tri Tuấn Khoa CNTT – ĐH.KHTN.Tp.HCM Email: nttuan@fit.hcmus.edu.vn Data Compression Giới thiệu Giải thuật nén RLE Giải thuật nén Huffman Winter 2015 Data Structures & Algorithms - Data Compression - Nguyen Tri Tuan, DH.KHTN Tp.HCM Giới thiệu Các thuật ngữ thường dùng: Data Compression Lossless Compression Lossy Compression Encoding Decoding Run / Run Length RLE, Huffman, LZW Winter 2015 Data Structures & Algorithms - Data Compression - Nguyen Tri Tuan, DH.KHTN Tp.HCM Giới thiệu (tt) Mục đích nén liệu: Giảm kích thước liệu: Khi lưu trữ Khi truyền liệu Tăng tính bảo mật Winter 2015 Data Structures & Algorithms - Data Compression - Nguyen Tri Tuan, DH.KHTN Tp.HCM Giới thiệu (tt) Có hình thức nén: Nén bảo tồn thơng tin (Lossless Compression): Khơng mát thơng tin nguyên thuỷ Hiệu suất nén không cao: 10% - 60% Các giải thuật tiêu biểu: RLE, Arithmetic, Huffman, LZ77, LZ78,… Nén khơng bảo tồn thơng tin (Lossy Compression): Thơng tin nguyên thủy bị mát Hiệu suất nén cao 40% - 90% Các giải thuật tiêu biểu: JPEG, MP3, MP4,… Winter 2015 Data Structures & Algorithms - Data Compression - Nguyen Tri Tuan, DH.KHTN Tp.HCM Giới thiệu (tt) Hiệu suất nén (%): Tỉ lệ % kích thước liệu giảm sau áp dụng thuật toán nén D (%) = (N – M)/N*100 D: Hiệu suất nén N: kích thước data trước nén M: kích thước data sau nén Hiệu suất nén tùy thuộc Phương pháp nén Đặc trưng liệu Winter 2015 Data Structures & Algorithms - Data Compression - Nguyen Tri Tuan, DH.KHTN Tp.HCM Nén tập tin: Giới thiệu (tt) Dùng cần Backup, Restore,… liệu Dùng thuật toán nén bảo tồn thơng tin Khơng quan tâm đến định dạng (format) tập tin Các phần mềm: PKzip, WinZip, WinRar,… Winter 2015 Data Structures & Algorithms - Data Compression - Nguyen Tri Tuan, DH.KHTN Tp.HCM Data Compression Giới thiệu Giải thuật nén RLE Giải thuật nén Huffman Winter 2015 Data Structures & Algorithms - Data Compression - Nguyen Tri Tuan, DH.KHTN Tp.HCM Giải thuật nén RLE RLE = Run Length Encoding: mã hoá theo độ dài lặp lại liệu Ý tưởng Dạng 1: RLE với file *.PCX Dạng 2: RLE với file *.BMP Nhận xét Winter 2015 Data Structures & Algorithms - Data Compression - Nguyen Tri Tuan, DH.KHTN Tp.HCM Ý tưởng: Giải thuật nén RLE (tt) Hình thức biểu diễn thơng tin dư thừa đơn giản: “đường chạy” (run) – dãy ký tự lặp lại liên tiếp “đường chạy” biểu diễn ngắn gọn: Khi độ dài đường chạy lớn Tiết kiệm đáng kể Ví dụ: Data = AAAABBBBBBBBCCCCCCCCCCDEE (# 25 bytes) Datanén = 4A8B10C1D2E (# 10 bytes) Winter 2015 Data Structures & Algorithms - Data Compression - Nguyen Tri Tuan, DH.KHTN Tp.HCM 10 Adaptive Huffman (tt) ROOT 18 W = 19 # = Điều chỉnh để thoả tính chất anh/em E W = 10 # = W = # = W = # = DA WW == 23 ## == 11 Winter 2015 B W = # = W = # = C W = # = A D W = # = Data Structures & Algorithms - Data Compression - Nguyen Tri Tuan, DH.KHTN Tp.HCM 64 Adaptive Huffman (tt) ROOT W = 20 # = E W = 10 # = W = 10 # = W = # = D W = # = Winter 2015 B W = # = W = # = C W = # = AA WW == 54 ## == 44 Tăng trọng số Data Structures & Algorithms - Data Compression - Nguyen Tri Tuan, DH.KHTN Tp.HCM 65 Adaptive Huffman (tt) ROOT W = 21 # = E W = 10 # = Điều chỉnh Winter 2015 W = 11 # = A W = # = W = # = C W = # = D W = # = W = # = B W = # = Data Structures & Algorithms - Data Compression - Nguyen Tri Tuan, DH.KHTN Tp.HCM 66 Adaptive Huffman (tt) Cách thức tạo cây: (tt) Thuật toán “Xác định nút vi phạm”: Gọi x nút hành So sánh x với nút sau (từ trái phải, từ trên) Nếu y cho: y.Weight < x.Weight x nút bị vi phạm Winter 2015 Data Structures & Algorithms - Data Compression - Nguyen Tri Tuan, DH.KHTN Tp.HCM 67 Adaptive Huffman (tt) Cách thức tạo cây: (tt) Thuật tốn “Điều chỉnh thỏa tính chất anh/em”: Gọi x nút vi phạm Tìm nút y xa nhất, phía sau x, thoả: y.Weight < x.Weight Hốn đổi nút x nút y Cập nhật lại nút cha tương ứng Lặp lại bước [1] khơng cịn nút vi phạm Winter 2015 Data Structures & Algorithms - Data Compression - Nguyen Tri Tuan, DH.KHTN Tp.HCM 68 Adaptive Huffman (tt) Cách thức tạo cây: (tt) Vấn đề “tràn số” Quá trình cập nhật tăng trọng số nút Trọng số nút gốc tăng nhanh… giá trị trọng số vượt khả lưu trữ kiểu liệu VD unsigned int Weight; Winter 2015 // Giá trị max 65535 Data Structures & Algorithms - Data Compression - Nguyen Tri Tuan, DH.KHTN Tp.HCM 69 Adaptive Huffman (tt) ROOT W = 255 # = W = 126 # = A W = 63 # = B W = 63 # = W = 129 # = C W = 64 # = D W = 65 # = Nút gốc bị tràn số ta tăng trọng số nút Winter 2015 Data Structures & Algorithms - Data Compression - Nguyen Tri Tuan, DH.KHTN Tp.HCM 70 Adaptive Huffman (tt) Cách thức tạo cây: (tt) Thuật toán “Xử lý trường hợp tràn số”: Khi cập nhật trọng số, kiểm tra trọng số nút gốc Nếu trọng số nút gốc > MAX_VALUE Giảm trọng số nút (chia cho 2) Cập nhật trọng số nút nhánh Kiểm tra tính chất anh/em điều chỉnh lại (*) (*) phép chia cho làm phần dư số nguyên Winter 2015 Data Structures & Algorithms - Data Compression - Nguyen Tri Tuan, DH.KHTN Tp.HCM 71 Adaptive Huffman (tt) ROOT W = 18 # = W = # = A W = # = ROOT W = # = W = 12 # = B W = # = C W = # = Cây bị tràn số Winter 2015 D W = # = W = # = A W = # = B W = # = W = # = C W = # = D W = # = Cây sau chia trọng số nút cho cập nhật lại trọng số nút nhánh vi phạm tính chất anh/em Data Structures & Algorithms - Data Compression - Nguyen Tri Tuan, DH.KHTN Tp.HCM 72 Adaptive Huffman (tt) ROOT W = # = C W = # = W = # = W = # = A W = # = D W = # = B W = # = Cây sau điều chỉnh Winter 2015 Data Structures & Algorithms - Data Compression - Nguyen Tri Tuan, DH.KHTN Tp.HCM 73 Adaptive Huffman (tt) Thuật toán nén (Encoding): // inputfile: liệu cần nén // outputfile: liệu nén initialize_Tree(T); // khởi tạo “tối thiểu” while(c != EOF) { c = getchar(inputfile); // đọc byte liệu encode(T, c, outputfile);// mã hoá (nén) c update_Tree(T, c); // cập nhật c vào } Winter 2015 Data Structures & Algorithms - Data Compression - Nguyen Tri Tuan, DH.KHTN Tp.HCM 74 Adaptive Huffman (tt) Thuật toán nén (Encoding): (tt) // Mã hoá ký tự c ghi lên outputfile encode(T, c, outputfile) Nếu c chưa có T Duyệt T tìm mã bit Escape, ghi lên file outputfile Ghi tiếp bits mã ASCII c lên file outputfile Nếu c có Duyệt T tìm mã bit c, ghi lên file outputfile Winter 2015 Data Structures & Algorithms - Data Compression - Nguyen Tri Tuan, DH.KHTN Tp.HCM 75 Adaptive Huffman (tt) Thuật toán giải nén (Decoding) // inputfile: liệu dạng nén // outputfile: liệu giải nén initialize_Tree(T); // khởi tạo “tối thiểu” while((c = decode(T, inputfile)) != EOF) { putchar(c, outputfile); // ghi c lên outputfile update_Tree(T, c); // cập nhật c vào } Winter 2015 Data Structures & Algorithms - Data Compression - Nguyen Tri Tuan, DH.KHTN Tp.HCM 76 Adaptive Huffman (tt) Thuật toán giải nén (Decoding): (tt) // Giải mã ký tự c từ inputfile decode(T, inputfile) Bắt đầu từ vị trí inputfile Lấy bit b, duyệt (b==0: left; b==1: right) Nếu đến nút x return (x.char) Nếu đến nút Escape: c = bit từ inputfile return c Winter 2015 Data Structures & Algorithms - Data Compression - Nguyen Tri Tuan, DH.KHTN Tp.HCM 77 Hỏi & Đáp Winter 2015 Data Structures & Algorithms - Data Compression - Nguyen Tri Tuan, DH.KHTN Tp.HCM 78 ... Algorithms - Data Compression - Nguyen Tri Tuan, DH.KHTN Tp.HCM 46 Giới thiệu Adaptive Huffman ? ?Thuật toán tổng quát Cây Huffman động ? ?Thuật toán nén (Encoding) ? ?Thuật toán giải nén (Decoding) Winter... tin để giải nén tăng kích thước liệu nén Dữ liệu cần nén phải có sẵn khơng nén liệu phát sinh theo thời gian thực Winter 2015 Data Structures & Algorithms - Data Compression - Nguyen Tri... 10% - 60 % Các giải thuật tiêu biểu: RLE, Arithmetic, Huffman, LZ77, LZ78,… Nén không bảo tồn thơng tin (Lossy Compression): Thơng tin ngun thủy bị mát Hiệu suất nén cao 40% - 90% Các giải thuật