求最小函数依赖集

//新编数据库原理习题与解析 李春葆

例:求F={ABD→AC,C→BE,AD→BF,B→E}的最小函数依赖集Fm

注意:当在函数依赖已经改变的地方开始一个新步骤时,重写函数依赖集很重要,这样可以在下一步中方便引用。

第一步    对F中的函数依赖运用分解原则来创建一个等价函数依赖集H,该集合中每一个函数依赖的右部是单个属性:

H={①ABD→A,②ABD→C,③C→B,④C→E,⑤AD→B,⑥AD→F,⑦B→E}

第二步  考察每一个函数依赖是否是必须的,去除非必要的函数依赖

(1)      ABD→A是平凡的函数依赖(就是A是ABD的子集,所以他是平凡的依赖),所以显然是非必要的函数依赖,因此去除。保留在H中的函数依赖是H={②ABD→C,③C→B,④C→E,⑤AD→B,⑥AD→F,⑦B→E}

(2)      考察ABD→C,去掉此函数依赖将会得到新的函数依赖集J={③C→B,④C→E,⑤AD→B,⑥AD→F,⑦B→E}。如果ABD→C是非必要的,则(ABD)J+=ABDFE,不包含C,因此ABD→C是必要的函数依赖,不能去掉。

H={②ABD→C,③C→B,④C→E,⑤AD→B,⑥AD→F,⑦B→E}

(3)   考察C→B,J={②ABD→C,④C→E,⑤AD→B,⑥AD→F,⑦B→E}(C)J+=CE,不包含B,因此C→B是必要的函数依赖,保留在H中。

(4)   考察C→E,J={②ABD→C,③C→B,⑤AD→B,⑥AD→F,⑦B→E}(C)J+=CBE,包含E,因此是不必要的,去除后得到的函数依赖集为

  H={②ABD→C,③C→B,⑤AD→B,⑥AD→F,⑦B→E}

(5)       同理考察函数依赖⑤、⑥和⑦,最后得到的函数依赖集为H={②ABD→C,③C→B,⑤AD→B,⑥AD→F,⑦B→E}。为了第三步方便引用,我们进行重新编号:

H={①ABD→C,②C→B,③AD→B,④ AD→F,⑤ B→E}。

第三步    考察每一个左部为多个属性的函数依赖,看左部的每个属性是否是必须的,能否用更小的属性集替代原有的属性集。

  首先从函数依赖①ABD→C开始。

(1)      去除A?如果A可以去除,那么可得到新的函数依赖集J={①BD→C,②C→B,③AD→B,④ AD→F,⑤ B→E}。去掉A后BD在J上的闭包将比在H下函数决定更多的属性,如果(BD)J+=(BD)H+或者C∈(BD)H+,则说明去掉A得到的函数依赖集和原有的函数依赖集是等价的,可以用BD→C替换ABD→C。

(BD)H+=BDE,不包含C,所以A不能去掉。

(2)      去掉B?J={①AD→C,②C→B,③AD→B,④ AD→F,⑤ B→E} 。

(AD)J+=ADBC,包含了B,因此B→C是冗余的函数依赖,所以去除

(3)      去掉D?J={①A→C,②C→B,③AD→B,④ AD→F,⑤ B→E}。

因为H的函数依赖集在第三步发生了改变,因此我们需要回到第二步。

此时H={①AD→C,②C→B,③AD→B,④ AD→F,⑤ B→E}。

在进行第二步

其中考察到③,有(AD)J+=ADCB,包含B,因此AD→B是不必要的函数依赖,所以去除

最后

得到的函数依赖集为H={AD→C, C→B, AD→F, B→E}

原文地址:https://www.cnblogs.com/xianghaoran/p/12360831.html

时间: 2024-10-10 09:19:39

求最小函数依赖集的相关文章

数据库求闭包,求最小函数依赖集,求候选码,判断模式分解是否为无损连接,3NF,BCNF

1.说白话一点:闭包就是由一个属性直接或间接推导出的所有属性的集合. 例如:f={a->b,b->c,a->d,e->f}:由a可直接得到b和d,间接得到c,则a的闭包就是{a,b,c,d} 2. 候选码的求解理论和算法 对于给定的关系R(A1,A2,-An)和函数依赖集F,可将其属性分为4类: L类  仅出现在函数依赖左部的属性. R 类  仅出现在函数依赖右部的属性. N 类  在函数依赖左右两边均未出现的属性. LR类  在函数依赖左右两边均出现的属性. 定理:对于给定的关系

关系规范化之求最小函数依赖集(最小覆盖)

