Tải bản đầy đủ (.pdf) (21 trang)

Thuật toán mã hoá nguồn huffman nguyên tắc xây dựng cây mã hufman

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (890.91 KB, 21 trang )

Nhóm 5:
Thuật tốn mã hố
nguồn Huffman
Thành viên nhóm:
Nguyễn Duy Tin (102210380)
Nguyễn Văn Dũng (102210356)
Lê Tuấn Nguyên Khôi (102210359)


Nguyên tắc xây dựng cây mã Hufman
● Huffman đã đưa ra nguyên tắc để xây dựng hệ thống tối ưu như sau: để một mã
prefix có độ dài tối thiểu điều kiện cần và đủ là thỏa mãn 3 tính chất sau:
● Tính chất 1: Tính thứ tự độ dài các mã: Nếu sắp xếp các tin theo thứ tự giảm dần
của xác suất p()≥p() với i < j thì độ dài của các từ mã tương ứng phải thỏa điều kiện
ni≤nj.
● Tính chất 2: Tính chất của những từ mã cuối: với thõa mãn điều kiện 2 ≤ ≤ m
(m là cơ số mã) thì từ mã cuối ln có độ dài n bằng nhau, về trọng số chỉ khác nhau
ký hiệu bên phải
= .. = =


Tính chất 3: Tính liên hệ từ mã cuối và từ mà trước cuối: Một dãy gồm hiệu phải là
một từ mã là prefix của từ mã thứ N là từ mã cuối cùng của bộ mã


Đánh giá độ tối ưu của thuật toán Huffman
● Với phép mã hóa tối ưu ta có: = H(A)
● Nguồn rời rạc A = , i =

● H(A) =
Þ So sánh H(A)


Nhận xét: phép mã hóa trên là gần tối ưu.


Các bước xây dựng thuật toán Huffman
Đề bài Một văn bản được viết từ các kí từ … , biết tần số xuất hiện của các ký tự trong
văn bản lần lượt là 1200, 2400, 1200, 3200, 1500, 500 ( lần ). Hãy thực hiện mã hố
Huffman cho văn bản
Kí tự
Tần số

1200

2400

1200

3200

1500

500

Tần suất

0.12

0.24

0.12


0.32

0.15

0.05

Bước 1: Sắp xếp nguồn X theo xác suất giảm dần
Kí tự
Tần số

3200

2400

1500

1200

1200

500

Tần suất

0.32

0.24

0.15


0.12

0.12

0.05


Các bước xây dựng thuật toán Huffman
Bước 2: Tạo danh sách chứa các nút lá bao gồm phần tử đầu vào và trọng số nút là
tần suất xuất hiện của nó theo xác suất trong bảng đã sắp xếp

𝐱𝟒 𝐱𝟐 𝐱𝟓 𝐱𝟏 𝐱𝟑 𝐱𝟔
0.32

0.24

0,15

0.12

0,12

0,05


Các bước xây dựng thuật toán Huffman
Bước 3: Từ danh sách này, lấy ra 2 phần tử có tần suất xuất hiện ít nhất. Sau đó gắn 2 nút vừa
lấy ra vào một nút gốc mới với trọng số là tổng của 2 trọng số ở nút vừa lấy ra để tạo thành một
cây.


𝐱𝟒 𝐱𝟐 𝐱𝟓 𝐱𝟏 𝐱𝟑 𝐱𝟔
0.32

0.24

0,15

0.12

0,12

0,05

𝐱𝟑−𝟔
0,17


Các bước xây dựng thuật toán Huffman
Bước 4: Đẩy cây mới vào lại danh sách.

𝐱𝟒

𝐱𝟐

0.32

0.24

𝐱𝟑−𝟔


𝐱𝟓

𝐱𝟏

0,15

0.12

0,17

𝐱𝟑 𝐱𝟔
0,12

0,05

Bước 5: Lặp lại bước 3 và 4 cho đến khi danh sách chỉ còn 1 nút gốc duy nhất của cây.


