1. Trang chủ
  2. » Công Nghệ Thông Tin

Topic 9 adaptive huffma

79 548 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

Định dạng
Số trang 79
Dung lượng 4,76 MB

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

Nội dung

Adaptive Huffman - Thuật toán tổng quát:Cập nhật kí tự c vào cây Cây Huffman Dữ liệu nén Đọc kí tự c Mã hóa nén kí tự c... o Khi sắp xếp các node trong cây theo thứ tự tăng dần của tr

Trang 1

ADAPTIVE HUFFMAN

David A Huffman (9/8/1925 – 7/10/1999)

Trang 2

Topic 9: Adaptive Huffman

Trang 3

 Thuật toán nén (Encoding)

 Thuật toán giải nén (Decoding)

 Demo minh họa.

Trang 4

Adaptive Huffman - Giới thiệu:

Trang 5

Adaptive Huffman - Giới thiệu (tt):

 Hạn chế của thuật toán Huffman tĩnh.

 Trong quá trình nén cần đến 2 lần duyệt File

Chi phí nén cao

 Cần phải lưu trữ thông tin để giải nén

→ Làm tăng kích thước dữ liệu nén.

 Dữ liệu nén cần phải có sẵn

→ Không nén được dữ liệu phát sinh theo thời

gian thực

Trang 6

Adaptive Huffman - Giới thiệu (tt):

 Ý tưởng:

 Thuật toán này vẫn dựa trên ý tưởng của Huffman là sử dụng một vài bit (bit code) để biểu diễn một kí tự

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

o Kí tự xuất hiện nhiều lần→biểu diễn bằng mã ngắn.

o Kí tự xuất hiện ít → biểu diễn bằng mã dài.

 Tạo sẵn một cây “tối thiểu” ban đầu, dữ liệu nén sẽ

được cập nhật dần vào cây

Trang 7

 Năm 1987 Vitter trình bày các cải tiến liên quan tới việc tối ưu cây Huffman.

Trang 8

Giới thiệu (tt):

 Ưu điểm:

 Không cần tính trước số lần xuất hiện của các kí tự

 Quá trình nén chỉ cần một lần duyệt file

 Không cần lưu thông tin phục vụ cho việc giải nén

 Nén “online” trên dữ liệu phát sinh theo thời gian thực

Trang 9

 Thuật toán nén (Encoding)

 Thuật toán giải nén (Decoding)

Trang 10

Adaptive Huffman - Thuật toán tổng

o Nén “online” → không có trước bản thống kê.

o Phương pháp: khởi tạo cây “tối thiểu” ban đầu, cây

sẽ được cập nhật dần dần dựa trên dữ liệu phát sinh trong quá trình nén hoặc giải nén

Trang 11

Adaptive Huffman - Thuật toán tổng quát:

Dữ liệu phát sinh

Cây Huffman

Dữ liệu nén/giải nén

Khởi tạo cây

Trang 12

Adaptive Huffman - Thuật toán tổng quát:

Cập nhật

kí tự c vào cây

Cây Huffman

Dữ liệu nén

Đọc kí tự c

Mã hóa (nén kí tự c)

Trang 13

Adaptive Huffman - Thuật toán tổng quát:

Cây Huffman

Dữ liệu giải nén c

Trang 15

Adaptive Huffman - Cây Huffman (động):

 Một cây nhị phân có n node lá được gọi là cây

Huffman nếu thỏa:

 Các node lá có trọng số wi  0, i  [1,n]

 Các node nhánh có trọng số bằng tổng trọng số của các node con của nó.

 Tính chất Anh/ em (Sibling Property):

o Mỗi node, ngoại trừ node gốc đều tồn tại một node Anh/ em (có cùng node cha).

o Khi sắp xếp các node trong cây theo thứ tự tăng

dần của trọng số thì mỗi node luôn kề với node anh

em của nó.

Trang 16

Adaptive Huffman - Cây Huffman (động):

 Ví dụ:

W=3

#5

D W=2

#4

C W=2

#3

B W=2

#8

Root W=17

#9

Trang 17

Adaptive Huffman - Cây Huffman (động):

 Cách thức tạo cây:

b1: Khởi tạo cây “tối thiểu”, chỉ có node Escape (node 0)

