闭包及最小依赖集解法

闭包求解算法

对R<U , F>,求属性X(X ⊆ U)关于U上的函数依赖集F的闭包XF+

输入:X,F
输出:XF+
步骤:

  1. 令X0 =X,i =0;
  2. 求MID,这里的 MID ={A| (∃V) (∃W) (V→W ∈ F ⋀ V ⊆Xi ⋀ A∈W ) }; 也就是说先令MID’ 为空集,对于F中的每一个函数依赖Y→Z,满足属性集Y⊆Xi ,那么MID’ =MID’ ∩ Z;最终的MID’ 即为所求的MID
  3. Xi+1 =MID∪Xi
  4. 判断Xi+1 =Xi 是否相等
  5. 若相等或Xi+1 = U,则Xi+1 就是XF+ ,算法终止。
  6. 若不相等,则令i = i +1,返回第(2)步。

最小依赖集解法

一、定义

最小函数依赖集也称为极小函数依赖集、最小覆盖;如果函数依赖集 F 满足下列条件,则称 F 为一个最小依赖集。

  • F 中任意函数依赖的右部仅含有一个属性
  • F 中不存在这样的函数依赖X→A,使得 F 与 F - {X→A}等价,即 F 中的函数依赖均不能由 F 中其他函数依赖导出
  • F 中不存在这样的函数依赖X→A,X有真子集 Z 使得 F - {X→A} ∪ {Z→A}与 F 等价,即 F中各函数依赖左部均为最小属性集(不存在冗余属性)

在这里插入图片描述

在这里插入图片描述

例题如下:

U=(A,B,C,D,E,G) F={BG->C,BD->E,DG->C,ADG->BC,AG->B,B->D},求F最小依赖集。

解:

第一步:右边单一化。

F1={BG->C,BD->E,DG->C,ADG->B,ADG->C,AG->B,B->D}

第二步:逐个求,在去掉它的F中求闭包,如果包含右边属性,则表示这个函数依赖要去掉。

BG->C:求(BG)+=BCDEG,包含右边属性C,所以去掉。

BD->E:(BD)+=BD,不包含右边E,所以不用去掉。

DG->C:(DG)+=DG,也不用去掉。

ADG->B:(ADG)+=U,包含B,所以去掉。

ADG->C:(ADG)+包含C,去掉。(在这里,求闭包的时候,不能再用前面去掉的函数依赖了,所以如果从后往前判断,可能不用去掉ADG->B,所以最小依赖集不唯一,写出一个即可。)

AG->B:(AG)+=AG,不用去掉。

B->D:(B)+=B,不用去掉。

所以F2={BD->E,DG->C,AG->B,B->D}

第三步:对左边属性单一化,根据上图判断是否可以替代。

BD->E:

  • B->E,求(B)+=BDE,包含E,所以可以替代。
  • D->E,求(D)+=D,不包含E,所以不可以替代。

所以用B->E代替BD->E。

DG->C:

  • D->C,(D)+=D,不包含C,所以不可以替代。
  • G->C,(G)+=G,不包含C,所以不可以替代。

AG->B:

  • A->B,(A)+=A,不包含B,所以不可以替代。
  • G->B,(G)+=G,不包含B,所以不可以替代。

所以Fmin={B->E,DG->C,AG->B,B->D}。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值