Bài giảng Cấu trúc dữ liệu và giải thuật: Các thuật toán nén dữ liệu - Nguyễn Tri Tuấn

78 93 0
Bài giảng Cấu trúc dữ liệu và giải thuật: Các thuật toán nén dữ liệu - Nguyễn Tri Tuấn

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

Thông tin tài liệu

Bài giảng Cấu trúc dữ liệu và giải thuật: Các thuật toán nén dữ liệu cung cấp cho người đọc các kiến thức về nén dữ liệu, giải thuật nén RLE, giải thuật nén Huffman. Mời các bạn cùng tham khảo nội dung chi tiết.

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 CuuDuongThanCong.com https://fb.com/tailieudientucntt 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 CuuDuongThanCong.com https://fb.com/tailieudientucntt 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 CuuDuongThanCong.com https://fb.com/tailieudientucntt 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 CuuDuongThanCong.com https://fb.com/tailieudientucntt 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 ngun 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 CuuDuongThanCong.com https://fb.com/tailieudientucntt 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 CuuDuongThanCong.com https://fb.com/tailieudientucntt Nén tập tin: Giới thiệu (tt) Dùng cần Backup, Restore,… liệu Dùng thuật tố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 CuuDuongThanCong.com https://fb.com/tailieudientucntt 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 CuuDuongThanCong.com https://fb.com/tailieudientucntt 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 CuuDuongThanCong.com https://fb.com/tailieudientucntt Ý 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 CuuDuongThanCong.com https://fb.com/tailieudientucntt 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 CuuDuongThanCong.com https://fb.com/tailieudientucntt 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 CuuDuongThanCong.com https://fb.com/tailieudientucntt 65 Adaptive Huffman (tt) ROOT W = 21 # = E W = 10 # = Điều chỉnh Winter 2015 W = 11 # = A W = # = W = # = C W = # = W = # = D W = # = B W = # = Data Structures & Algorithms - Data Compression - Nguyen Tri Tuan, DH.KHTN Tp.HCM CuuDuongThanCong.com https://fb.com/tailieudientucntt 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 CuuDuongThanCong.com https://fb.com/tailieudientucntt 67 Adaptive Huffman (tt) Cách thức tạo cây: (tt) Thuật toá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 Hoá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 nút vi phạm Winter 2015 Data Structures & Algorithms - Data Compression - Nguyen Tri Tuan, DH.KHTN Tp.HCM CuuDuongThanCong.com https://fb.com/tailieudientucntt 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 CuuDuongThanCong.com https://fb.com/tailieudientucntt 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 CuuDuongThanCong.com https://fb.com/tailieudientucntt 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 CuuDuongThanCong.com https://fb.com/tailieudientucntt 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 = # = 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 CuuDuongThanCong.com D W = # = https://fb.com/tailieudientucntt 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 CuuDuongThanCong.com https://fb.com/tailieudientucntt 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 CuuDuongThanCong.com https://fb.com/tailieudientucntt 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 CuuDuongThanCong.com https://fb.com/tailieudientucntt 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 CuuDuongThanCong.com https://fb.com/tailieudientucntt 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 CuuDuongThanCong.com https://fb.com/tailieudientucntt 77 Hỏi & Đáp Winter 2015 Data Structures & Algorithms - Data Compression - Nguyen Tri Tuan, DH.KHTN Tp.HCM CuuDuongThanCong.com https://fb.com/tailieudientucntt 78 ...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 CuuDuongThanCong.com... 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... https://fb.com/tailieudientucntt 28 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 CuuDuongThanCong.com

Ngày đăng: 11/01/2020, 16:49

Từ khóa liên quan

Tài liệu cùng người dùng

Tài liệu liên quan