1. Trang chủ
  2. » Tất cả

Cấu trúc dữ liệu và giải thuật ctdl 05 data compression

88 4 0

Đ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

Thông tin cơ bản

Tiêu đề Cấu trúc dữ liệu và giải thuật ctdl 05 data compression
Tác giả Văn Chí Nam, Nguyễn Thị Hồng Nhung, Đặng Nguyễn Đức Tiến
Trường học Trường Đại học Khoa học Tự nhiên TP. Hồ Chí Minh
Chuyên ngành Cấu trúc dữ liệu và giải thuật
Thể loại Báo cáo
Năm xuất bản 2011
Thành phố Thành phố Hồ Chí Minh
Định dạng
Số trang 88
Dung lượng 628,42 KB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

Slide 1 NÉN DỮ LiỆU Giảng viên Văn Chí Nam – Nguyễn Thị Hồng Nhung – Đặng Nguyễn Đức Tiến Cấu trúc dữ liệu và giải thuật 1 Nội dung trình bày 2 Cấu trúc dữ liệu và giải thuật HCMUS 2011 2 Giới thiệu M[.]

Trang 1

Cấu trúc dữ liệu và giải thuật

NÉN DỮ LIỆU

Giảng viên:

Văn Chí Nam – Nguyễn Thị Hồng Nhung – Đặng Nguyễn Đức Tiến

Trang 2

Cấu trúc dữ liệu và giải thuật - HCMUS 2011

Trang 3

Cấu trúc dữ liệu và giải thuật - HCMUS 2011

 Lossless data compression

 Lossy data compression

Trang 4

Cấu trúc dữ liệu và giải thuật - HCMUS 2011

Trang 5

Cấu trúc dữ liệu và giải thuật - HCMUS 2011

Trang 6

Cấu trúc dữ liệu và giải thuật - HCMUS 2011

6

Khái niệm

 Tỷ lệ nén (Data compression ratio)

 Tỷ lệ giữa kích thước của dữ liệu nguyên thủy và của dữ liệu sau khi áp dụng thuật toán nén.

 Gọi:

 N là kích thước của dữ liệu nguyên thủy,

 N1 là kích thước của dữ liệu sau khi nén.

R 

Trang 7

Cấu trúc dữ liệu và giải thuật - HCMUS 2011

7

Khái niệm

 Tỷ lệ nén (Data compression ratio)

 Về khả năng tiết kiệm không gian: Tỷ lệ của việc giảm kích thước dữ liệu sau khi áp dụng thuật toán nén.

 Gọi:

 N là kích thước của dữ liệu nguyên thủy,

 N1 là kích thước của dữ liệu sau khi nén.

 Tỷ lệ nén R:

 Ví dụ:

 Dữ liệu ban đầu 8KB, nén còn 2 KB Tỷ lệ nén: 75%

N N

R  1 1

Trang 8

Cấu trúc dữ liệu và giải thuật - HCMUS 2011

Trang 9

Cấu trúc dữ liệu và giải thuật - HCMUS 2011

9

Khái niệm

 Nén dữ liệu mất mát thông tin (Lossy data

compression)

 Dữ liệu nén được phục hồi

 không giống hoàn toàn với dữ liệu nguyên thủy;

 Âm thanh: AAC, MP2, MP3;

 Video: MPEG-2, MPEG-4

Trang 10

Cấu trúc dữ liệu và giải thuật - HCMUS 2011

Nén Huffman tĩnh

10

Trang 11

Cấu trúc dữ liệu và giải thuật - HCMUS 2011

11

Giới thiệu

 Một giải thuật nén bảo toàn thông tin;

 Không phụ thuộc vào tính chất của dữ liệu;

 Ứng dụng rộng rãi trên bất kỳ dữ liệu nào, với hiệu suất tốt.

Trang 12

Cấu trúc dữ liệu và giải thuật - HCMUS 2011

12

