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