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

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 - Bùi Tiến Lên

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 (814.89 KB, 76 trang )

CÁC THUẬT TOÁN NÉN DỮ LIỆU

CuuDuongThanCong.com

Bùi Tiến Lên
01/01/2017

/>

Giới thiệu
Mục đích của nén dữ liệu:
Giảm kích thước dữ liệu
Tăng tính bảo mật

CuuDuongThanCong.com
Spring 2017

/>Data structure & Algorithm

2


Giới thiệu (cont.)
Có hai dạng thuật nén
Nén bảo toàn thông tin (lossless compression)
Thuật toán nén RLE
Thuật toán nén LZW
Thuật toán nén Huffman
Nén không bảo toàn thông tin (lossy compression)
Thuật toán nén sử dụng biến đổi DFT
Thuật toán nén sử dụng biến đổi wavelet



CuuDuongThanCong.com
Spring 2017

/>Data structure & Algorithm

3


Giới thiệu (cont.)
Định nghĩa 1
Hiệu suất nén: tỉ lệ kích thước giảm được sau khi áp dụng thuật
toán nén
N −M
D=
100
(1)
N
D: hiệu suất nén
N: kích thước dữ liệu trước khi nén
M: kích thước dữ liệu sau khi nén
Hiệu suất nén tùy thuộc vào:
Phương pháp nén
Đặc trưng của dữ liệu

CuuDuongThanCong.com
Spring 2017

/>Data structure & Algorithm


4


Thuật toán nén RLE
Thuật toán nén Run Length Encoding (RLE) mã hóa dữ liệu
dựa trên sự lặp lại
Một dãy các ký tự lặp lại liên tiếp được gọi là đường chạy
(run)
Đường chạy sẽ được nén bằng công thức sau
[số ký tự][ký tự]
Khi độ dài đường chạy lớn thì tỉ lệ nén sẽ tăng lên

CuuDuongThanCong.com
Spring 2017

/>Data structure & Algorithm

5


Thuật toán nén RLE (cont.)
Ví dụ 1
Hãy nén chuỗi sau bằng RLE
AAABBCCAAADE
Sẽ được mã hóa thành

CuuDuongThanCong.com
Spring 2017

3A2B2C3A1D1E


/>Data structure & Algorithm

6


Đánh giá thuật toán RLE
Đơn giản, dễ cài đặt
Dùng để nén các dữ liệu có nhiều đoạn lặp lại
Thích hợp cho dữ liệu ảnh
Hiệu suất nén không cao

CuuDuongThanCong.com
Spring 2017

/>Data structure & Algorithm

7


Thuật toán nén LZW
Giới thiệu
Được đề xuất bởi Ziv and Lempel và cải tiến bởi Welch
[Lempel, 1978]
Đây là một thuật toán nén dựa trên tần suất xuất hiện trong
từ điển. Do đó nó còn được gọi là thuật toán nén từ điển
Ảnh định dạng GIF sử dụng thuật toán nén này

CuuDuongThanCong.com
Spring 2017


/>Data structure & Algorithm

8


Thuật toán nén dữ liệu
w ← null
while ( ĐỌC ký tự k )
if ( wk có trong TỪ ĐIỂN )
w = wk;
else
XUẤT mã c ← Code(w)
THÊM wk vào TỪ ĐIỂN
w ← k
XUẤT mã c ← Code(w)

CuuDuongThanCong.com
Spring 2017

/>Data structure & Algorithm

9


Minh họa thuật toán nén dữ liệu
Xét một chuỗi ký tự “abracadabarabra” →
k
a
b

r
a
c
a
d
a
b
a
r
a
b
r
a

CuuDuongThanCong.com
Spring 2017

w =∅
a
b
r
a
c
a
d
a
ab
a
r
ra

b
br
a

output
0
1
4
0
2
0
3
5
0
7
6
0
/>Data structure & Algorithm

c
0
1
2
3
4
5
6
7
8
9

10
11
12
13
14
15

word
a
b
c
d
r
ab
br
ra
ac
ca
ad
da
aba
ar
rab
bra
10


Minh họa thuật toán nén dữ liệu
Xét một chuỗi ký tự “abracadabarabra” →
k

a
b
r
a
c
a
d
a
b
a
r
a
b
r
a

CuuDuongThanCong.com
Spring 2017

w =∅
a
b
r
a
c
a
d
a
ab
a

r
ra
b
br
a

output
0
1
4
0
2
0
3
5
0
7
6
0
/>Data structure & Algorithm

