Você está na página 1de 7

Lý thuyết Thông tin

BÀI 7 MÃ HOÁ TỐI ƯU NGUỒN RỜI RẠC KHÔNG NHỚ


7.1 Các định lý về giới hạn trên và dưới của chiều dài trung bình
7.2 Mã hoá theo Shannon và Fano
7.3 Phương pháp mã hoá tối ưu theo Huffman

7.1 Các định lý về giới hạn trên và dưới của chiều dài trung bình
Trong phần này chúng ta sẽ thiết lập các giới hạn trên và dưới đối với chiều dài trung
bình của bộ mã trong thuật ngữ của entropy.
Định lý 7.1
Cho nguồn tin X = {a1, ..., aK} với các xác suất tương ứng p1, ..., pK. Một bộ mã
phân tách được bất kỳ cho nguồn này với cơ số mã m, chiều dài trung bình từ mã l sẽ
thõa (trong đó H(X) là entropy của nguồn với cơ số của logarit là m)
H (X )
l≥
log m
Chứng minh
K K
m − li K K  m − li   K 
H(X) – l ln m = − ∑ pi ln pi − ∑ pi li ln m = ∑ pi ln ≤ ∑ pi  − 1 =  ∑ m − li  − 1
pi  pi   
i =1 i =1 i =1 i =1    i =1 
Mà vì mã là phân tách được nên phải thoã bất đẳng thức Kraft. Vì vậy, H(X) – l ln m ≤ 0.
Điều này hoàn tất chứng minh của chúng ta. Chú ý dấu “=” xảy ra khi và chỉ khi pi = D − li
với mọi i.
Định lý 7.2
Cho nguồn tin X = {a1, ..., aK} với các xác suất tương ứng p1, ..., pK, có thể xây
dựng một mã prefix với cơ số m sao cho
H (X )
l< +1
log m
Chứng minh
Chọn chiều dài li của từ mã cho tin ai theo qui tắc li = − log mpi   , trong đó α là số
nguyên cận trên của α. Bây giờ chúng ta có
K K
 
li = − log mpi ⇒ li ≥ − log m
pi
⇒ m − l i ≤ pi ⇒ ∑ m − li ≤ ∑ pi = 1
i =1 i =1
Vì các chiều dài được chọn này thoã bất đẳng thức Kraft nên tồn tại một mã prefix tương
ứng có các chiều dài này. Tiếp tục chúng ta có

li = − log mpi  ⇒ li < − log mpi + 1
Vì vậy,
 + 1 = H (X ) + 1
K K K  K
pi log pi 
∑ pi ni < − ∑ pi log mpi + ∑ pi =  − ∑ 
i =1 i =1 i =1  i =1 log m  log m
Điều này hoàn tất chứng minh của chúng ta.
Từ hai định lý này chúng ta rút ra một nhận xét quan trọng rằng:
Có thể mã hoá một nguồn mà có chiều dài trung bình l tiếp cận đến H(X) / log m
với sai số nhỏ tuỳ ý.

Người soạn Hồ Văn Quân - Khoa CNTT - ĐH Bách Khoa Tp.HCM 34


Lý thuyết Thông tin

Điều này có thể thực hiện được bằng cách mã hoá các dãy N tin theo cách được mô tả trong
Định lý 7.2. Lúc này chúng ta có nguồn mới với kích thước là KN, mỗi phần tử là một dãy
của N tin được lấy độc lập từ nguồn {a1, ..., aK}. Entropy của nguồn mới là NH(X) và chiều
dài trung bình các từ mã của nó theo định nghĩa sẽ là N lần chiều dài trung bình các từ mã
của nguồn ban đầu l . Áp dụng Định lý 7.1 và Định lý 7.2 đối với nguồn mới chúng ta có
NH ( X ) NH ( X )
≤ Nl < +1
log m log m
Từ đây suy ra
H (X ) H (X ) 1
≤l< +
log m log m N
Vì N có thể lớn tuỳ ý, nên chúng ta thấy l là tiếp cận đến H(X) / log m với tốc độ tương
đương với 1/N tiến đến 0 khi N tiến ra vô cùng.
Hiệu suất lập mã
Để đánh giá một phương pháp mã hoá nào đó là tốt hay không người ta đưa ra khái
niệm gọi là hiệu suất lập mã. Hiệu suất lập mã h được định nghĩa bằng tỉ số của entropy của
H (x )
nguồn với chiều dài trung bình của bộ mã được lập, h = .
l