Giới thiệu

 Tư tưởng chính:

 Phương pháp cũ: dùng 1 dãy bit cố định để biểu diễn 1 ký tự

 David Huffman (1952): tìm ra phương pháp xác định mã tối ưu trên dữ liệu tĩnh :

 Sử dụng vài bit để biểu diễn 1 ký tự (gọi là “mã bit” – bit code)

 Độ dài “mã bit” cho các ký tự không giống nhau:

 Ký tự xuất hiện nhiều lần: biểu diễn bằng mã ngắn;

 Ký tự xuất hiện ít : biểu diễn bằng mã dài

=> Mã hóa bằng mã có độ dài thay đổi (Variable Length Encoding)

Trang 13

Cấu trúc dữ liệu và giải thuật - HCMUS 2011

Trang 14

Cấu trúc dữ liệu và giải thuật - HCMUS 2011

Trang 15

Cấu trúc dữ liệu và giải thuật - HCMUS 2011

[B3]: Phát sinh bảng mã bit cho từng ký tự tương ứng

[B4]: Duyệt tập tin -> Thay thế các ký tự trong tập tin bằng mã bit tương ứng.

[B5]: Lưu lại thông tin của cây Huffman cho giải nén

Trang 16

Cấu trúc dữ liệu và giải thuật - HCMUS 2011

Trang 17

Cấu trúc dữ liệu và giải thuật - HCMUS 2011

Trang 18

Cấu trúc dữ liệu và giải thuật - HCMUS 2011

Thuật toán nén – Tạo cây Huffman

 Cây Huffman: cây nhị

phân

 Mỗi node lá chứa 1 ký tự

 Mỗi node cha chứa các ký

tự của những node con.

 Trọng số của node:

 Node con: tần số xuất hiện của ký tự tương ứng

 Node cha: Tổng trọng số của các node con.

Trang 19

Cấu trúc dữ liệu và giải thuật - HCMUS 2011

Trang 20

Cấu trúc dữ liệu và giải thuật - HCMUS 2011

20

Thuật toán nén – Tạo cây Huffman

 Phát sinh cây:

Bước 1: Chọn trong bảng thống kê hai phần tử x,y có trọng số thấp nhất.

Bước 2: Tạo 2 node của cây cùng với node cha z có trọng số bằng tổng

trọng số của hai node con.

Bước 3: Loại 2 phần tử x,y ra khỏi bảng thống kê.

Bước 4: Thêm phần tử z vào trong bảng thống kê.

 Bước 5: Lặp lại Bước 1-4 cho đến khi còn 1 phần tử trong bảng thống kê.

Trang 21

Cấu trúc dữ liệu và giải thuật - HCMUS 2011

 Nếu 2 node có trọng số bằng nhau

 Node nào có ký tự nhỏ hơn thì nằm bên trái

 Node có ký tự lớn hơn nằm bên phải.

Trang 22

Cấu trúc dữ liệu và giải thuật - HCMUS 2011

Trang 23

Cấu trúc dữ liệu và giải thuật - HCMUS 2011

Trang 24

Cấu trúc dữ liệu và giải thuật - HCMUS 2011

Trang 25

Cấu trúc dữ liệu và giải thuật - HCMUS 2011

Trang 26

Cấu trúc dữ liệu và giải thuật - HCMUS 2011

26

Thuật toán nén – Tạo cây Huffman

Ký tự Tần số

Trang 27

Cấu trúc dữ liệu và giải thuật - HCMUS 2011

27

Thuật toán nén – Phát sinh mã bit

 Mã bit của từng ký tự: đường đi từ node gốc của cây Huffman đến node lá của ký tự đó.

 Bit 0 được tạo ra khi đi qua nhánh trái

 Bit 1 được tạo ra khi đi qua nhánh phải

Trang 28

Cấu trúc dữ liệu và giải thuật - HCMUS 2011

Trang 29

Cấu trúc dữ liệu và giải thuật - HCMUS 2011

Trang 30

Cấu trúc dữ liệu và giải thuật - HCMUS 2011

30

Thuật toán nén – Lưu lại thông tin

 Phục vụ cho việc giải nén.

 Cây Huffman

 Bảng tần số

Trang 31

Cấu trúc dữ liệu và giải thuật - HCMUS 2011

31