b2: Cập nhật từng kí tự vào trong cây theo qui tắc:

 Nếu kí tự chưa có trong cây  thêm mới node lá

 Nếu kí tự đã có trong cây  tăng trọng số node lên 1

 Cập nhật trọng số của các node liên quan trong cây

Escap e

W = 0

Trang 18

Adaptive Huffman - Cây Huffman (động):

 Thuật toán cập nhật trọng số:

 Tăng trọng số của node lá lên 1

 Đi từ node lá đến node gốc tăng trọng số của

các node lên 1 Kiểm tra tính chất anh em và hiệu chỉnh lại cây nếu có vi phạm

Trang 19

Adaptive Huffman - Cây Huffman (động):

W=1 1

#9

B W=1 1

#7

W=2 5

#10

W=1 4

#8

L W=5

#4

W=9

#6

D W=4

#3

W=5

#5

T W=3

#2

C W=2

#1

W=1 5

#8

W=6

#5

W=2 6

#10

Trang 20

Adaptive Huffman - Cây Huffman (động):

 Khi thêm một node mới hoặc tăng trọng số:

 Vi phạm tính chất anh em

 Tràn số

Trang 21

Adaptive Huffman - Cây Huffman (động):

Vi phạm tính chất anh em:

B W=1 7

#8

W=2 9

#9

W=1 2

#7

L W=3

#4

W=6

#6

D W=3

#3

W=6

#5

T W=3

#2

C W=3

#1

Tăng trọng số (1) D

W=4

#1

Trang 22

Adaptive Huffman - Cây Huffman (động):

Hiệu chỉnh cây để thỏa

tính chất anh em:

B W=1 7

#8

W=2 9

#10

W=1 2

#8

L W=3

#4

W=6

#6

D W=3

#3

W=6

#5

T W=3

#2

C W=4

#7

W=3 0

#9

Trang 23

Adaptive Huffman - Cây Huffman (động):

 Thuật toán xác định node vi phạm:

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

 So sánh x với các node tiếp theo sau (theo thứ tự từ trái sang phải, từ dưới lên trên).

 Nếu tồn tại y sao cho y.Weight < x.Weight thì x là node vi phạm.

 Thuật toán hiệu chỉnh cây thỏa tính chất anh em:

 Gọi x là node vi phạm.

 Tìm node y xa nhất, có trọng số cao nhất thỏa

y.Weight < x.Weight

 Hoán đổi x và node y trên cây.

 Cập nhật lại các node cha tương ứng.

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

Trang 24

Adaptive Huffman - Cây Huffman (động):

 Vấn đề tràn số:

 Quá trình cập nhật cây → làm tăng trọng số các node

 Trọng số node gốc tăng nhanh → có thể vượt quá khả năng lưu trữ của kiểu dữ liệu

o Kiểu int → giá trị max = 215- 1

o Kiểu unsigned int → giá trị max = 216 – 1

o Kiểu long → giá trị max = 231 - 1

Trang 25

Adaptive Huffman - Cây Huffman (động):

 Ví dụ về tràn số:

Node gốc đang có giá trị

trọng số tối đa mà kiểu dữ

liệu có thể biểu diễn

#4

W=65

#6

D W=30

#3

W=55

#5

T W=30

#2

C W=25

#1

B W=135

#8 W=255

#9

Trang 26

Adaptive Huffman - Cây Huffman (động):

 Thuật toán xử lí tràn số:

Khi cập nhật trọng số, kiểm ta trọng số node gốc

Nếu trọng số node gốc > MAX_VALUE:

o Giảm trọng số các node lá trong cây (chia cho 2)

o Cập nhật lai trọng số cac node nhánh

o Kiểm tra tính chất anh em và hiệu chỉnh lại cây

(Do phép chia cho 2 làm mất phần dư của số nguyên)

Trang 27

Adaptive Huffman - Cây Huffman (động):

 Xử lí tràn số: (tt)

W=120

#7

L W=35

#4

W=65

#6

D W=30

#3

W=55

#5

T W=30

#2

C W=25

#1

B W=135

W=59

Trang 28

 Thuật toán giải nén (Decoding)

 Demo minh họa.

Trang 29