7.2 Mã hoá theo Shannon và Fano


Trong phần này chúng ta sẽ trình bày hai phương pháp mã hoá nguồn, một phương
pháp của Shannon và một phương pháp của Fano. Gọi nguồn cần mã hoá là S = {a1, ..., aK}
có các xác suất tương ứng là p1, ..., pK. Ở đây, chúng ta chủ yếu trình bày các phương pháp
mã hoá theo cơ số m = 2 (mã nhị phân), đối với các cơ số khác cách mã hoá sẽ hoàn toàn
tương tự hoặc sẽ được chỉ ra những điểm cần chú ý nếu có sự khác biệt. Kết quả của các
phương pháp mã hoá này là những mã prefix cái mà để dành cho các bạn sinh viên tự chứng
minh. Tuy nhiên trước hết chúng ta sẽ trình bày khái niệm bộ mã tối ưu cho một nguồn tin.
Bộ mã tối ưu
Một bộ mã mã hoá cho một nguồn được gọi là tối ưu nếu có chiều dài trung bình
là nhỏ nhất trong tất cả các bộ mã (dĩ nhiên phân tách được) có thể mã hoá cho nguồn.
Và dĩ nhiên bộ mã tối ưu là một mã prefix.
Phương pháp mã hoá Shannon
Phương pháp này bao gồm các bước sau:
1. Sắp xếp các xác suất theo thứ tự giảm dần. Không mất tổng quát giả sử p1 ≥ ... ≥ pK.
i −1
2. Định nghĩa q1 = 0, qi = ∑ qj , ∀ i = 1, 2, ..., K.
j =1
3. Đổi qi sang cơ số 2, hay nói cách khác biểu diễn qi trong cơ số 2 sẽ được một chuỗi nhị
phân, chẳng hạn 1/2 thì được biểu diễn bằng 0,12, 1/4 thì được biểu diễn bằng 0,012,
5/8 thì được biểu diễn bằng 0,1012, ...
4. Từ mã được gán cho ai là ni kí hiệu lấy từ vị trí sau dấu phẩy của chuỗi nhị phân tương
ứng với qi, trong đó ni =  − log 2 i 
p
 
Tuy nhiên, để đơn giản phương pháp này thường được trình bày dưới dạng một bảng như ví
dụ sau.
Ví dụ 7.1

Người soạn Hồ Văn Quân - Khoa CNTT - ĐH Bách Khoa Tp.HCM 35


Lý thuyết Thông tin

