Từ bảng kết quả trờn, ta thấy thuật toỏn 3.6 tiờu tốn ớt thời gian hơn ba thuật toỏn cũn lại.
Ta nhận thấy rằng, so với cỏc thuật toỏn tớnh bao đúng đó nờu, thuật
toỏn 3.6 cú ưu điểm là làm đơn giản húa tập F bằng cỏch loại bỏ phụ thuộc hàm Y Z trong F sau khi đó dựng nú để tớnh giỏ trị mới của Xnew hoặc thay thế phụ thuộc hàm Y Z trong F bằng một phụ thuộc hàm đơn giản hơn trong
trường hợp cả hai vế của phụ thuộc hàm này đều khụng là những tập con của
Xnew. Tuy nhiờn, tớnh đỳng đắn của thuật toỏn 3.6 khụng được chứng minh một cỏch tường minh. Hơn nữa, nhược điểm của nú là mỗi lần duyệt tập F, tất cả cỏc phụ thuộc hàm cú vế trỏi và vế phải cựng chứa trong Xnew vẫn được kiểm tra vế trỏi để từ đú tớnh giỏ trị mới của Xnew (điều này làm mất thời gian khụng cần thiết vỡ giỏ trị Xnew thực chất khụng thay đổi). Thuật toỏn 3.7 dưới
đõy trỏnh được những phộp kiểm tra và tớnh toỏn khụng cần thiết này vỡ thực hiện loại bỏ ngay từ đầu cỏc phụ thuộc hàm cú vế phải chứa trong Xnew nờn
thời gian thực hiện nhanh hơn so với thuật toỏn 3.6.
------------------------------------------------------------------------------------------------ Thuật toỏn 3.7. Tớnh bao đúng
------------------------------------------------------------------------------------------------ INPUT: , F, X
OUTPUT: Bao đúng X+
Xnew = X;
repeat
Xold = Xnew;
for each Y Z F do
if (Z Xnew) then F = F - {Y Z } (I)
else if (Y Xnew) then (II)
Xnew = Xnew Z; F = F - {Y Z} else (III) F = F - {Y Z }; F = F {Y - Xnew Z - Xnew}; end if; end for each;
until (Xnew = Xold) or (|F| = 0); return(Xnew);
end;
______________________________________________________________ Với thuật toỏn 3.7, ta cú bổ đề sau:
Bổ đề 3.1. Thuật toỏn 3.7 là đỳng đắn, cú nghĩa nú tớnh đỳng bao đúng X+ của
X đối với F.
Chứng minh. Vỡ thuật toỏn 3.7 là một cải tiến của thuật toỏn 3.6 và do đú
cũng là cải tiến của thuật toỏn 3.1 nờn để chứng minh tớnh đỳng đắn của thuật toỏn 3.7, ta chỉ cần chỉ ra rằng việc thay thế
Y Z bởi Y - Xnew Z - Xnew (a) khụng cú ảnh hưởng gỡ đến kết quả của việc tớnh bao đúng.
Thật vậy, thuật toỏn 3.7 sẽ thay thế Y Z bởi Y -Xnew Z - Xnew trong trường hợp cả Y và Z đều khụng phải là tập con của Xnew. Do đú, từ (a) ta suy ra Y - Xnew ≠ vỡ nếu Y - Xnew = thỡ Y là tập con của Xnew (mõu thuẫn).
Mặt khỏc, ta luụn cú
(Y - Xnew) (Y Xnew) = Y (b)
Giả sử sau phộp thay thế (a), Xnew thay đổi và nhận giỏ trị mới là Xnew1 với Xnew Xnew1.
(Y - Xnew) Xnew1 khi và chỉ khi Y Xnew1 (c) Thật vậy:
- Từ Y Xnew1 ta cú Y - Xnew Xnew1
- Từ (Y - Xnew) Xnew1, (Y Xnew) Xnew Xnew1 và (b) nờn Y = (Y - Xnew) (Y Xnew) Xnew1
Do đú, (c) được chứng minh.
Vớ dụ 3.4. Cho F = {d a, ad c, e bi, ke m, ce ik, d bei, h cde}. Tớnh bao đúng của tập thuộc tớnh X = acd theo thuật toỏn 2.7.
F d a ad c e bi ke m ce ik d bei h cde Xnew F acd (I) (I) e bi ke m (III) eik acdbei (II) (I) Xnew F acdbei (I) (III) k m acdbeik (II) Xnew F acdbeik acdbeikm (II)