Thuật toán giải nén

 Phục hồi cây Huffman dựa trên thông tin đã lưu trữ.

 Lặp

 Đi từ gốc cây Huffman

 Đọc từng bit từ tập tin đã được nén

 Nếu bit 0: đi qua nhánh trái

 Nếu bit 1: đi qua nhánh phải

 Nếu đến node lá: xuất ra ký tự tại node lá này.

 Cho đến khi nào hết dữ liệu

Trang 32

Cấu trúc dữ liệu và giải thuật - HCMUS 2011

32

Vấn đề khác

thống kê tần số vào trong tập tin nén hay không?

Trang 33

Cấu trúc dữ liệu và giải thuật - HCMUS 2011

33

Vấn đề khác

 Thống kê sẵn trên dữ liệu lớn và tính toán sẵn cây

Huffman cho bộ mã hóa và bộ giải mã.

 Ưu điểm:

 Giảm thiểu kích thước của tập tin cần nén.

 Giảm thiểu chi phí của việc duyệt tập tin để lập bảng thống kê

 Khuyết điểm:

 Hiệu quả không cao trong trường hợp khác dạng dữ liệu đã thống kê

Trang 34

Cấu trúc dữ liệu và giải thuật - HCMUS 2011

Hỏi và Đáp

34

Trang 35

Cấu trúc dữ liệu và giải thuật - HCMUS 2011

Nén Run-Length Encoding

Nén Huffman động

Đọc thêm

Trang 36

Cấu trúc dữ liệu và giải thuật - HCMUS 2011

Nén Run-Length Encoding

36

Trang 37

Cấu trúc dữ liệu và giải thuật - HCMUS 2011

Trang 38

Cấu trúc dữ liệu và giải thuật - HCMUS 2011

38

Khái niệm

 Đường chạy (run)

 Dãy các ký tự giống nhau liên tiếp

Trang 39

Cấu trúc dữ liệu và giải thuật - HCMUS 2011

39

Ý tưởng

chiều dài của đường chạy.

 Đường chạy được biểu diễn lại:

<Số lượng ký tự> <Ký tự>

 Ví dụ:

 Chuỗi đầu vào: AAA bbbbbC ddd E bbbb (#17 bytes)

 Kết quả nén: 3A 5b1C 3d 1E 4b (#12 bytes)

Trang 40

Cấu trúc dữ liệu và giải thuật - HCMUS 2011

40

Ý tưởng

Trong thực tế, có khả năng gây ‘hiệu ứng

ngược’:

 Dữ liệu nén: ABCDEFGH (8 bytes)

 Kết quả nén: 1A1B1C1D1E1F1G1H (16 bytes)

Trang 41

Cấu trúc dữ liệu và giải thuật - HCMUS 2011

41

Nén RLE trên PCX

 Byte xác định số lượng (nhiều hơn 1): 2 bit 6,7 được bật.

Trang 42

Cấu trúc dữ liệu và giải thuật - HCMUS 2011

42

Nén RLE trên PCX

 Byte xác định số lượng : 2 bit 6,7 được bật.

Số lần lặp (số lượng) tối đa: 63

Giá trị dữ liệu tối đa: 191 (0-191)

 Số lần lặp là 1?

 Dữ liệu có giá trị dưới 192?

 Dữ liệu có giá trị từ 192?

Trang 43

Cấu trúc dữ liệu và giải thuật - HCMUS 2011

 Ảnh hưởng (nhầm lẫn với thông tin số lượng).

 Sử dụng 2 byte: <Số lượng = 1> <Dữ liệu>

Ví dụ: nén ký tự 0xDB (21910)

Trang 44

Cấu trúc dữ liệu và giải thuật - HCMUS 2011

44

Nén RLE trên PCX - Nhận xét

 Ưu điểm:

 Cài đặt đơn giản

 Giảm các trường hợp “hiệu ứng ngược” của những đường chạy đặc biệt

 Khuyết điểm:

 Dùng 6 bit biểu diễn số lần lặp chỉ thể hiện được chiều dài tối

đa 63.

 Các đoạn lặp dài sẽ phải lưu trữ lặp lại

 Không giải quyết được trường hợp “hiệu ứng ngược” với đường chạy đặc biệt có mã ASCII >= 192

Trang 45

Cấu trúc dữ liệu và giải thuật - HCMUS 2011

unsigned char cThis, cLast;

int nTotal = 0; // Tổng số byte sau khi mã hoáint nRunCount = 1; // Chiều dài của 1 run

}}