Hãy mã hoá nguồn S = {a1, a2, a3, a4, a5, a6} với các xác suất lần lượt là 0,3; 0,25; 0,2;
0,12; 0,08; 0,05.
Ta có entropy của nguồn này là H = 2.36. Để thực hiện phương pháp mã hoá này chúng ta
lập bảng sau.
Xác i −1
Biểu diễn n =  − log pi 
Tin suất qi = ∑ qj i  2  Từ mã
j = 1 nhị phân
pi
a1 0,3 0 0,00 2 00
a2 0,25 0,3 0,01001... 2 01
a3 0,2 0,55 0,10001... 3 100
a4 0,12 0,75 0,11000... 4 1100
a5 0,08 0,87 0,11011... 4 1101
a6 0,05 0,95 0,111100... 5 11110
Chiều dài trung bình của bộ mã này là l = 2,75. Hiệu suất của bộ mã này là h = 2,75/2,36 =
85,82%.
Phương pháp mã hoá Fano
Phương pháp này bao gồm các bước sau:
1. Sắp xếp các xác suất theo thứ tự giảm dần. Không mất tổng quát giả sử p1 ≥ ... ≥ pK.
2. Phân các xác suất thành 2 nhóm có tổng xác suất gần bằng nhau nhất, mỗi nhóm bao
gồm các xác suất đứng gần nhau (không được cách quãng)
3. Gán cho hai nhóm lần lượt các kí hiệu 0 và 1 (hoặc ngược lại). Tuy nhiên chúng ta có
thể qui ước gán cho nhóm trên kí hiệu 0, nhóm dưới kí hiệu 1.
4. Lặp lại bước 2 cho các nhóm con cho đến khi không còn thực hiện được nữa. Tức là
ứng với mỗi nhóm con trong bước 3 lại phân nó thành 2 nhóm con nhỏ có tổng xác
suất gần bằng nhau nhất, mỗi nhóm bao gồm các xác suất đứng gần nhau.
5. Từ mã ứng với mỗi tin là chuỗi bao gồm các kí hiệu theo thứ tự lần lượt được gán cho
các nhóm có chứa xác suất tương ứng của tin.
Tuy nhiên, để đơn giản phương pháp này cũng thường được trình bày dưới dạng một bảng
như ví dụ sau.
Ví dụ 7.2
Hãy mã hoá nguồn như trong Ví dụ 7.1.
Chúng ta lập bảng sau.
Phân nhóm lần
Tin Xác suất Từ mã
1 2 3 4
a1 0,3 0 0 00
a2 0,25 0 1 01
a3 0,2 1 0 10
a4 0,12 1 1 0 110
a5 0,08 1 1 1 0 1110
a6 0,05 1 1 1 1 1111
Chiều dài trung bình của bộ mã này là l = 2,38. Hiệu suất của bộ mã này là h = 2,38/2,36 =
99,17%.
So sánh hiệu suất của hai phương pháp ta thấy phương pháp mã hoá theo Fano tốt hơn
phương pháp mã hoá theo Shannon. Và điều này cũng đúng trong đa số các trường hợp
khác.
Chú ý, trong nhiều trường hợp có hơn nhiều hơn một cách chia thành các nhóm có tổng xác
suất gần bằng nhau thì chúng ta có thể chọn lựa một trong các cách chia này.

Người soạn Hồ Văn Quân - Khoa CNTT - ĐH Bách Khoa Tp.HCM 36


Lý thuyết Thông tin

Ví dụ 7.3
Hãy mã hoá nguồn S = {a1, a2, a3, a4, a5, a6, a7, a8} với các xác suất lần lượt là 0,23;
0,2; 0,14; 0,12; 0,1; 0,09; 0,06; 0,06.
Chúng ta lập bảng sau.
Phân nhóm lần
Tin Xác suất Từ mã
1 2 3 4
a1 0,23 0 0 00
a2 0,2 0 1 01
a3 0,14 1 0 0 100
a4 0,12 1 0 1 101
a5 0,1 1 1 0 0 1100
a6 0,09 1 1 0 1 1101
a7 0,06 1 1 1 0 1110
a8 0,06 1 1 1 1 1111
Chú ý trong lần phân nhóm thứ nhất chúng ta có hai cách phân. Cách thứ nhất, hai nhóm là
{a1, a2}, {a3, a4, a5, a6, a7, a8}. Cách thứ hai, hai nhóm là {a1, a2, a3}, {a4, a5, a6, a7, a8}. Cả
hai cách phân nhóm này đều có hiệu xác suất của hai nhóm là nhỏ nhất trong tất cả các cách
phân và bằng 0,14. Ở bảng trên chúng ta thực hiện phân nhóm theo cách thứ nhất. Ở bảng
dưới đây chúng ta thực hiện theo cách phân nhóm thứ hai.
Phân nhóm lần
Tin Xác suất Từ mã
1 2 3 4
a1 0,23 0 0 00
a2 0,2 0 1 0 010
a3 0,14 0 1 1 011
a4 0,12 1 0 0 100
a5 0,1 1 0 1 101
a6 0,09 1 1 0 110
a7 0,06 1 1 1 0 1110
a8 0,06 1 1 1 1 1111
Theo cách thứ nhất chúng ta có chiều dài trung bình của bộ mã là l1 = 2,88, theo cách thứ
hai chúng ta có l 2 = 2,89.

7.3 Phương pháp mã hoá tối ưu theo Huffman


