Bài giảng Cấu trúc dữ liệu và giải thuật: Nén dữ liệu - Văn Chí Nam, Nguyễn Thị Hồng Nhung, Đặng Nguyễn Đức Tiến

43 109 0
Bài giảng Cấu trúc dữ liệu và giải thuật: Nén dữ liệu - Văn Chí Nam, Nguyễn Thị Hồng Nhung, Đặng Nguyễn Đức Tiế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: Nén dữ liệu cung cấp cho người học các kiến thức cơ bản về nén dữ liệu, một số khái niệm, nén Huffman tĩnh, nén Run-Length Encoding, nén LZW. Mời các bạn cùng tham khảo nội dung chi tiết.

Giảng viên: Văn Chí Nam – Nguyễn Thị Hồng Nhung – Đặng Nguyễn Đức Tiến Giới thiệu Một số khái niệm Nén Huffman tĩnh Nén Run-Length Encoding Nén LZW Cấu trúc liệu giải thuật - HCMUS 2015 CuuDuongThanCong.com ©FIT-HCMUS https://fb.com/tailieudientucntt  Thuật ngữ:  Data compression  Encoding  Decoding  Lossless data compression  Lossy data compression … Cấu trúc liệu giải thuật - HCMUS 2015  Nén liệu  Nhu cầu xuất sau hệ thống máy tính đời  Hiện nay, phục vụ cho dạng liệu đa phương tiện  Tăng tính bảo mật  Ứng dụng:  Lưu trữ  Truyền liệu Cấu trúc liệu giải thuật - HCMUS 2015 CuuDuongThanCong.com ©FIT-HCMUS https://fb.com/tailieudientucntt  Nguyên tắc:  Encode decode sử dụng scheme encode decode Cấu trúc liệu giải thuật - HCMUS 2015  Tỷ lệ nén (Data compression ratio)  Tỷ lệ kích thước liệu nguyên thủy liệu sau áp dụng thuật tốn nén  Gọi: N kích thước liệu nguyên thủy,  N1 kích thước liệu sau nén  Tỷ lệ nén R: N R  Ví N1 dụ:  Dữ liệu ban đầu 8KB, nén KB Tỷ lệ nén: 4-1 Cấu trúc liệu giải thuật - HCMUS 2015 CuuDuongThanCong.com ©FIT-HCMUS https://fb.com/tailieudientucntt  Tỷ lệ nén (Data compression ratio)  Về khả tiết kiệm không gian: Tỷ lệ việc giảm kích thước liệu sau áp dụng thuật tốn nén  Gọi: N kích thước liệu nguyên thủy,  N1 kích thước liệu sau nén  Tỷ lệ nén R: N1 R  1  Ví N dụ:  Dữ liệu ban đầu 8KB, nén KB Tỷ lệ nén: 75% Cấu trúc liệu giải thuật - HCMUS 2015  Nén liệu không mát (Lossless data compression) Cho phép liệu nén phục hồi nguyên vẹn liệu nguyên thủy (lúc chưa nén)  Ví dụ:  Run-length encoding  LZW …   Ứng dụng: Ảnh PCX, GIF, PNG, Tập tin * ZIP  Ứng dụng gzip (Unix)   Cấu trúc liệu giải thuật - HCMUS 2015 CuuDuongThanCong.com ©FIT-HCMUS https://fb.com/tailieudientucntt  Nén liệu có mát (Lossy data compression)  Dữ liệu nén phục hồi giống hoàn toàn với liệu nguyên thủy; đủ giống để sử dụng  không  gần  Ứng dụng: để nén liệu đa phương tiện (hình ảnh, âm thanh, video):  Dùng    Ảnh: JPEG, DjVu; Âm thanh: AAC, MP2, MP3; Video: MPEG-2, MPEG-4 Cấu trúc liệu giải thuật - HCMUS 2015 10 Cấu trúc liệu giải thuật - HCMUS 2015 CuuDuongThanCong.com ©FIT-HCMUS https://fb.com/tailieudientucntt 11  Mong muốn:  Một giải thuật nén bảo tồn thơng tin;  Khơng phụ thuộc vào tính chất liệu;  Ứng dụng rộng rãi liệu nào, với hiệu suất tốt Cấu trúc liệu giải thuật - HCMUS 2015 12  Tư tưởng chính:  Phương pháp cũ: dùng dãy bit cố định để biểu diễn ký tự  David Huffman (1952): tìm phương pháp xác định mã tối ưu liệu tĩnh :     Sử dụng vài bit để biểu diễn ký tự (gọi “mã bit” – bit code) Độ dài “mã bit” cho ký tự không giống nhau: Ký tự xuất nhiều lần: biểu diễn mã ngắn; Ký tự xuất : biểu diễn mã dài => Mã hóa mã có độ dài thay đổi (Variable Length Encoding) Cấu trúc liệu giải thuật - HCMUS 2015 CuuDuongThanCong.com ©FIT-HCMUS https://fb.com/tailieudientucntt 13  Giả sử có liệu sau đây: ADDAABBCCBAAABBCCCBBBCDAADDEEAA  Ký tự Tần số xuất A 10 B C D E Biểu diễn bit/ký tự cần: (10 + + + + 2) * = 248 bit Cấu trúc liệu giải thuật - HCMUS 2015 14  Dữ liệu: ADDAABBCCBAAABBCCCBBBCDAADDEEAA  Biểu diễn chiều dài thay đổi: Ký tự Tần số Mã A 10 11 B 10 C 00 D 011 E 010 (10*2 + 8*2 + 6*2 + 5*3 + 2*3) = 69 bit Cấu trúc liệu giải thuật - HCMUS 2015 CuuDuongThanCong.com ©FIT-HCMUS https://fb.com/tailieudientucntt 15 [B1]: Duyệt tập tin -> Lập bảng thống kê tần số xuất ký tự [B2]: Xây dựng Huffman dựa vào bảng thống kê tần số xuất [B3]: Phát sinh bảng mã bit cho ký tự tương ứng [B4]: Duyệt tập tin -> Thay ký tự tập tin mã bit tương ứng [B5]: Lưu lại thông tin Huffman cho giải nén Cấu trúc liệu giải thuật - HCMUS 2015 16 ADDAABBCCBAAABBCCCBBBCDAADDEEAA 11011011111110100000101111111010000 0001010100001111110110110100101111 Cấu trúc liệu giải thuật - HCMUS 2015 CuuDuongThanCong.com ©FIT-HCMUS https://fb.com/tailieudientucntt 17  Dữ liệu: ADDAABBCCBAAABBCCCBBBCDAADDEEAA Ký tự Tần số xuất A 10 B C D E Cấu trúc liệu giải thuật - HCMUS 2015 18  Cây Huffman: nhị phân    Mỗi node chứa ký tự Mỗi node cha chứa ký tự node Trọng số node:   Node con: tần số xuất ký tự tương ứng Node cha: Tổng trọng số node Cấu trúc liệu giải thuật - HCMUS 2015 CuuDuongThanCong.com ©FIT-HCMUS https://fb.com/tailieudientucntt 19 CEDBA CED C 31 13 BA ED E B D 18 A 10 Cấu trúc liệu giải thuật - HCMUS 2015 20  Phát sinh cây:  Bước 1: Chọn bảng thống kê hai phần tử x,y có trọng số thấp  Bước 2: Tạo node với node cha z có trọng số tổng trọng số hai node  Bước 3: Loại phần tử x,y khỏi bảng thống kê  Bước 4: Thêm phần tử z vào bảng thống kê  Bước 5: Lặp lại Bước 1-4 phần tử bảng thống kê Cấu trúc liệu giải thuật - HCMUS 2015 CuuDuongThanCong.com ©FIT-HCMUS https://fb.com/tailieudientucntt 10 60   Cần “từ điển” (bảng mã) để lưu giữ chuỗi ký tự gặp Dữ liệu cần nén so sánh với “từ điển”  Nếu có “từ điển” đưa ký hiệu tương ứng chuỗi  Nếu khơng có thêm ký hiệu vào “từ điển” Cấu trúc liệu giải thuật - HCMUS 2015 61      Bước 1: Khởi tạo từ điển gồm tất ký tự (chiều dài 1) Bước 2: Tìm chuỗi dài W từ điển khớp hoàn toàn với chuỗi ký tự cần nén Bước 3: Xuất ký hiệu W (từ từ điển) Bước 4: Thêm chuỗi W ký tự đằng sau vào từ điển Gán ký hiệu thích hợp cho chuỗi Bước 5: Khi chưa hết chuỗi cần nén, lặp lại bước Cấu trúc liệu giải thuật - HCMUS 2015 CuuDuongThanCong.com ©FIT-HCMUS https://fb.com/tailieudientucntt 29 62 string Pre; char CurrentValue; Pre = empty string; while (Vẫn ký tự để đọc) { CurrentValue = Đọc ký tự; if (Pre+CurrentValue Có Từ điển) Pre = Pre+CurrentValue; else { Ghi ký hiệu Pre vào tập tin; Thêm Pre+CurrentValue vào Từ điển; Pre = CurrentValue; } } Ghi ký hiệu Pre vào tập tin; Cấu trúc liệu giải thuật - HCMUS 2015 63  Giả sử ký tự chuỗi cần nén gồm {a, b}  Trong thực tế, tập ký tự bao gồm 256 ký tự ASCII  Các ký tự mã với số  Bảng mã ban đầu: Mã Khóa a b Cấu trúc liệu giải thuật - HCMUS 2015 CuuDuongThanCong.com ©FIT-HCMUS https://fb.com/tailieudientucntt 30 64  Việc mã hóa thực việc quét chuỗi ban đầu từ trái sang phải  Tìm chuỗi p dài tồn bảng mã  Biểu diễn p mã pCode  Tạo chuỗi pc với c ký tự chuỗi mã hóa Thêm chuỗi pc vào bảng mã gán mã cho chuỗi pc Cấu trúc liệu giải thuật - HCMUS 2015 65 Chuỗi ban đầu = abababbabaabbabbaabba • p = a • pCode = • c = b • Biểu diễn a thêm ab vào bảng mã • Chuỗi mã hóa = code key a b ab Cấu trúc liệu giải thuật - HCMUS 2015 CuuDuongThanCong.com ©FIT-HCMUS https://fb.com/tailieudientucntt 31 66   • • • • • Chuỗi ban đầu = abababbabaabbabbaabba Chuỗi mã hóa = p=b pCode = c=a Biểu diễn b thêm ba vào bảng mã Chuỗi mã hóa = 01 code key a b ab ba Cấu trúc liệu giải thuật - HCMUS 2015 67   • • • • • Chuỗi ban đầu = abababbabaabbabbaabba Chuỗi mã hóa = 01 p = ab pCode = c=a Biểu diễn ab thêm aba vào bảng mã Chuỗi mã hóa = 012 code key a b ab ba aba Cấu trúc liệu giải thuật - HCMUS 2015 CuuDuongThanCong.com ©FIT-HCMUS https://fb.com/tailieudientucntt 32 68   • • • • • Chuỗi ban đầu = abababbabaabbabbaabba Chuỗi mã hóa = 012 p = ab pCode = c=b Biểu diễn ab thêm abb vào bảng mã Chuỗi mã hóa = 0122 code key a b ab ba aba abb 69   • • • • • Chuỗi ban đầu = abababbabaabbabbaabba Chuỗi mã hóa = 0122 p = ba pCode = c=b Biểu diễn ba thêm bab vào bảng mã Chuỗi mã hóa = 01223 code key CuuDuongThanCong.com ©FIT-HCMUS a b ab ba aba abb bab https://fb.com/tailieudientucntt 33 70   • • • • • Chuỗi ban đầu = abababbabaabbabbaabba Chuỗi mã hóa = 01223 p = ba pCode = c=a Biểu diễn ba thêm baa vào bảng mã Chuỗi mã hóa = 012233 code key a b ab ba aba abb bab baa 71   • • • • • Chuỗi ban đầu = abababbabaabbabbaabba Chuỗi mã hóa = 012233 p = abb pCode = c=a Biểu diễn abb thêm abba vào bảng mã Chuỗi mã hóa = 0122335 code key CuuDuongThanCong.com ©FIT-HCMUS a b ab ba aba abb bab baa abba https://fb.com/tailieudientucntt 34 72   • • • • • Chuỗi ban đầu = abababbabaabbabbaabba Chuỗi mã hóa = 0122335 p = abba pCode = c=a Biểu diễn abba thêm abbaa vào bảng mã Chuỗi mã hóa = 01223358 code key a b ab ba aba abb bab baa abbaabbaa 73   • • • • • Chuỗi ban đầu = abababbabaabbabbaabba Chuỗi mã hóa = 01223358 p = abba pCode = c = null Biểu diễn abba Chuỗi mã hóa = 012233588 code key CuuDuongThanCong.com ©FIT-HCMUS a b ab ba aba abb bab baa abbaabbaa https://fb.com/tailieudientucntt 35 74     Giải nén khôi phục lại liệu gốc từ liệu nén Đưa ký hiệu thành chuỗi ban đầu Vừa giải nén vừa hình thành lại bảng mã Giống trình nén, giải nén sử dụng bảng mã ban đầu gồm chuỗi gồm ký tự Cấu trúc liệu giải thuật - HCMUS 2015 75 string entry; int currvalue = Đọc vào giá trị mã; string prev = Sử dụng bảng mã để giải mã currvalue Xuất prev; while (còn liệu để đọc) { currvalue = Đọc vào giá trị mã; entry = Sử dụng bảng mã để giải mã currvalue; Xuất entry; Thêm (prev + first char of entry) vào bảng mã; prev = entry; } Cấu trúc liệu giải thuật - HCMUS 2015 CuuDuongThanCong.com âFIT-HCMUS https://fb.com/tailieudientucntt 36 76 ã Chui mã hóa = 012233588 pCode = p = a • Chuỗi giải mã = a  code key a b 77  • • • Chuỗi mã hóa = 012233588 pCode = p = b prev = a với ký tự p thêm vào bảng mã Chuỗi giải mã = ab code key CuuDuongThanCong.com ©FIT-HCMUS a b ab https://fb.com/tailieudientucntt 37 78  • • • Chuỗi mã hóa = 012233588 pCode = p = ab prev = b với ký tự p thêm vào bảng mã Chuỗi giải mã = abab code key a b ab ba 79  • • • Chuỗi mã hóa = 012233588 pCode = p = ab prev = ab với ký tự p thêm vào bảng mã Chuỗi giải mã = ababab code key CuuDuongThanCong.com ©FIT-HCMUS a b ab ba aba https://fb.com/tailieudientucntt 38 80  • • • Chuỗi mã hóa = 012233588 pCode = p = ba prev = ab với ký tự p thêm vào bảng mã Chuỗi giải mã = abababba code key a b ab ba aba abb 81  • • • Chuỗi mã hóa = 012233588 pCode = p = ba prev = ba với ký tự p thêm vào bảng mã Chuỗi giải mã = abababbaba code key CuuDuongThanCong.com ©FIT-HCMUS a b ab ba aba abb bab https://fb.com/tailieudientucntt 39 82  • • • Chuỗi mã hóa = 012233588 pCode = p = abb prev = ba với ký tự p thêm vào bảng mã Chuỗi giải mã = abababbabaabb code key a b ab ba aba abb bab baa 83  • • • • • Chuỗi mã hóa = 012233588 khơng tìm thấy bảng mã Khi mã khơng tìm thấy bảng mã, khóa prev với ký tự prev prev = abb Vì vậy, biểu diễn abba Chuỗi giải mã = abababbabaabbabba code key CuuDuongThanCong.com ©FIT-HCMUS a b ab ba aba abb bab baa abba https://fb.com/tailieudientucntt 40 84  • • • Chuỗi mã hóa = 012233588 pCode = p = abba prev = abba với ký tự p thêm vào bảng mã Chuỗi giải mã = abababbabaabbabbaabba code key a b ab ba aba abb bab baa abbaabbaa 85  Ưu điểm:  Hệ số nén cao, không cần kèm theo bảng mã nén  Có thể dùng để nén nhiều loại tập tin  Nhược điểm:  Tốn nhiều nhớ để tạo từ điển  Khó thực liệu kích thước nhỏ Cấu trúc liệu giải thuật - HCMUS 2015 CuuDuongThanCong.com ©FIT-HCMUS https://fb.com/tailieudientucntt 41 86 Độ phức tạp:  Nén:  O(n)  với n độ dài chuỗi cần nén Giải nén:  O(n) với n độ dài liệu cần giải nén Cấu trúc liệu giải thuật - HCMUS 2015 87     Là phương thức nén sử dụng rộng rãi máy tính Là tiện ích hệ điều hành Unix Một số tiện ích nén sử dụng LZW phương pháp thuật toán nén LZW Trở nên phổ biến trở thành phần định dạng GIF sử dụng TIFF, PDF Cấu trúc liệu giải thuật - HCMUS 2015 CuuDuongThanCong.com ©FIT-HCMUS https://fb.com/tailieudientucntt 42 88  LZMW (năm 1985, V Miller, M Wegman)  LZAP (năm 1988, James Storer)  LZWL biến thể âm tiết (syllable-based) dựa LZW Cấu trúc liệu giải thuật - HCMUS 2015 89 Cấu trúc liệu giải thuật - HCMUS 2015 CuuDuongThanCong.com ©FIT-HCMUS https://fb.com/tailieudientucntt 43 ... hết liệu Cấu trúc liệu giải thuật - HCMUS 2015 32  Có thể khơng lưu trữ Huffman bảng thống kê tần số vào tập tin nén hay không? Cấu trúc liệu giải thuật - HCMUS 2015 CuuDuongThanCong.com ©FIT-HCMUS... 0xFF 0xFE 0xFF 0x00 Đoạn liệu giải mã: Số byte đoạn giải mã là: Cấu trúc liệu giải thuật - HCMUS 2015 55 Cấu trúc liệu giải thuật - HCMUS 2015 CuuDuongThanCong.com ©FIT-HCMUS https://fb.com/tailieudientucntt... tin cần nén Thay tất ký tự tập tin mã bit tương ứng Cấu trúc liệu giải thuật - HCMUS 2015 30  Phục vụ cho việc giải nén  Cách thức:  Cây Huffman  Bảng tần số Cấu trúc liệu giải thuật - HCMUS

Ngày đăng: 11/01/2020, 17:22

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

Tài liệu liên quan