鉴于以下功能依赖性,我将如何计算最小覆盖率:
A -> B, ABCD -> E, EF -> GH, ACDF -> EG
在讲义中,它给出了最小覆盖的推导,但我不明白。
例如,摆脱 ACDF - > ë:
A -> B => AACD -> BACD -> E => ACD -> E => ACDF -> E
然后他们说,同样我们不保留 ACDF - > ģ
然后我理解 ABCD - > E 推断为 ACD - > E 因为 A - > B ,但我不明白如何达到这一目标的正式过程。
所以我的问题是,是否有人可以解释如何为集合功能依赖关系生成最小覆盖?
答案 0 :(得分:70)
要获得最小限度,您必须完成两个步骤。为了演示,我将首先将依赖项拆分为多个(右侧只有一个属性)以使其更加干净:
A -> B
ABCD -> E
EF -> G
EF -> H
ACDF -> E
ACDF -> G
以下步骤必须按此顺序(#1然后#2)完成,否则您可能会得到错误的结果。
1)摆脱冗余属性(减少左侧):
取每个左侧并尝试一次删除一个属性,然后尝试推断右侧(现在只是所有依赖项的一个属性)。如果你成功,你可以从左侧删除该字母,然后继续。请注意,可能有多个正确的结果,这取决于您进行缩减的顺序。
您会发现,您可以从依赖项B
中删除ABCD -> E
,因为ACD -> ABCD
(使用第一个dep。)和ABCD -> E
。你可以使用完整的dep。你目前在减少,一开始有时会让人感到困惑,但如果你考虑一下,你就会明白这一点。
同样,您可以从F
删除ACDF -> E
,因为ACD -> ABCD -> ABCDE -> E
(您显然可以从信件中推断出一个字母)。完成此步骤后,您将获得:
A -> B
ACD -> E
EF -> G
EF -> H
ACD -> E
ACDF -> G
这些规则仍然表示与原始规则相同的依赖关系。请注意,现在我们有一个重复的规则ACD -> E
。如果你将整个事物视为一组(在数学意义上),那么当然你不能在一组中有两次相同的元素。现在,我只是在这里离开它两次,因为无论如何下一步都将摆脱它。
2)摆脱多余的依赖
现在,对于每个规则,尝试将其删除,并查看是否仅使用其他规则推断出相同的规则。在这一步中,你当然不能使用dep。您目前正在尝试删除(您可以在上一步中删除)。
如果您选择第一条规则A -> B
的左侧,暂时隐藏它,您会发现无法单独从A
推断出任何内容。因此,这条规则并不多余。为所有其他人做同样的事情。您会发现,您可以(显然)删除其中一个重复的规则ACD -> E
,但严格来说,您也可以使用该算法。仅隐藏两个相同规则中的一个,然后取左侧(ACD
),并使用另一个推断右侧。因此,您可以删除ACD -> E
(当然只有一次)。
您还会看到可以删除ACDF -> G
,因为ACDF -> ACDFE -> G
。结果是:
A -> B
EF -> G
EF -> H
ACD -> E
原始集合的最小封面。
答案 1 :(得分:-3)
据我所知,在上述功能性最小依赖性ACDF中 - > G也应该被包括在内,因为当你关闭左边的每个字母和它们的组合时,没有一个产生G而不包括F
所以它如下:
(A - > B,EF - > G,EF - > H,ACD - > E,ACDF - > G)