Trong phần này chúng ta sẽ trình bày một phương pháp mã hoá tối ưu cho một nguồn
tin, đó là phương pháp mã hoá tối ưu của Huffman. Trước hết chúng ta xét cơ số mã là m =
2. Trong trường hợp m > 2, chúng ta sẽ có một sự chú ý về sự khác biệt so với trường hợp m
= 2.
Bổ đề
Cho nguồn S = {a1, ..., aK} có các xác suất lần lượt là p1 ≥ ... ≥ pK. Gọi l1, ..., lK là
chiều dài các từ mã tương ứng với bộ mã tối ưu cho S. Thì l1 ≤ ... ≤ lK.
Chứng minh
Với i ≤ j, tức pi ≥ pj, giả sử li > lj. Chúng ta xét một bộ mã mới bằng cách hoán đổi hai
từ mã có chiều dài li và lj cho nhau. Tức là tin ai có xác suất pi trước đây được gán với từ mã
có chiều dài li thì bây giờ được gán với từ mã có chiều dài lj và ngược lại tin aj có xác suất
pj trước đây được gán với từ mã có chiều dài lj thì bây giờ được gán với từ mã từ mã có
chiều dài li Xét hiệu chiều dài trung bình của bộ mã mới so với bộ mã cũ chúng ta có

Người soạn Hồ Văn Quân - Khoa CNTT - ĐH Bách Khoa Tp.HCM 37


Lý thuyết Thông tin

∆l = pilj + pjli – pili – pjlj = (pj – pi)(li – lj)


Ta thấy khi pi = pj thì ∆l = 0, còn khi pi > pj thì ∆l < 0. Vì vậy khi pi > pj thì bộ mã mới có
chiều dài trung bình còn nhỏ hơn chiều dài trung bình của bộ mã tối ưu. Điều này mâu thuẫn
với định nghĩa của bộ mã tối ưu. Vì vậy bổ đề được chứng minh.
Bổ đề này thật sự phát biểu một điều rằng, để mã hoá tối ưu cho một nguồn tin thì tin
có xác suấ càng lớn phải được mã hoá thành từ mã có chiều dài càng nhỏ.
Định lý 7.3 (Định lý số 1 của Huffman)
Trong bộ mã tối ưu (m = 2) cho một nguồn tin, thì hai từ mã tương ứng với hai tin
có xác suất nhỏ nhất phải có chiều dài bằng nhau (lK–1 = lK) và có thể làm cho chúng chỉ
khác nhau duy nhất ở bit cuối (bit tận cùng bên phải).
Chứng minh
Nếu lK–1 < lK thì chúng ta loại bỏ bit cuối cùng của từ mã wK tương ứng với lK và được
một bộ mã mới vẫn có tính prefix và có chiều dài trung bình nhỏ hơn bộ mã cũ. Vì vậy nếu
muốn là mã tối ưu thì lK–1 và lK phải bằng nhau.
Bây giờ nếu wK–1 và wK chỉ khác nhau bit cuối thì định lý được chứng minh. Nếu
ngược lại, có thể có một từ mã khác wi có chiều dài bằng lK đồng thời khác từ mã wK chỉ ở
bit cuối. Nếu vậy thì chúng ta có thể hoán đổi wK–1 và wi cho nhau và vì vậy định lý cũng
được chứng minh. Còn nếu không tồn tại một từ mã wi như vậy thì chúng ta có thể tạo ra
một bộ mã mới bằng cách bỏ đi bit cuối của từ mã wK. Bộ mã mới này không vi phạm điều
kiện prefix và có chiều dài trung bình nhỏ hơn bộ mã cũ. Điều này vi phạm với điều rằng bộ
mã cũ là tối ưu. Vì vậy định lý được chứng minh.
Định lý 7.4 (Định lý số 2 của Huffman)
Xét một nguồn mới S’ = {a’1, ..., a’K–1} với sự phân bố xác suất là p’1, ... , p’K–1
trong đó p’i = pi với 1 ≤ i ≤ K – 2 còn p’K–1 = pK–1 + pK. Nếu {w’1, ..., w’K–1} làm một mã
tối ưu cho S’ thì mã nhận được theo qui tắc sau là mã tối ưu cho S.
wi = w’i, 1 ≤ i ≤ K – 2
wK–1 = w’K–10
wK = w’K–11
Chứng minh
Vì lK = lK–1 = 1 + l’K–1, nên chúng ta có
l = p1l1 + ... + pKlK = p1l’1 + ... + (pK–1 + pK)(1 + l’K–1) = l ' + (pK–1 + pK)
Điều này nói lên rằng khác biệt giữa l và l ' là một hằng số. Nên nếu mã tối ưu cho nguồn S
là tốt hơn mã theo qui tắc đã phát biểu thì mã được dẫn xuất từ đó (mã tối ưu của S ) bằng
cách bỏ đi hai từ mã wK và wK–1 và thêm vào từ mã mà bỏ đi bit cuối của wK thì sẽ được một
mã tối ưu tốt hơn cho nguồn S’, điều này là không thể. Vì vậy mã nhận được cho S theo qui
tắc trên là tối ưu.
Định lý Định lý 7.3 và Định lý 7.4 cho phép chúng ta qui bài toán tìm mã tối ưu cho
nguồn có K tin về bài toán tìm mã tối ưu cho nguồn có K–1 tin. Quá trình này có thể lặp lại
cho đến khi nào nguồn mới chỉ có hai tin, trong trường hợp này thì mã tối ưu là dễ thấy. Thủ
tục mã hoá tối ưu nhị phân của Huffman được tóm tắt trong các bước sau.
1. Sắp xếp các xác suất theo thứ tự giảm dần chẳng hạn p1 ≥ ... ≥ pK
2. Gán 0 tới bit cuối của wK–1 và 1 đến bit cuối của wK hoặc ngược lại. Tuy nhiên chúng
ta sẽ qui ước thực hiện theo chiều thứ nhất.
3. Kết hợp pK và pK–1 để tạo thành một tập xác suất mới p1, ... , pK–2, pK–1 + pK
4. Lặp lại các bước trên cho tập mới này.
Để mã hoá theo phương pháp này có nhiều cách minh hoạ, tuy nhiên cách dùng bảng như ví
dụ sau đây là cách hay được dùng.

