Thuật toán tìm bao đóng của một tập thuộc tính

Một phần của tài liệu Đề cương bài giảng học phần: Cơ sở dữ liệu (2014 - 2015) (Trang 111 - 114)

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 | XA  F+ }

Vấn đề đặt ra X+

F =X+=?

Thuật toán

Input  = (U,F), XU 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) ( i0) 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), XU 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 (LX+) and (LX+) Then X+:= X+  R; End; Until (X+=Xold); Lj Rj F (1) LjX(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 XYF+ khi và chỉ khi YX+, 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: XY - Tính X+

- Nếu YX 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) XX+ ( tính chất của bao đóng)

Suy ra XYJ  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 AX+ ta cần chứng minh A X(i)

Thật vậy do AX+

nên XA  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 AX+ 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={ABCD, ACEBG, 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ạ) BCDAE (gt) (2)

BCDACE (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

BGG (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) XjX(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.

Một phần của tài liệu Đề cương bài giảng học phần: Cơ sở dữ liệu (2014 - 2015) (Trang 111 - 114)

Tải bản đầy đủ (PDF)

(144 trang)