Adaptive Huffman

 Thuật toán nén:

initialize_model();

while(c != EOF) {

c = getchar(inputfile); encode(c, outputfile); update_model(c);

}

Trang 30

Adaptive Huffman

 Thuật toán mã hóa kí tự c:

encode (c, outputfile)

 Nếu c chưa có trong cây

o Duyệt cây T tìm mã bit của Escape ghi lên outputfile.

o Ghi tiếp 8 bit mã ASCII của c lên outputfile.

o Thêm node c vào cây và cập nhật lại cây.

 Nếu c đã có trong cây:

o Duyệt cây T tìm mã bit của c và ghi lên outputfile

o Tăng trọng số của node c lên 1 và cập nhật lại cây

Trang 31

 Thuật toán nén (Encoding)

 Demo minh họa.

Trang 33

Adaptive Huffman

 Thuật toán giải mã kí tự c:

decode(inputfile)

b = getchar(inputfile);

 Bắt đầu từ vị trí hiện tại trên inputfile.

 Lấy từng bit của b, duyệt trên cây (b==0: trái, b==1: phải).

o Nếu đi đến node lá x, return x.char

o Nếu đi đến node Escape:

• c = lấy 8 bit tiếp theo từ inputfile

• Thêm c vào cây, cập nhật lại cây.

• return c

Trang 34

DEMO MINH HỌA

Trang 35

Adaptive Huffman – Ví dụ

Giả sử có dữ liệu như sau:

f = “abacbdc”

Trang 36

Adaptive Huffman – Ví dụ (tt)

B1: Khởi tạo cây và đưa kí tự “a” vào cây:

a

a W=1 E

Trang 37

Adaptive Huffman – Ví dụ (tt)

B2: Thêm kí tự “b” vào trong cây

“b” chưa có trong cây

Ta thêm “b” vào thành node lá

trên cây

input = 01100001

a W=1 E

Trang 38

Adaptive Huffman – Ví dụ (tt)

b

a W=1 E

W=1 #3

#2

#1

b W=1

#3

W = 1

Trang 39

Adaptive Huffman – Ví dụ (tt)

a W=1 W=1

b W=1

Trang 40

b W=1

Trang 41

Adaptive Huffman – Ví dụ (tt)

a

B3: thêm kí tự “a” vào cây

“a” đã tồn tại trong cây Tăng trọng số của node a thêm 1

Cập nhật lại trọng số của

các node liên quan

a W=1 W=2

b W=1

Trang 42

Adaptive Huffman – Ví dụ (tt)

B4: thêm kí tự “c” vào cây

“c” chưa có trong cây

Ta thêm “c” vào thành node lá

W=2 W=3

b W=1

Trang 44

Adaptive Huffman – Ví dụ (tt)

a W=2

#3 W=1

c W=1 E

Trang 45

W=1

c W=1 E

#3

W = 2

W = 4

Trang 46

Adaptive Huffman – Ví dụ (tt)

b

B5: thêm kí tự “b” vào cây

“b” đã tồn tại trong cây Tăng trọng số của node b thêm 1

Cập nhật lại trọng số của

các node liên quan

a W=2

#5

W=1

c W=1 E

Trang 47

c W=1 E

#3

W=5

Trang 48

Adaptive Huffman – Ví dụ (tt)

B6: thêm kí tự “d” vào cây

“d” chưa có trong cây

Ta thêm “d” vào thành node lá

b W=2

#4

#5

W=1

c W=1 E

#3

input = 01100001001100010 1 00 01100010 01

10

0

Trang 49

Adaptive Huffman – Ví dụ (tt)

d

d W=1

b W=2

#4

#5

c W=1

Trang 50

Adaptive Huffman – Ví dụ (tt)

W=1

d W=1 E

b W=2 #4

#5

c W=1

Trang 51

Adaptive Huffman – Ví dụ (tt)

W=1

d W=1 E

b W=2 #6

#7

c W=1

W=2

Trang 52

Adaptive Huffman – Ví dụ (tt)

W=1

d W=1 E

b W=2 #6

#7

W=2

#4

#5

B7: thêm kí tự “c” vào cây

“c” đã tồn tại trong cây Tăng trọng số của node c thêm 1

c

c W=1 W=2

101

