Để chứng minh thuật toán tham lam Huffman là đúng, ta chỉ ra rằng bài toán xác định mã tiền tố tối ưu thể hiện lựa chọn tham lam và những tính chất cấu trúc con. Bổ đề tiếp theo chỉ ra thuộc tính lựa chọn tham lam có.
a. Bổ đề 16.2:
Cho C là một bảng chữ cái mà mỗi ký tự c∈C có tần số là f[c]. Cho x và y là 2 ký tự trong C có tần số thấp nhất. Thì tồn tại mã tiền tố tối ưu đối với C mà trong đó những từ mã của x và y có cùng chiều dài và chỉ khác duy nhất ở bit cuối cùng.
Chứng minh: Ý tưởng của phần chứng minh đó là chọn một cây T biểu diễn mã tiền
tố tối ưu tuỳ ý và sửa đổi nó để tạo thành một cây biểu diễn mã tiền tố tối ưu khác sao cho các ký tự x và y xuất hiện như những lá anh em ruột có chiều sâu cực đại trên một
cây mới. Nếu ta có thể thực hiện điều này, thì các từ mã của chúng sẽ có cùng chiều dài và chỉ khác nhau ở bit cuối cùng.
Cho a và b là hai ký tự là các lá anh em ruột có chiều sâu cực đại trong T. Không mất tính tổng quát, ta mặc nhận rằng f[a] f[b]≤ và f[x] f[y]≤ . Vì rằng f[x] và f[y] là hai tần số
của lá thấp nhất, theo thứ tự và f[a] và f[b] là các tần số tuỳ ý, theo thứ thự, nên ta có [x] f[a]
f ≤ và f[y] f[b]≤ . Như đã có ở minh hoạ 16.6, ta tráo đổi các vị trí trong T của a
và x để tạo ra một cây mới T’, và sau đó ta tráo đổi các vị trí trên câu T’ của b và y để tạo ra cây mới T”. Qua phương trình (16.5), sự khác biệt đáng kể về mức hao phí giữa T và T’ là:
Minh hoạ 16.6: Hình ảnh minh hoạ bước mấu chốt trong chứng minh của Bổ đề 16.2. Trong cây tối ưu T, các lá a và b là hai lá sâu nhất và là anh em ruột với nhau. Các lá x và y là hai lá mà giải thuật Huffman kết hợp với nhau đầu tiên; chúng xuất hiện ở các vị trí tuỳ ý trên T. Các lá a và x được trao đổi để thu được cây T’. Sau đó, các lá b và y được trao đổi để thu được cây T”. Bởi vì mỗi lần trao đổi không làm tăng mức phí, kết quả cây T” cũng như cây tối ưu.
bởi vì cả f[a]-f[x] và dT(a)-dT(x) là không âm. Đặc biệt hơn, f[a]-f[x] là không âm bởi vì x là lá có tần số cực tiểu và dT(a)-dT(x) là không âm bởi vì a là lá có chiều sâu cực đại trên T. Tương tự, tráo đổi a và b mà không là tăng mức hao phí, và B(T’)-B(T”) là không âm. Bởi vậy, B T( ")≤B T( ), và vì rằng T là tối ưu, B T( )≤B T( "), suy ra B(T)=B(T”). Vì vậy, T” là cây tối ưu trong đó x và y xuất hiện như những lá anh em ruột có chiều sâu cực đại,
Bổ đề 16.2 hàm ý rằng quá trình xây dựng một cây tối ưu bởi các phép kết hợp có thể, không mất tính tổng quát, bắt đầu với một lựa chọn tham lam của tiến kết hợp hai ký tự có tần số thấp nhất với nhau . Tại sao điều này là một lựa chọn tham lam? Ta có thể xem mức hao phí của phép kết hợp đơn lẻ dưới dạng tổng của các tần số của hai phần tử được kết hợp. Bài tập 16.3-3 chỉ ra rằng tổng mức hao phí các phép hợp của nó. Đối với tất cả phép kết hợp có thể ở mỗi bước, Huffman chọn ra một phép kết hợp mang giá trị nhỏ nhất. Bổ đề tiếp theo sau đây chỉ ra rằng bài toán xây dựng mã tiền tố tối ưu có tính chất cấu trúc con - tối ưu.
b. Bổ đề 16.3:
Cho C là một bảng chữ cái cho trước với tần số f[c] xác định với mỗi ký tự c C∈ . Cho x và y là hai ký tự trong C với tần số nhỏ nhất. Cho C’ là bảng chữ cái C với x và y bị xoá và có thêm ký tự mới z, vì vậy C’=C-{x,y}∪{z}; xác định f của C’ cũng là của C,
với f[z]=f[x]+f[y]. Cho T’ là cây bất kỳ biểu diễn mã tiền tố tối ưu của bảng chữ cái C’ thì cây T, thu được từ T’ bằng việc thay thế nút lá z với một nút trong có x và y là con, biểu diễn mã tiền tố tối ưu cho bảng chữ cái C.
Chứng minh: Đầu tiên ta chỉ ra rằng giá trị B(T) của cây T có thể được thể hiện dưới
dạng mức hao phí B(T’) của cây T’ bằng cách xét các mức hao phí thành phần trong phương trình (16.5). Với mỗi c C∈ −{x,y}, ta có dT(c)=dT’(c), và do đó f[c]dT(c)=f[c]dT’(c). Vì rằng dT(x)=dT(y)=dT’(z)+1, ta có: f[x]dT(x) + f[y]dT(y) = (f[x] + f[y])(dT’(z) + 1) = f[z]dT’(z) + (f[x] + f[y])
từ đó ta kết luận rằng: B(T) = B(T’) + f[x] + f[y] Hoặc, ta có tương đương: B(T’) = B(T) - f[x] - f[y]
Bây giờ, ta chứng minh bổ đề bằng phản chứng. Giả sử rằng T biểu diễn mã tiền tố không tối ưu cho C. Thì tồn tại một cây T“ sao cho B(T“)<B(T). Không mất tính tổng quát (bởi Bổ đề 16.2), T“ có x và y là anh em ruột. Cho T’“ là cây T“ với cha mẹ chung của x và y được thay thế bởi một lá z có tần số f[z]= f[x] + f[y]. Thì:
Dẫn đến mâu thuẫn đối với giả thiết cho rằngT’ biểu diễn mã tiền tố tối ưu cho C’. Vì vậy, T phải biểu diễn mã tiền tố tối ưu cho bảng chữ cái C.
c. Bổ đề 16.4:
Thủ tục Huffman hình thành nên mã tiền tố tối ưu. Chứng minh từ Bổ đề 16.2 và 16.3
3.4. Các bài tập liên quan:
Bài 1: Chứng minh rằng một cây nhị phân không đầy đủ thì không thể tương ứng với mã
tiền tố tối ưu.
Bài 2: Đâu là mã Huffman tối ưu đối với tập hợp các tần số dưới đây, dựa vào 8 số đầu
tiên của dãy Fibonacci ?
a:1 b:1 c:2 d:3 e:5 f:8 g:13 h:21
Có thể khái quát hoá câu trả lời để tìm ra mã tối ưu khi các tần số là n số số đầu tiên của dãy Fibonacci không?
Bài 3: Chứng minh rằng tổng mức hao phí của một cây cho một mã cũng có thể được
tính toán như tổng của tất cả các nút bên trong, của các tần số kết hợp của hai nút con.
Bài 4: Chứng minh rằng nếu ta sắp xếp các ký tự trong bảng chữ cái sao cho tần số của
chúng giảm dần đều thì tồn tại mã tối ưu thì chiều dài từ mã là tăng dần đều.
Bài 5: Giả sử ta có mã tiền tố tối ưu trên tập C={0,1…,n-1} gồm các ký tự và ta qui ước
để truyền mã này dùng như một số bit có thể. Chỉ ra cách để biểu diễn mã tiền tố tối ưu trên C dùng chỉ 2n-1+n[lgn] bit. (Gợi ý: Dùng 2n-1 bit để đặc tả cấu trúc của cây, như được phát hiện bởi một tầng của cây)
Bài 6: Khái quát hoá giải thuật Huffman để tam phân từ mã ( ví dụ từ mã dùng 0, 1 và 2)
và chứng minh rằng nó cho ra các mã tam phân tối ưu.
Chứng minh rằng phương pháp lập mã Huffman trong trường hợp này là không hiệu quả hơn dùng mã có chiều dài cố định 8 bit bình thường.
Bài 8: Chỉ ra rằng không có lược đồ nén nào có thể nén một tập tin những ký tự 8 bit
được lựa chọn ngẫu nhiên theo thậm chí một bit đơn lẻ (Gợi ý: So sánh số lượng tập tin với số lượng các tập tin có thể mã hoá).
PHẦN 4: CƠ SỞ LÝ THUYẾT CỦA PHƯƠNG PHÁP THAM LAM
Có một lý thuyết rất hay về giải thuật tham lam mà ta sẽ tóm tắt trong phần này. Lý thuyết này rất hữu ích trong việc xác định khi phương pháp tham lam dẫn đến những giải pháp tối ưu. Nó liên quan đến cấu trúc tổ hợp đã biết như “matroids”. Mặc dù lý thuyết này không áp dụng cho tất cả các trường hợp mà phương pháp tham lam đã áp dụng (ví dụ, không áp dụng cho bài toán lựa chọn hoạt động ở phần 16.1 hoặc bài toán mã Huffman ở phần 16.3), nó áp dụng cho nhiều trường hợp quan trọng thiết thực. Hơn nữa, lý thuyết này đang được phát triển nhanh chóng và mở rộng để áp dụng cho nhiều ứng dụng hơn nữa; hãy đọc mục lục ở cuối chương để tham khảo.