Để 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ằngf[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, mà bổ đề theo.
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ì:
B(T’’’)=B(T’’)-f[x]-f[y] <B(T)-f[x]-f[y] = B(T’)
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ài đặt thuật toán
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.