Các bước xây dựng thuật toán Huffman
Lần lập 1:

𝐱𝟒

𝐱𝟏−𝟓

𝐱𝟐

𝐱𝟑−𝟔

0.32


0.27

0.24

0,17

𝐱𝟓 𝐱𝟏
0,15

0.12

𝐱𝟑 𝐱𝟔
0,12

0,05


Các bước xây dựng thuật toán Huffman
Lần lập 2:

𝐱𝟐−𝟑−𝟔
0.41

𝐱𝟐

𝐱𝟑−𝟔

0.24


0,17

𝐱𝟒

𝐱𝟏−𝟓

0.32

0.27

𝐱𝟓 𝐱𝟏
0,15

𝐱𝟑 𝐱𝟔
0,12

0,05

0.12


Các bước xây dựng thuật toán Huffman
Lần lập 3:

𝐱𝟐−𝟑−𝟔

𝐱𝟒−𝟏−𝟓

0.41


0.59

𝐱𝟐

𝐱𝟑−𝟔

𝐱𝟒

𝐱𝟏−𝟓

0.24

0,17

0.32

0.27

𝐱𝟑 𝐱𝟔
0,12

0,05

𝐱𝟓 𝐱𝟏
0,15

0.12


Các bước xây dựng thuật toán Huffman

Lần lập 4:

𝐱𝒓𝒐𝒐𝒇
1

𝐱𝟐
0.24

𝐱𝟐−𝟑−𝟔

𝐱𝟒−𝟏−𝟓

0.41

0.59

𝐱𝟑−𝟔

𝐱𝟒

0,17

𝐱𝟏−𝟓
0.27

0.32

𝐱𝟑

𝐱𝟔


𝐱𝟓

𝐱𝟏

0,12

0,05

0,15

0.12


Các bước xây dựng thuật toán Huffman
Bước 6: Xuất phát từ nút góc đánh số tập tin 0,1 cho các nhánh ( 0 cho nhánh
bên trái, 1 cho nhánh bên phải ). Quá trình sẽ được dùng lại khi tất cả các nhánh
đều đã được gán mã

𝐱𝒓𝒐𝒐𝒇

0

1

1

𝐱𝟒−𝟏−𝟓

𝐱𝟐−𝟑−𝟔

0

𝐱𝟐
0.24

0.41

1

0

𝐱𝟑−𝟔
0,17

0

0.59

𝐱𝟒
0.32

1

1

𝐱𝟏−𝟓
0

0.27


1

𝐱𝟑

𝐱𝟔

𝐱𝟓

𝐱𝟏

0,12

0,05

0,15

0.12


Các bước xây dựng thuật toán Huffman
Bước 7: Đánh mã cho các nút lá, loại tất cả các nút phụ ta thu được tập tin cần
tìm

𝐱𝒓𝒐𝒐𝒇

0

1

1


𝐱𝟒−𝟏−𝟓

𝐱𝟐−𝟑−𝟔
0
00

0.41

1

0

𝐱𝟑−𝟔

𝐱𝟐

0,17

0.24

0
010

10

𝐱𝟒
0.32

1


𝐱𝟑

𝐱𝟔

0,12

0,05

011

0.59

110

1

𝐱𝟏−𝟓
0

0.27

1

𝐱𝟓

𝐱𝟏

0,15


0.12

111


Các bước xây dựng thuật toán Huffman
Bước 7: Đánh mã cho các nút lá, loại tất cả các nút phụ ta thu được tập tin cần
tìm

𝐱𝟐 𝐱𝟒 𝐱𝟑 𝐱𝟔 𝐱𝟓 𝐱𝟏
00

10

010

011

110

111


Ứng dụng mã hoá Huffman để nén file
Các bước thực hiện nén:
• Đọc file và xác định các ký tự xuất
hiện trong file & tần suất của
chúng
• Dựng cây mã Huffman
• Dựa vào cây mã thu được mã hóa

