32

鉴于以下功能依赖关系,我将如何计算最小覆盖:

A -> B, ABCD -> E, EF -> GH, ACDF -> EG

在讲义中,它给出了最小封面的推导,但我不明白。

例如摆脱ACDF -> E

A -> B => AACD -> BACD -> E => ACD -> E => ACDF -> E

然后他们说,同样我们不保留ACDF -> G

然后我明白ABCD -> E被推导出为ACD -> E因为A -> B,但我不明白如何实现这一点的正式过程。

所以我的问题是,谁能解释如何为一组功能依赖项生成最小覆盖?

4

2 回答 2

87

要获得最小的封面,您必须执行两个步骤。为了演示,我将首先将依赖项拆分为多个(右侧只有一个属性)以使其更干净:

A -> B
ABCD -> E
EF -> G
EF -> H
ACDF -> E
ACDF -> G

以下步骤必须按此顺序(#1 然后 #2)完成,否则会得到错误的结果。

1)摆脱冗余属性(减少左侧):

取每个左侧并尝试一次删除每个属性一个,然后尝试推断右侧(现在对于所有依赖项只有一个属性)。如果成功,您可以从左侧删除该字母,然后继续。请注意,可能有不止一个正确的结果,这取决于您进行归约的顺序。

您会发现,您可以B从依赖项中删除ABCD -> E,因为ACD -> ABCD(使用第一个 dep.)和 from ABCD -> E。您可以使用完整的 dep。你目前正在减少,起初这有时会令人困惑,但如果你仔细想想,就会清楚你可以做到这一点。

同样,您可以从 , 中删除FACDF -> 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

这是原始集合的最小封面。

于 2012-04-23T16:33:55.243 回答
-3

根据我的说法,在上述功能最小依赖关系中,ACDF -> G 也应该包括在内,因为当你关闭左侧的每个字母及其组合时,它们都不会在不包括 F 的情况下产生 G

所以它会是这样的:

(A -> B,EF -> G,EF -> H,ACD -> E,ACDF -> G)

于 2015-05-01T07:39:32.097 回答