Người soạn Hồ Văn Quân - Khoa CNTT - ĐH Bách Khoa Tp.HCM 38


Lý thuyết Thông tin

Ví dụ 7.4
Hãy mã hoá nguồn như trong Ví dụ 7.1, .
Tin pi Lần 1 Lần 2 Lần 3 Lần 4 Từ mã
a1 0,3 0,3 0,3 0,45 0,55 0 00
a2 0,25 0,25 0,25 0,30 0 0,45 1 01
a3 0,2 0,2 0,25 0 0,25 1 11
a4 0,12 0,13 0 0,20 1 101
a5 0,08 0 0,12 1 1000
a6 0,05 1 1001
Chiều dài trung bình của bộ mã này là l = 2,38. Hiệu suất của bộ mã này là h = 2,38/2,36 =
99,17%.
So sánh với phương pháp Fano trong trường hợp này ta thấy hai phương pháp là bằng
nhau. Tuy nhiên trong trường hợp tổng quát, phương pháp Fano không phải là phương pháp
tối ưu. (Sinh viên tự tìm ví dụ và chứng minh trong trường hợp tổng quát).
Chú ý trong trường hợp nếu xác suất pK–1 + pK bằng với một xác suất pi nào đó thì
chúng ta có thể đặt pK–1 + pK nằm dưới hoặc nằm trên xác suất pi thì cho dù các từ mã kết
quả có thể khác nhưng kết quả chiều dài từ mã trung bình vẫn không thay đổi.
Ví dụ 7.5
Hãy mã hoá nguồn như trong Ví dụ 7.3.
Tin pi Lần 1 Lần 2 Lần 3 Lần 4 Lần 5 Lần 6 Từ mã
a1 0,23 0,23 0,23 0,24 0,33 0,43 0,57 0 10
a2 0,2 0,2 0,2 0,23 0,24 0,33 0 0,43 1 11
a3 0,14 0,14 0,19 0,2 0,23 0 0,24 1 001
a4 0,12 0,12 0,14 0,19 0 0,20 1 010
a5 0,1 0,12 0,12 0 0,14 1 0000
a6 0,09 0,10 0 0,12 1 0001
a7 0,06 0 0,09 1 0110
a8 0,06 1 0111
Chiều dài trung bình của bộ mã này là l = 2,88. Entropy của nguồn là H = 2,848. Hiệu suất
của bộ mã này là h = 2,88/2,848 = 98,89 %.
Chú ý
Trong trường hợp cơ số m là bất kỳ. Chúng ta có với mỗi K (là số tin của nguồn và giả
sử K > m, còn trong trường hợp K ≤ m thì việc mã hoá tối ưu là quá tầm thường), tồn tại một
số n sao cho: m + (n – 1)(m – 1) < K ≤ m + n(m – 1). Chúng ta sẽ bổ sung vào một số tin
“phụ” có xác suất bằng 0 sao cho tổng số tin của nguồn bằng với m + n(m – 1). Sau đó thủ
tục mã hoá trên được điều chỉnh như sau
1. Sắp xếp các xác suất theo thứ tự giảm dần chẳng hạn p1 ≥ ... ≥ pK
2. Gán lần lượt các kí hiệu 0, 1, ..., m – 1 tới các bit cuối của m từ mã có xác suất nhỏ
nhất.
3. Kết hợp m xác suất nhỏ nhất lại thành một và tạo với K – m xác suất còn lại thành một
tập mới.
4. Lặp lại các bước trên cho tập mới này.
Ví dụ 7.6
Hãy mã hoá nguồn như trong Ví dụ 7.1 với m = 3.
Vì số tin của nguồn là K = 6, nên chúng ta phải bổ sung thêm một tin phụ a7 có xác suất p7 =
0 để thực hiện giải thuật.
Chúng ta lập bảng sau.