c
0
1
2
3
4
5
6
7

8
9
10
11
12
13
14
15

word
a
b
c
d
r
ab
br
ra
ac
ca
ad
da
aba
ar
rab
bra
10


Minh họa thuật toán nén dữ liệu

Xét một chuỗi ký tự “abracadabarabra” → 0
k
a
b
r
a
c
a
d
a
b
a
r
a
b
r
a

CuuDuongThanCong.com
Spring 2017

w =∅
a
b
r
a
c
a
d
a

ab
a
r
ra
b
br
a

output
0
1
4
0
2
0
3
5
0
7
6
0
/>Data structure & Algorithm

c
0
1
2
3
4
5

6
7
8
9
10
11
12
13
14
15

word
a
b
c
d
r
ab
br
ra
ac
ca
ad
da
aba
ar
rab
bra
10



Minh họa thuật toán nén dữ liệu
Xét một chuỗi ký tự “abracadabarabra” → 0 1
k
a
b
r
a
c
a
d
a
b
a
r
a
b
r
a

CuuDuongThanCong.com
Spring 2017

w =∅
a
b
r
a
c
a

d
a
ab
a
r
ra
b
br
a

output
0
1
4
0
2
0
3
5
0
7
6
0
/>Data structure & Algorithm

c
0
1
2
3

4
5
6
7
8
9
10
11
12
13
14
15

word
a
b
c
d
r
ab
br
ra
ac
ca
ad
da
aba
ar
rab
bra

10


Minh họa thuật toán nén dữ liệu
Xét một chuỗi ký tự “abracadabarabra” → 0 1 4
k
a
b
r
a
c
a
d
a
b
a
r
a
b
r
a

CuuDuongThanCong.com
Spring 2017

w =∅
a
b
r
a

c
a
d
a
ab
a
r
ra
b
br
a

output
0
1
4
0
2
0
3
5
0
7
6
0
/>Data structure & Algorithm

c
0
1

2
3
4
5
6
7
8
9
10
11
12
13
14
15

word
a
b
c
d
r
ab
br
ra
ac
ca
ad
da
aba
ar

rab
bra
10


Minh họa thuật toán nén dữ liệu
Xét một chuỗi ký tự “abracadabarabra” → 0 1 4 0
k
a
b
r
a
c
a
d
a
b
a
r
a
b
r
a

CuuDuongThanCong.com
Spring 2017

w =∅
a
b

r
a
c
a
d
a
ab
a
r
ra
b
br
a

output
0
1
4
0
2
0
3
5
0
7
6
0
/>Data structure & Algorithm

c

0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15

word
a
b
c
d
r
ab
br
ra
ac
ca
ad
da

aba
ar
rab
bra
10


Minh họa thuật toán nén dữ liệu
Xét một chuỗi ký tự “abracadabarabra” → 0 1 4 0 2
k
a
b
r
a
c
a
d
a
b
a
r
a
b
r
a

CuuDuongThanCong.com
Spring 2017

w =∅

a
b
r
a
c
a
d
a
ab
a
r
ra
b
br
a

output
0
1
4
0
2
0
3
5
0
7
6
0
/>Data structure & Algorithm


c
0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15

word
a
b
c
d
r
ab
br
ra
ac
ca

ad
da
aba
ar
rab
bra
10


Minh họa thuật toán nén dữ liệu
Xét một chuỗi ký tự “abracadabarabra” → 0 1 4 0 2 0
k
a
b
r
a
c
a
d
a
b
a
r
a
b
r
a

CuuDuongThanCong.com
Spring 2017


w =∅
a
b
r
a
c
a
d
a
ab
a
r
ra
b
br
a

output
0
1
4
0
2
0
3
5
0
7
6

0
/>Data structure & Algorithm

c
0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15

word
a
b
c
d
r
ab
br
ra

ac
ca
ad
da
aba
ar
rab
bra
10


Minh họa thuật toán nén dữ liệu
Xét một chuỗi ký tự “abracadabarabra” → 0 1 4 0 2 0 3
k
a
b
r
a
c
a
d
a
b
a
r
a
b
r
a


CuuDuongThanCong.com
Spring 2017

w =∅
a
b
r
a
c
a
d
a
ab
a
r
ra
b
br
a

output
0
1
4
0
2
0
3
5
0

7
6
0
/>Data structure & Algorithm

c
0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15

word
a
b
c
d
r
ab

br
ra
ac
ca
ad
da
aba
ar
rab
bra
10


