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