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ạ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 (196.74 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 tồn thơng tin (lossless compression)
◮ Thuật toán nén RLE
◮ Thuật toán nén LZW
◮ Thuật tốn nén Huffman
Nén khơng bảo tồ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
100
(1)
D=
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 tố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 tố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


×