Minh họa thuật toán nén dữ liệu
Xét một chuỗi ký tự “abracadabarabra” → 0 1 4 0 2 0 3
k
a
b
r
a
c
a
d
a
b
a
r
a
b
r

a

CuuDuongThanCong.com
Spring 2017

w =∅
a
b
r
a
c
a
d
a
ab
a
r
ra
b
br
a

output
0
1
4
0
2
0
3

5
0
7
6
0
/>Data structure & Algorithm

c
0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15

word
a
b
c
d

r
ab
br
ra
ac
ca
ad
da
aba
ar
rab
bra
10


Minh họa thuật toán nén dữ liệu
Xét một chuỗi ký tự “abracadabarabra” → 0 1 4 0 2 0 3 5
k
a
b
r
a
c
a
d
a
b
a
r
a

b
r
a

CuuDuongThanCong.com
Spring 2017

w =∅
a
b
r
a
c
a
d
a
ab
a
r
ra
b
br
a

output
0
1
4
0
2

0
3
5
0
7
6
0
/>Data structure & Algorithm

c
0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15

word
a
b

c
d
r
ab
br
ra
ac
ca
ad
da
aba
ar
rab
bra
10


Minh họa thuật toán nén dữ liệu
Xét một chuỗi ký tự “abracadabarabra” → 0 1 4 0 2 0 3 5 0
k
a
b
r
a
c
a
d
a
b
a

r
a
b
r
a

CuuDuongThanCong.com
Spring 2017

w =∅
a
b
r
a
c
a
d
a
ab
a
r
ra
b
br
a

output
0
1
4

0
2
0
3
5
0
7
6
0
/>Data structure & Algorithm

c
0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15

word

a
b
c
d
r
ab
br
ra
ac
ca
ad
da
aba
ar
rab
bra
10


Minh họa thuật toán nén dữ liệu
Xét một chuỗi ký tự “abracadabarabra” → 0 1 4 0 2 0 3 5 0
k
a
b
r
a
c
a
d
a

b
a
r
a
b
r
a

CuuDuongThanCong.com
Spring 2017

w =∅
a
b
r
a
c
a
d
a
ab
a
r
ra
b
br
a

output
0

1
4
0
2
0
3
5
0
7
6
0
/>Data structure & Algorithm

c
0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15


word
a
b
c
d
r
ab
br
ra
ac
ca
ad
da
aba
ar
rab
bra
10


Minh họa thuật toán nén dữ liệu
Xét một chuỗi ký tự “abracadabarabra” → 0 1 4 0 2 0 3 5 0 7
k
a
b
r
a
c
a

d
a
b
a
r
a
b
r
a

CuuDuongThanCong.com
Spring 2017

w =∅
a
b
r
a
c
a
d
a
ab
a
r
ra
b
br
a


output
0
1
4
0
2
0
3
5
0
7
6
0
/>Data structure & Algorithm

c
0
1
2
3
4
5
6
7
8
9
10
11
12
13

14
15

word
a
b
c
d
r
ab
br
ra
ac
ca
ad
da
aba
ar
rab
bra
10


Minh họa thuật toán nén dữ liệu
Xét một chuỗi ký tự “abracadabarabra” → 0 1 4 0 2 0 3 5 0 7
k
a
b
r
a

c
a
d
a
b
a
r
a
b
r
a

CuuDuongThanCong.com
Spring 2017

w =∅
a
b
r
a
c
a
d
a
ab
a
r
ra
b
br

a

output
0
1
4
0
2
0
3
5
0
7
6
0
/>Data structure & Algorithm

c
0
1
2
3
4
5
6
7
8
9
10
11

12
13
14
15

word
a
b
c
d
r
ab
br
ra
ac
ca
ad
da
aba
ar
rab
bra
10


Minh họa thuật toán nén dữ liệu
Xét một chuỗi ký tự “abracadabarabra” → 0 1 4 0 2 0 3 5 0 7 6
k
a
b

r
a
c
a
d
a
b
a
r
a
b
r
a

CuuDuongThanCong.com
Spring 2017

w =∅
a
b
r
a
c
a
d
a
ab
a
r
ra

b
br
a

output
0
1
4
0
2
0
3
5
0
7
6
0
/>Data structure & Algorithm

c
0
1
2
3
4
5
6
7
8
9

10
11
12
13
14
15

word
a
b
c
d
r
ab
br
ra
ac
ca
ad
da
aba
ar
rab
bra
10


×