Trang 53

Adaptive Huffman – Ví dụ (tt)

W=1

d W=1 E

b W=2 #6

Vi phạm tính chất anh em

Ta phải xoay lại cây

Cập nhật lại trọng số của các node

liên quan và hiệu chỉnh lại cây

W=3

Trang 54

b W=2 #6

#7

#5

W=1

d W=1 E

#3

W=3

#4 c

W=2

Trang 55

Vi phạm tính chất anh em

Ta hiệu chỉnh lại cây

Trang 56

#7

#5 W=1

d W=1 E

#3

W=3

#4 W=2 c

kiểm tra trọng số của các

node liên quan

input =

Trang 57

Adaptive Huffman

Giải nén

Trang 58

Adaptive Huffman – Ví dụ (tt)

B1: Đọc 8 bit đầu tiên từ file input

a

a W=1 E

Trang 59

Adaptive Huffman – Ví dụ (tt)

B2: Đọc bit tiếp theo, duyệt cây

Cập nhật kí tự ‘b’ vào trong cây

Di chuyển đầu đọc đến vị trí tiếp theo

a W=1 E

Trang 60

Adaptive Huffman – Ví dụ (tt)

b

a W=1 E

W=1 #3

#2

#1

b W=1

#3

W = 1

Trang 61

Adaptive Huffman – Ví dụ (tt)

a W=1 W=1

b W=1

Trang 62

b W=1

Trang 63

Adaptive Huffman – Ví dụ (tt)

B3:Đọc bit tiếp theo và duyệt cây

Tăng trọng số của node a thêm 1

b W=1

Trang 64

Adaptive Huffman – Ví dụ (tt)

B4: Đọc bit tiếp theo và duyệt cây

Ta thêm “c” vào thành node lá

trên cây

Di chuyển đầu đọc đến

vị trí tiếp theo

a W=2 W=3

b W=1

Trang 66

Adaptive Huffman – Ví dụ (tt)

a W=2

#3 W=1

c W=1 E

Trang 67

W=1

c W=1 E

#3

W = 2

W = 4

Trang 68

Adaptive Huffman – Ví dụ (tt)

B5: Đọc bit tiếp theo và duyệt cây

Tăng trọng số của node b thêm 1 Cập nhật lại trọng số của

các node liên quan

Di chuyển đầu đọc đến

vị trí tiếp theo

a W=2

#5

W=1

c W=1 E

Trang 69

c W=1 E

#3

W=5

Trang 70

Adaptive Huffman – Ví dụ (tt)

B6: Đọc bit tiếp theo và duyệt cây

Ta thêm “d” vào thành node lá

b W=2

#4

#5

W=1

c W=1 E

#3

10

Trang 71

Adaptive Huffman – Ví dụ (tt)

d

d W=1

b W=2

#4

#5

c W=1

Trang 72

Adaptive Huffman – Ví dụ (tt)

W=1

d W=1 E

b W=2 #4

#5

c W=1

Trang 73

Adaptive Huffman – Ví dụ (tt)

W=1

d W=1 E

b W=2 #6

#7

c W=1

W=2

Trang 74

Adaptive Huffman – Ví dụ (tt)

W=1

d W=1 E

b W=2 #6

#7

W=2

#4

#5

B7: Đọc bit tiếp theo và duyệt cây

Tăng trọng số của node c thêm 1

c W=1 W=2

fseek

output = abacbdc

Trang 75

Adaptive Huffman – Ví dụ (tt)

W=1

d W=1 E

b W=2 #6

Vi phạm tính chất anh em

Ta phải xoay lại cây

Cập nhật lại trọng số của các node

liên quan và hiệu chỉnh lại cây

W=3

Trang 76

b W=2 #6

#7

#5

W=1

d W=1 E

#3

W=3

#4 c

W=2

Trang 77

Vi phạm tính chất anh em

Ta hiệu chỉnh lại cây

Trang 78

#7

#5 W=1

d W=1 E

#3

W=3

#4 W=2 c

kiểm tra trọng số của các

node liên quan

output = abacbdc

Trang 79

Adaptive Huffman

Huffman !!!

Ngày đăng: 03/12/2015, 17:10

TỪ KHÓA LIÊN QUAN

w