từng ký tự và ghi vào file nén
• Lưu cây mã vào cuối file nén
Các bước thực hiện giải nén:
• Dựa vào cây mã đã được lưu vào
cuối file nén ta xây dựng lại cây
mã Huffman
• Dựa vào cây mã Huffman ta thu
được mã hố của từng ký tự
• Sau đó dựa vào file đã nén tiền
hành mã hoá ngược lại từng kí tự

H

M

U

F

A

N

00

10

010

011


110

111

00-010-011-011-10-110-111
H

U

F

F

M

A

N


Ví dụ minh hoạ
Ví dụ : Một file có 500 kí tự tương ứng với 5 kí tự khác nhau là S, V, D, U, T. Mỗi
kí tự sẽ có xác suất xuất hiện lần lượt là S: 0.5, V: 0.2, D: 0.15, U: 0.1, T: 0.05 .
Dùng giải thuật mã hóa Huffman, tính độ lớn của file sau khi mã hóa.
● Đối với cách mã hóa thơng thường, để mã hóa 500 kí tự cần tới 1500 bit để
mã hóa vì để biểu diễn mỗi kí tự cần 3 bit.
●Với cách mã hóa Huffman ta sẽ gán các chuỗi bit ngắn nhất cho các kí tự có
xác suất xuất hiện cao nhất.
Ta gán:

S: 1
V: 01
D: 001
U: 0000
T: 0001

→Số bit cần để biểu diễn file là :
500*( 1*0.5 + 2*0.2 + 3*0.15 + 4*0.1 + 4*0.05) = 975 bit
→975 bit < 1000 bit (so với cách thông thường)


Bài tập 1 Cho bảng phân phối xác suất các tín hiệu rời rạc như sau:
x

A

B

C

D

E

f(x)

0.2

0.5


0.1

0.05

0.15

a) Xây dựng bộ mã Huffman
b) Giải mã đoạn mã nhị phân sau: 10111110110111010100
c) Tính hiệu suất bộ mã


Bài tập 1: Cho bảng phân phối xác suất các tín hiệu rời rạc như sau:
a) Xây dựng bộ mã Huffman

𝐱𝒓𝒐𝒐𝒇

0
0

𝐱𝑩

𝐱 𝑨−𝑬−𝑪−𝑫

0

0.5

0
100


1

𝐱 𝑬−𝑪−𝑫

𝐱𝑬

0.3

0.5

1

𝐱𝑨

1

𝐱𝑪 −𝑫

0

0.15

11

0.2

1

0.15


1010

𝐱𝑪
0.1

𝐱𝑫
0.05

1011

x

A

B

C

D

E

f(x)

0.2

0.5

0.1


0.05

0.15


Bài tập 1 Cho bảng phân phối xác suất các tín hiệu rời rạc như sau:
b) Giải mã đoạn mã sau: 10111110110111010100
Từ bảng Huffman trên ta có:
A: 11
B: 0
→ 1011 11 1011 0 11 1010 100
C: 1010
D
A D B A C
E
D: 1011 →DADBACE
E: 100

x

A

B

C

D

E


f(x)

0.2

0.5

0.1

0.05

0.15

c) Tính hiệu suất bộ mã
●Entropy

= -0.2* -0.5* -0.15* -0.1* -0.05* =
●Độ dài trung bình của từ mã:
●Hiệu suất bộ mã:

/ H(x) =

= 2*0.2 + 1*0.5 + 4*0.1 + 4*0.05 + 3*0.15 =


Bài tập 2: Cho các mã sau, mã nào là mã Huffman:
a) 010, 00, 011, 10, 111
b) 000, 001, 010, 011, 11, 10
a)

b)


0

0

1
0

1

0

1
0

1

0

1

0

1

● Bị dư 110 → Không phải mã Huffman

0

0


1
10

1

1

● Đầy đủ các từ mã → Mã Huffman


THANKS
!



×