最小函数依赖集 一.等价和覆盖 定义:关系模式R<U,F>上的两个依赖集F和G,如果F+=G+,则称F和G是等价的,记做F≡G.若F≡G,则称G是F的一个覆盖,反之亦然.两个等价的函数依赖集在表达能力上是完全相同的. 二.最小函数依赖集 定义:如果函数依赖集F满足下列条件,则称F为最小函数依赖集或最小覆盖. ① F中的任何一个函数依赖的右部仅含有一个属性: ② F中不存在这样一个函数依赖X→A,使得F与F-{X→A}等价: ③ F中不存在这样一个函数依赖X→A,X有真子集Z使得F-{X→A}∪

函数依赖集闭包、属性集闭包和最小函数依赖集的求法。

函数依赖集的闭包 F:FD的集合称为函数依赖集. F闭包:由F中的所有FD可以推导出所有FD的集合,记为F+. 例1,对于关系模式R(ABC),F={A→B,B→C},求F+. 根据FD的定义,可推出F+={φ→φ,A→φ,A→A,A→B,A→C,A→AB,A→BC,A→ABC,…},共有43个FD.其中,φ表示空属性集. 属性集闭包 属性集闭包定义 :对F,F+中所有X→A的A的集合称为X的闭包,记为X+.可以理解为X+表示所有X可以决定的属性. 属性集闭包的算法: A+:将A置入A+.对每一

POJ 3401 Asteroids 求最小点覆盖集

把行和列都看做是点,小行星看成是边的话,那么这个显然就是求一个最小点覆盖集的问题. 最小点覆盖 == 最大匹配 #include <cstdio> #include <cstring> #include <cmath> #include <algorithm> #include <climits> #include <string> #include <iostream> #include <map> #inc

贪心法求树的最小支配集,最小点覆盖,最大独立集

定义: 最小支配集:对于图G = (V, E) 来说,最小支配集指的是从 V 中取尽量少的点组成一个集合, 使得 V 中剩余的点都与取出来的点有边相连.也就是说,设 V' 是图的一个支配集,则对于图中的任意一个顶点 u ,要么属于集合 V', 要么与 V' 中的顶点相邻. 在 V' 中除去任何元素后 V' 不再是支配集, 则支配集 V' 是极小支配集.称G 的所有支配集中顶点个数最少的支配集为最小支配集,最小支配集中的顶点个数称为支配数. 最小点覆盖:对于图G = (V, E) 来说,最小点覆盖

POJ3659 Cell Phone Network(树上最小支配集:树型DP)

题目求一棵树的最小支配数. 支配集,即把图的点分成两个集合,所有非支配集内的点都和支配集内的某一点相邻. 听说即使是二分图,最小支配集的求解也是还没多项式算法的.而树上求最小支配集树型DP就OK了. 树上的每个结点作为其子树的根可以有三个状态: 不属于支配集且还没被支配 不属于支配集但被其孩子支配 属于支配集 那么就是用dp[u][1\2\3]来表示动归的状态. 123转移该怎么转移就怎么转移..最后的结果就是min(dp[root][2],dp[root][3]). 要注意的是对于有些结点前2

POJ3659 Cell Phone Network【最小支配集】【贪心】

Cell Phone Network Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 5735Accepted: 2053 Description Farmer John has decided to give each of his cows a cell phone in hopes to encourage their social interaction. This, however, requires him to

树的最小支配集、最小点覆盖、最大独立集【模板】

最小支配集:指从所有顶点中取尽量少的点组成一个集合,使得剩下的所有点都与取出来的点有边相连.顶点个数最小的支配集被称为最小支配集.这里用贪心法来求. 1.以1号点深度优先搜索整棵树,求出每个点在DFS中的编号和每个点的父亲节点编号. 2.按DFS的反向序列检查,如果当前点既不属于支配集也不与支配集中的点相连,且它的父亲也不属于支配集,将其父亲点加入支配集,支配集个数加1. 3.标记当前结点.当前结点的父节点(属于支配集).当前结点的父节点的父节点(与支配集中的点相连). #include<ios

ACM/ICPC 之 机器调度-匈牙利算法解最小点覆盖集(DFS)(POJ1325)

//匈牙利算法-DFS //求最小点覆盖集 == 求最大匹配 //Time:0Ms Memory:208K #include<iostream> #include<cstring> #include<cstdio> #include<algorithm> using namespace std; #define MAX 105 #define INF 0x3f3f3f3f int n,m,k; int gp[MAX][MAX]; bool sx[MAX],s