18. THỰC HÀNH HÀM KẾT HỢP VÀ GOM NHÓM
21.6.1. Thuật toán tìm bao đóng của một tập thuộc tính
Cho lƣợc đồ quan hệ = (U, F), X U X+ :={ A U | XA F+ }
Vấn đề đặt ra X+
F =X+=?
Thuật toán
Input = (U,F), XU Output X+ =?
Thuật toán
Ta xác định dãy X(0)
, X(1), X(2),... theo quy nạp nhƣ sau 1. Đặt X(0)
=X
2. Giả sử rằng đã xây dựng đƣợc đến bƣớc thứ i tức là đã biết X(i) ( i0) 3. Xây dựng tiếp bƣớc i+1 nhƣ sau
X(i+1)= X(i) Z(i) trong đó Z(i) = Rj với điều kiện :
Vì vậy Z(i)
chính là hợp của các vế phải của các phụ thuộc hàm trong tập F mà có vế trái là tập con của tập trƣớc và có vế phải chƣa đƣợc thêm vào.
Điều kiện (3) chỉ có tác dụng tăng tốc độ tính toán. Nhận xét: X(0)
, X(1), X(2),... là một dãy đơn điệu không giảm và bị chặn trên bởi U, do đó tồn tại chỉ số i nào đó để X(i)
= X(i+1) (*), gọi i là chỉ số nhỏ nhất để X(i)= X(i+1) khi đó X+
= X(i)
Thuật toán tìm bao đóng của tập thuộc tính dƣới dạng giả mã Pascal 1
Input: = (U, F), XU Output: X+ =?
Method:
1. X+:= {Ban đầu ta khởi gán X+ là tập rỗng} 2. Repeat
Xold :=X+; {Xold là một biến tạm dùng để đánh dấu} For each f in F Do
Begin
L: = Left (f); {Left - Hàm lấy về vế trái của phụ thuộc hàm f} R: = Right (f); {Right- Hàm lấy về vế phải của phụ thuộc hàm f} If (LX+) and (LX+) Then X+:= X+ R; End; Until (X+=Xold); Lj Rj F (1) LjX(i) (2) Rj X(i) (3)
3. Return X+
Ví dụ 1: Cho lƣợc đồ quan hệ = (U,F) với U = ABCDEGH
F= {BC ADE, AC BDG, BE ABC, CD BDH, BCH ACG} Hãy tính X+ trong các trƣờng hợp a) X=BD b) X=ABE c) X=CDG Giải a) đặt X(0)=BD (=X) X(1) = X(0) Z(0) =BD =BD Suy ra X(0)= X(1) vậy X+=X=BD b) Đặt X(0)=ABE (=X) X(1) = X(0) Z(0) =ABE ABC=ABCE
X(2) = X(1) Z(1) =ABCE (ADE BDG)=ABCDEG X(3) = X(2) Z(2) = ABCDEG BDH=ABCDEGH=U Vậy X+ =U c) Đặt X(0)=CDG (=X) X(1) = X(0) Z(0) =CDG GBH=BCDGH X(2) = X(1) Z(1) = BCDGH ADE= ABCDEGH=U Vậy X+ =U
Nhận xét: Từ thuật toán tìm bao đóng của tập thuộc tính và tính chất XYF+ khi và chỉ khi YX+, cho ta một thuật toán đơn giản để kiểm tra xem một phụ thuộc hàm có suy dẫn được từ tập F các phụ thuộc hàm theo hệ tiên đề hay không theo thuật toán sau:
- f: XY - Tính X+
- Nếu YX thì f suy dẫn đƣợc từ F
- Nếu Y X thì f không suy dẫn đƣợc từ F
Định lý: Thuật toán tìm bao đóng là đúng đắn
Chứng minh:
Giả sử i là một số nào đó sao cho X(i) = X(i+1) ta cần chứng minh rằng X+= X(i) (*), để chứng minh hai tập này bằng nhau ta sẽ chứng minh
Chứng minh (1)
Tổng quát k ( k N+) X(k) X+, ta sẽ chứng minh bằng phƣơng pháp quy nạp Khi k=0 thì lúc đó X(k)
= X(0)=X X+
nên đúng
X(i) X+ (1) X+ X(i) (2)
Giả sử đã đúng đến bớc k ( k>0) mà X(k) X+, ta cần chứng minh X(k+1) X+ Theo thuật toán thì X(k+1) =X(k) Z(k)
Với Z(k) = Yj (I) Nhận xét do X(k) X+ , nên ta chỉ cần chứng minh Z(k) X+ là đủ. Từ (I) ta có : Xj Yj X(k) Xjvì Xj X(k) (phản xạ)
X+ X(k) vì X(k) X+ (theo giả thiết quy nạp) XX+ ( tính chất của bao đóng)
Suy ra XYJ YJ X+ suy ra Z(k) X+ suy ra (1) đƣợc chứng minh Chứng minh (2)
Ta cần chứng minh X+ X(i) nếu giả thiết X(i+1) = X(i) Lấy AX+ ta cần chứng minh A X(i)
Thật vậy do AX+
nên XA F+ (1) do X X(i)
nên theo tính chất phản xạ ta có X(i) X (2) Từ (1) và (2) theo tính chất bắc cầu suy ra X(i) A (3)
Từ (3) suy ra A X(i+1) theo giả thiết thì X(i+1)= X(i) nên A X(i) Vậy lấy AX+ thì A X(i) vậy X+ X(i)
Ví dụ 2:
Cho tập thuộc tính U=ABCDEGH
Cho tập phụ thuộc hàm F={ABCD, ACEBG, BCD AE, CH DG} f=BCDH AG, hỏi rằng F├ f hay không, hay f F+?
Giải:
Cách 1: dùng các luật của hệ tiên đề chứng minh
BCDH BCD (1) (tính chất phản xạ) BCDAE (gt) (2)
BCDACE (gia tăng) (3) ACE A (phản xạ) (4)
Suy ra BCDH A theo tính chất bắc cầu (5) ACE BG (6) giả thiết
BGG (7) phản xạ
Suy ra ACE G (8) bắc cầu Suy ra BCDH G (9) bắc cầu
Từ (5) và (9) theo luật cộng tính (luật ghép) Suy ra BCDH AG F+ (đpcm) Cách 2: dùng tính chất số 6 của bao đóng: Xj Yj F (1) XjX(i) (2) YJ X(i) (3)
Tính (BCDH)+ = U chứa AG, suy ra điều phải chứng minh Nhắc lại:
- F╞ f (suy dẫn theo quan hệ) khi và chỉ khi R, nếu R(F) thì R(f)
- F├ f (suy dẫn theo hệ tiên đề) khi và chỉ khi f nhận đƣợc từ F sau một số hữu hạn lần áp dụng hệ tiên đề Amstrong.