最小函式依賴集的判斷

2022-10-08 16:36:19 字數 1532 閱讀 4182

1. 將f右側全部分解為只有乙個屬性;

2. 去掉冗餘項:從第乙個函式依賴x->y開始,假設將其從f中去掉,在剩下的函式依賴中求x的閉包,看y是屬於x的閉包中如果屬於,則去掉x->y;如果不屬於,則保留。依次掃瞄......

3. 去掉冗餘屬性:選取左邊屬性個數》1的所有依賴,假設xy->a。先將xy->a換成y->a,判斷a是否還屬於y的閉包如果屬於,則刪掉此x,否則保留。依次測試每個依賴的每個左邊屬性......

(如果3中改變了函式依賴f,則需要重新來一次2)

r=,f=,求最小函式依賴集

1. 化簡右側。f=。

2. 去掉冗餘項。

如果刪去abd->a,f=。abd+=,a包含在其中,因此刪掉。

如果刪去abd->c,f=。abd+=,c不包含在其中,不能刪除。

如果刪掉c->b,f=。c+=,b不包含在其中,不能刪除。

如果刪掉c->e,f=。c+=,e包含在其中,因此刪掉。

如果刪掉ad->b,f=。ad+=,b不包含在其中,不能刪除。

如果刪掉ad->f,f=。ad+=,f不包含在其中,不能刪除。

如果刪掉b->e, f=。b+=,e不包含在其中,不能刪除。

綜上:f=

3. 去掉冗餘屬性。

將abd->c去掉a,變成bd->c,bd+=,a不包含在其中,不能刪掉

將abd->c去掉b,變成ad->c,ad+=,b包含在其中,可以刪掉b

將abd->c去掉d,變成ab->c,ac+=,d不包含在其中,不能刪掉

因此abd->c化簡為ad->c

將ad->c去掉a,變成d->c,d+=,a不包含在其中,不能刪掉

將ad->c去掉d,變成a->c,a+=,d不包含在其中,不能刪掉

因此ad->c不變

將ad->b去掉a,變成d->b,d+=,a不包含在其中,不能刪除

將ad->b去掉d,變成a->b,a+=,d不包含在其中,不能刪除

因此ad->b不變

將ad->f去掉a,變成d->f,d+=,a不包含在其中,不能刪除

將ad->f去掉d,變成a->f,a+=,d不包含在其中,不能刪除

因此ad->f不變

此時f=

4. 重複2

將ad->c刪掉,f=,ad+=,c不包含在其中,不能刪

將c->b刪掉,f=,c+=,b不包含在其中,不能刪

將ad->b刪掉,f=,ad+=,c包含在其中,刪ad->b

將ad->f刪掉,f=,ad+=,f不包含其中,不能刪

將b->e刪掉,f=,b+=,e不包含在其中,不能刪除

綜上:fm=

求最小函式依賴集

用分解的法則,使f中的任何乙個函式依賴的右部僅含有乙個屬性 去掉多餘的函式依賴 從第乙個函式依賴x y開始將其從f中去掉,然後在剩下的函式依賴中求x的閉包x y1 閉包就是由乙個屬性直接或間接推導出的所有屬性的集合,例如 f 由a可直接得到b和d,間接得到c,則a的閉包就是 看x 是否包含y,若是,...

求最小函式依賴集的方法

求最小函式依賴集分三步 1.將f中的所有依賴右邊化為單一元素 此題fd 已經滿足 2.去掉f中的所有依賴左邊的冗餘屬性.作法是屬性中去掉其中的乙個,看看是否依然可以推導 此題 abd e,去掉a,則 bd 不含e,故不能去掉,同理b,d都不是冗餘屬性 ab g,也沒有 cj i,因為c 其中包含i所...

最小函式依賴集的求解過程

先拆右邊,假如依賴集f中的右邊項包含不止乙個屬性,那麼將這些項都拆為單個項。例如a bc,拆分為a b和a c 去除冗餘依賴項,例如a c和ab c,那麼就要去除ab c這個冗餘項 拆左邊,假如依賴集f中的左邊項包含不止乙個屬性,那麼將這些項中的第乙個屬性先遮住,看剩下的屬性能否推出結果,不行的話就...