闭包算法

来源:互联网 发布:mfp126a 有网络口吗 编辑:程序博客网 时间:2024/06/02 03:30

问题描述

根据求属性集闭包的算法,用你熟悉的语言编写程序,要求如下:
1. 由用户输入函数依赖,当用户输入End时,表示所有依赖都输入完毕。(即函数依赖是由用户自己定的,程序中不能假定某个具体的依赖)
2. 函数依赖的形式是 AB->C, A->BE 这样的形式,为了简单起见,我们假定所有的属性都是用英文的大写字母表示,由A到Z。(提示,你可以让用户先输入依赖左边的属性,然后再输入依赖右边的属性,用来表示 A->B 这样的形式)
3. 用户输入完毕所有的依赖后,显示“请输入属性集求闭包”的提示,当用户输入1个或者多个属性时,求出对应的闭包。(如,用户输入A,则显示A+的值, 用户输入AB则求出AB+的值。显示完毕后,再次显示“请输入属性集求闭包”,让用户继续输入属性,直到用户输入END后程序结束。
4. 在上面3步骤用户选择END退出后,根据求函数依赖闭包的算法,显示用户输入的函数依赖的闭包F+。

解题思路

求属性集闭包

  • 假设用户输入属性AB,且用户之前输入了n个函数依赖。从第一个函数依赖开始,如果依赖左边的属性属于AB,那么将依赖右边的属性纳入到AB中,如此循环往复n2,便能得到AB+的值

求函数依赖的闭包

  • 假设有n个属性,则有2n种属性集的排列组合情况。每一种属性集都根据上题求出自己的闭包,假设闭包含有m个属性,则又有2m种情况。那么,最终的函数依赖的闭包的元素的个数为2m+n

源代码

原创粉丝点击