Trang 46

Cấu trúc dữ liệu và giải thuật - HCMUS 2011

46

Nén RLE trên PCX - Cài đặt

else // Hết 1 run, chuyển sang run kế tiếp {

if (nRunCount) nTotal +=

PCXEncode_a_Run(cLast,nRunCount,fEncode);

cLast = cThis;

nRunCount = 1;

} } // end for

if (nRunCount) // Ghi run cuối cùng lên file nTotal += PCXEncode_a_Run(cLast, nRunCount, fEncode); return (nTotal);

}

Trang 47

Cấu trúc dữ liệu và giải thuật - HCMUS 2011

47

Nén RLE trên PCX - Cài đặt

int PCXEncode_a_Run(unsigned char c, int nRunCount, FILE

Trang 48

Cấu trúc dữ liệu và giải thuật - HCMUS 2011

Trang 49

Cấu trúc dữ liệu và giải thuật - HCMUS 2011

Trang 50

Cấu trúc dữ liệu và giải thuật - HCMUS 2011

Trang 51

Cấu trúc dữ liệu và giải thuật - HCMUS 2011

Trang 52

Cấu trúc dữ liệu và giải thuật - HCMUS 2011

0x00 0x02 <DeltaX> <DeltaY>: đoạn nhảy (DeltaX,

DeltaY) tính từ vị trí hiện tại Dữ liệu kế tiếp được áp dụng tại vị trí mới.

Trang 53

Cấu trúc dữ liệu và giải thuật - HCMUS 2011

53

Nén RLE trên BMP – Tóm tắt

Trang 54

Cấu trúc dữ liệu và giải thuật - HCMUS 2011

Trang 55

Cấu trúc dữ liệu và giải thuật - HCMUS 2011

55

Nén RLE trên BMP – Ví dụ

Trang 56

Cấu trúc dữ liệu và giải thuật - HCMUS 2011

56

So sánh

So sánh giữa RLE trên PCX và trên BMP?

Trang 57

Cấu trúc dữ liệu và giải thuật - HCMUS 2011

Trang 58

Cấu trúc dữ liệu và giải thuật - HCMUS 2011

Nén Huffman động

58

Trang 59

Cấu trúc dữ liệu và giải thuật - HCMUS 2011

59

Điểm hạn chế của nén Huffman tĩnh

 Duyệt tập tin hai lần (thống kê và mã hóa) -> tốn chi phí.

 Phải lưu trữ cây Huffman/bảng tần số trong dữ liệu nén -> tăng kích thước dữ liệu nén.

nén đã có sẵn đầy đủ.

Trang 60

Cấu trúc dữ liệu và giải thuật - HCMUS 2011

60

Ý tưởng cải tiến

cây Huffman và nén dữ liệu

=> nén dữ liệu ĐỘNG.

Trang 61

Cấu trúc dữ liệu và giải thuật - HCMUS 2011

61

Phân tích

 Có thể tiến hành nén dữ liệu theo thời gian thực.

 Không cần lưu trữ thông tin cây Huffman.

 Chỉ cần việc đọc dữ liệu một lần.

Trang 62

Cấu trúc dữ liệu và giải thuật - HCMUS 2011

 Node trong: tổng trọng số của các node con.

 Ký tự chưa từng xuất hiện nằm chung một node có trọng số 0.

 Node gốc (root):

 Node có trọng số lớn nhất cây Huffman.

Trang 63

Cấu trúc dữ liệu và giải thuật - HCMUS 2011

 Khởi tạo cây:

 Cây gồm duy nhất một node gán giá trị NYA và có trọng số là 0.

Trang 64

Cấu trúc dữ liệu và giải thuật - HCMUS 2011

Trang 65

Cấu trúc dữ liệu và giải thuật - HCMUS 2011

65

Tính chất cây Huffman động

Cây Huffman n node lá có tổng cộng (2*n – 1)

node

 Mỗi node trên cây có trọng số thỏa mãn tính chất quy ước.

Trang 66

Cấu trúc dữ liệu và giải thuật - HCMUS 2011

Trang 67

Cấu trúc dữ liệu và giải thuật - HCMUS 2011

Trang 68

Cấu trúc dữ liệu và giải thuật - HCMUS 2011

Phát sinh mã bit cho c:

Mã bit c = mã bit của node NYA và mã ASCII (8 bit) của c

Trang 69

Cấu trúc dữ liệu và giải thuật - HCMUS 2011

Trang 70

Cấu trúc dữ liệu và giải thuật - HCMUS 2011

Trang 71

Cấu trúc dữ liệu và giải thuật - HCMUS 2011

Trang 72

Cấu trúc dữ liệu và giải thuật - HCMUS 2011

Trang 73

Cấu trúc dữ liệu và giải thuật - HCMUS 2011

Trang 74

Cấu trúc dữ liệu và giải thuật - HCMUS 2011

Trang 75

Cấu trúc dữ liệu và giải thuật - HCMUS 2011

Trang 76

Cấu trúc dữ liệu và giải thuật - HCMUS 2011

76

Thuật toán nén

Gọi x là node hiện hành.

 Duyệt từ trái sang phải, từ dưới lên trên:

Nếu tồn tại node y sao cho trọng số của y nhỏ hơn trọng số của x

Thì x là node vi phạm tính chất Anh/em.

Trang 77

Cấu trúc dữ liệu và giải thuật - HCMUS 2011

77

Thuật toán nén

 Hiệu chỉnh cây khi node vi phạm tính chất

Anh/em:

Gọi x là node vi phạm tính chất Anh/em.

 Duyệt từ trái sang phải, từ dưới lên trên:

Tìm node y ở xa x nhất có trọng số nhỏ hơn trọng số của x.

Đổi chỗ x và y.

 Cập nhật giá trị các node cha tương ứng.

 Lặp lại cho đến khi không còn node nào vi phạm.

Trang 78

Cấu trúc dữ liệu và giải thuật - HCMUS 2011

Trang 79

Cấu trúc dữ liệu và giải thuật - HCMUS 2011

Trang 80

Cấu trúc dữ liệu và giải thuật - HCMUS 2011

Trang 81

Cấu trúc dữ liệu và giải thuật - HCMUS 2011

Trang 82

Cấu trúc dữ liệu và giải thuật - HCMUS 2011

Trang 83

Cấu trúc dữ liệu và giải thuật - HCMUS 2011

Trang 84

Cấu trúc dữ liệu và giải thuật - HCMUS 2011

Trang 85

Cấu trúc dữ liệu và giải thuật - HCMUS 2011

Trang 86

Cấu trúc dữ liệu và giải thuật - HCMUS 2011

86

Thuật toán giải nén

 B1: Khởi tạo cây Huffman ban đầu (gồm 1 node NYA).

 B2: Giải nén dữ liệu dựa trên cây Huffman và dữ liệu nhận được (bit 0: nhánh trái, bit 1: nhánh phải).

Nếu nhận được dữ liệu NYA.

 Nếu không:

B3: Thêm ký tự c vào cây Huffman Cập nhật cây.

 B4: Quay lại từ bước 2.

Trang 87

Cấu trúc dữ liệu và giải thuật - HCMUS 2011

87

Tóm tắt

 Giải thuật nén Huffman là giải thuận nén dạng không mất mát thông tin.

 Các ký tự được nén và giải nén dựa trên mã bit.

 Chiều dài các mã bit là không giống nhau.

 Có thể áp dụng thuật toán này cho các loại dữ liệu khác nhau: tập tin văn bản, nhị phân,

Trang 88

Cấu trúc dữ liệu và giải thuật - HCMUS 2011

 Xây dựng cây Huffman theo thời gian thực.

 Không cần biết trước toàn bộ nội dung dữ liệu cần nén.

Ngày đăng: 25/03/2023, 08:39

TỪ KHÓA LIÊN QUAN

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN