求最小函式依賴集的方法

2021-05-24 03:11:21 字數 2480 閱讀 9137

求最小函式依賴集分三步:

1.將f中的所有依賴右邊化為單一元素

此題fd=;已經滿足

2.去掉f中的所有依賴左邊的冗餘屬性.

作法是屬性中去掉其中的乙個,看看是否依然可以推導

此題:abd->e,去掉a,則(bd)+不含e,故不能去掉,同理b,d都不是冗餘屬性

ab->g,也沒有

cj->i,因為c+=其中包含i所以j是冗餘的.cj->i將成為c->i

f=;3.去掉f中所有冗餘依賴關係.

做法為從f中去掉某關係,如去掉(x->y),然後在f中求x+,如果y在x+中,則表明x->是多餘的.需要去掉.

此題如果f去掉abd->e,f將等於,而(abd)+=,其中不包含e.所有不是多餘的.

同理(ab)+=也不包含g,故不是多餘的.

b+=不多餘,c+=不多餘

c->i,g->h多不能去掉.

所以所求最小函式依賴集為 f=;

最小函式依賴集

定義:如果函式依賴集f滿足下列條件,則稱f為最小函式依賴集或最小覆蓋。

① f中的任何乙個函式依賴的右部僅含有乙個屬性;

② f中不存在這樣乙個函式依賴x→a,使得f與f-等價;

③ f中不存在這樣乙個函式依賴x→a,x有真子集z使得f-∪與f等價。

演算法:計算最小函式依賴集。

輸入 乙個函式依賴集

輸出 f的乙個等價的最小函式依賴集g

步驟:① 用分解的法則,使f中的任何乙個函式依賴的右部僅含有乙個屬性;

② 去掉多餘的函式依賴:從第乙個函式依賴x→y開始將其從f中去掉,然後在剩下的函式依賴中求x的閉包x+,看x+是否包含y,若是,則去掉x→y;否則不能去掉,依次做下去。直到找不到冗餘的函式依賴;

③ 去掉各依賴左部多餘的屬性。乙個乙個地檢查函式依賴左部非單個屬性的依賴。例如xy→a,若要判y為多餘的,則以x→a代替xy→a是否等價?若a屬於(x)+,則y是多餘屬性,可以去掉。

舉例:已知關係模式r,u=,f=,求f的最小函式依賴集。

解1:利用演算法求解,使得其滿足三個條件

① 利用分解規則,將所有的函式依賴變成右邊都是單個屬性的函式依賴,得f為:f=

② 去掉f中多餘的函式依賴

a.設ab→c為冗餘的函式依賴,則去掉ab→c,得:f1=

計算(ab)f1+:設x(0)=ab

計算x(1):掃瞄f1中各個函式依賴,找到左部為ab或ab子集的函式依賴,因為找不到這樣的函式依賴。故有x(1)=x(0)=ab,演算法終止。

(ab)f1+= ab不包含c,故ab→c不是冗餘的函式依賴,不能從f1中去掉。

b.設cg→b為冗餘的函式依賴,則去掉cg→b,得:f2=

計算(cg)f2+:設x(0)=cg

計算x(1):掃瞄f2中的各個函式依賴,找到左部為cg或cg子集的函式依賴,得到乙個c→a函式依賴。故有x(1)=x(0)∪a=cga=acg。

計算x(2):掃瞄f2中的各個函式依賴,找到左部為acg或acg子集的函式依賴,得到乙個cg→d函式依賴。故有x(2)=x(1)∪d=acdg。

計算x(3):掃瞄f2中的各個函式依賴,找到左部為acdg或acdg子集的函式依賴,得到兩個acd→b和d→e函式依賴。故有x(3)=x(2)∪be=abcdeg,因為x(3)=u,演算法終止。

(cg)f2+=abcdeg包含b,故cg→b是冗餘的函式依賴,從f2中去掉。

c.設cg→d為冗餘的函式依賴,則去掉cg→d,得:f3=

計算(cg)f3+:設x(0)=cg

計算x(1):掃瞄f3中的各個函式依賴,找到左部為cg或cg子集的函式依賴,得到乙個c→a函式依賴。故有x(1)=x(0)∪a=cga=acg。

計算x(2):掃瞄f3中的各個函式依賴,找到左部為acg或acg子集的函式依賴,因為找不到這樣的函式依賴。故有x(2)=x(1),演算法終止。(cg)f3+=acg。

(cg)f3+=acg不包含d,故cg→d不是冗餘的函式依賴,不能從f3中去掉。

d.設ce→a為冗餘的函式依賴,則去掉ce→a,得:f4=

計算(cg)f4+:設x(0)=ce

計算x(1):掃瞄f4中的各個函式依賴,找到左部為ce或ce子集的函式依賴,得到乙個c→a函式依賴。故有x(1)=x(0)∪a=cea=ace。

計算x(2):掃瞄f4中的各個函式依賴,找到左部為ace或ace子集的函式依賴,得到乙個ce→g函式依賴。故有x(2)=x(1)∪g=aceg。

計算x(3):掃瞄f4中的各個函式依賴,找到左部為aceg或aceg子集的函式依賴,得到乙個cg→d函式依賴。故有x(3)=x(2)∪d=acdeg。

計算x(4):掃瞄f4中的各個函式依賴,找到左部為acdeg或acdeg子集的函式依賴,得到乙個acd→b函式依賴。故有x(4)=x(3)∪b=abcdeg。因為x(4)=u,演算法終止。

(ce)f4+=abcdeg包含a,故ce→a是冗餘的函式依賴,從f4中去掉。

③ 去掉f4中各函式依賴左邊多餘的屬性(只檢查左部不是單個屬性的函式依賴)由於c→a,函式依賴acd→b中的屬性a是多餘的,去掉a得cd→b。

故最小函式依賴集為:f=

求最小函式依賴集

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

求最小依賴集

這個比較煩,要寫好多好多好多qaq。例 u a,b,c,d,e,g f 求f最小依賴集。解 第一步 右邊單一化。f1 第二步 逐個求,在去掉它的f中求閉包,如果包含右邊屬性,則表示這個函式依賴要去掉。bg c 求 bg bcdeg,包含右邊屬性c,所以去掉。bd e bd bd,不包含右邊e,所以不...

求最小函式依賴

第一步 對f中的函式依賴運用分解原則來建立乙個等價函式依賴集h,該集合中每乙個函式依賴的右部是單個屬性 第一步之後的結果h 第二步 考察每乙個函式依賴是否是必須的,去除非必要的函式依賴 1 考察bc a,去掉函式依賴集會得到新的函式依賴集j 則 bc j bcdegh,不包含a,因此bc a不能去掉...