如何求最小依赖集?

来源:百度知道 编辑:UC知道 时间:2024/09/25 12:21:20
在百度里看到这样一道题:
R(U, F),U=ABCDEF, F={AD→E, AC→E, BC→F, BCD→AF, BD→A, AB→F, A→C}求最小函数依赖集
答案是:
分解右部为属性组的函数依赖,得
F={AD→E,AC→E,BC→F,BCD→A,BCD→F,BD→A,AB→F,A→C}
对于AD→E,∵(AD)的闭包=ADCE, 又∵E不属于ACDE
∴AD→E 冗余
对于AC→E,∵(AC)的闭包=AC,又∵E不属于AC,∴AC→E不冗余
对于BC→F,∵(BC)的闭包=BC,又∵F不属于BC,∴BC→F 不冗余
对于BCD→A,∵(BCD)的闭包=ABCDEF,又∵A不属于ABCDEF ∴BCD→A 冗余
对于BCD→F,∵(BCD)的闭包=ABCDEF,又∵F不属于ABCDEF ∴BCD→F 冗余
对于BD→A,∵(BD)的闭包=BD,又∵A不属于BD,∴BD→A 不冗余
对于AB→F,∵(AB)的闭包=ABCDEF,又∵F属于ABCDEF ∵AB→F 冗余
对于A→C,∵A的闭包=A,又∵C不属于A,∴A→C 不冗余
∴F的最小函数依赖集为{AC→E,BC→F,BD→A,A→C}
谁能帮忙解释一下?我有些看不懂,什么叫闭包?怎么知道冗余不冗余?谢谢!!我比较笨,呵呵!!

这个题 应该是:
F={AD→E,AC→E,BC→F,BCD→A,BCD→F,BD→A,AB→F,A→C}
对于AD→E,∵(AD)的闭包=ADCE, 又∵ACDE 包含E
∴AD→E 冗余
对于AC→E,∵(AC)的闭包=AC,又∵AC不包含E,∴AC→E不冗余
对于BC→F,∵(BC)的闭包=BC,又∵BC不包含F,∴BC→F 不冗余
对于BCD→A,∵(BCD)的闭包=ABCDEF,又∵ABCDEF包含A ∴BCD→A 冗余
对于BCD→F,∵(BCD)的闭包=ABCDEF,又∵ABCDEF包含F ∴BCD→F 冗余
对于BD→A,∵(BD)的闭包=BD,又∵BD不包含A,∴BD→A 不冗余
对于AB→F,∵(AB)的闭包=ABCDEF,又∵ABCDEF包含F ∵AB→F 冗余
对于A→C,∵A的闭包=A,又∵A不包含C,∴A→C 不冗余
∴F的最小函数依赖集为{AC→E,BC→F,BD→A,A→C}

例:
对于AD→E,∵(AD)的闭包=ADCE, 又∵E不属于ACDE
∴AD→E 冗余

闭包是指AD在R中的其它关系,有没有AD的子集函数依赖,依次找出来。
AD所包含的依赖关系有可能的组合是A,D,AD
在R中找出,并展开,
在R中能找到的关系是:A→C,没有找到D,AD所被依赖的关系。
所以AD'+的闭包:ADC。
继续找ADC->E的闭包,找A,D,C,AD,AC,DC ,得到AC->E
所以ADC'+的闭包为ADCE,
再继续分解找ADCE'+ ,得于ADCE.
所以最终的闭包为ADCE, 所包含E ,所以说AD->E是多余的。

其它的R的关系 可以按此方法判断。