Người soạn Hồ Văn Quân - Khoa CNTT - ĐH Bách Khoa Tp.HCM 39


Lý thuyết Thông tin

Tin pi Lần 1 Lần 2 Từ mã


a1 0,3 0,3 0,45 0 1
a2 0,25 0,25 0,30 1 2
a3 0,2 0,20 0 0,25 2 00
a4 0,12 0,13 1 02
a5 0,08 0 0,12 2 010
a6 0,05 1 011
a7 0,00 2
Ví dụ 7.7
Xét nguồn S = {a1, a2, a3, a4} có tập phân bố xác suất là {0,4; 0,25; 0,2; 0,15}. Xét
nguồn mới S2 = {aiaj, 1 ≤ i, j ≤ 4} có tập phân bố xác suất là {0,16; 0,1; 0,08; 0,06; 0,1;
0,0625; 0,05; 0,0375; 0,08; 0,05; 0,04; 0,03; 0,06; 0,0375; 0,03; 0,0225}. Chúng ta có H(S)
= 1,9 và H(S2) = 2H(S) = 3,8. Hai bảng sau đây trình bày kết quả việc mã hoá tối ưu cho S
và S2 theo Huffman.
Tin pi Từ mã
a1 0,4 1 l S = 1,95
a2 0,25 01
h = 97,63%
a3 0,2 000
a4 0,15 001

Tin pij Từ mã
a1a1 0,16 000 l 2 = 3,8375
S
a1a2 0,1 101
a2a1 0,1 110 h = 99,26%
a1a3 0,08 0010
a3a1 0,08 0011
a2a2 0,0625 0110
a1a4 0,06 0111
a4a1 0,06 1000
a2a3 0,05 1110
a3a2 0,05 1111
a3a3 0,04 01000
a2a4 0,0375 01001
a4a2 0,0375 01010
a3a4 0,03 01011
a4a3 0,03 10010
a4a4 0,0225 10011
Ví dụ này minh hoạ cho việc mã hoá cho một dãy tin (hay khối tin) thì hiệu quả cao hơn là
mã hoá cho từng tin.

Người soạn Hồ Văn Quân - Khoa CNTT - ĐH Bách Khoa Tp.HCM 40

Você também pode gostar