闭包就是由一个属性直接或间接推导出的所有属性的集合,例如: f={a->b,b->c,a->d,e->f} ,由a可直接得到b和d,间接得到c,则a的闭包就是{a,b,c,d}。
例:设关系R(A,B,C, D,E, G)有函数依赖集F={AB→C, BC→AD,D→E, CG→B},求AB的闭包。
解:首先从AB出发,令X={A,B},由于函数依赖AB→C左边的所有属性都在X中,所以可以把右边的C添加到X中,这时X={A, B,C},其次考虑函数依赖BC→AD,左边B,C均在X中,右边D不在X中,将其添加到X中,此时X={A,B,C,D}。
再考虑函数依赖D→E,同理可将E添加到X中,此时x={A,B,C,D,E}。上述方法再不能向X中添加属性,所以得到{A,B} +={A,B,C,D, E}。
扩展资料:使用闭包的注意点
1,由于闭包会使得函数中的变量都被保存在内存中,内存消耗很大,所以不能滥用闭包,否则会造成网页的性能问题,在IE中可能导致内存泄露。解决方法是,在退出函数之前,将不使用的局部变量全部删除。
2,闭包会在父函数外部,改变父函数内部变量的值。所以,如果你把父函数当作对象(object)使用,把闭包当作它的公用方法(Public Method),把内部变量当作它的私有属性(private value),这时一定要小心,不要随便改变父函数内部变量的值。
个人感觉画出NFA最直观易懂了。前一个正规式仅有一个状态(开始和接受状态同),后一个虽然是三个状态,但是其中一个是绕着a闭包的状态,一个是绕着b闭包的状态,而这两个状态又是绕着第三状态(既是开始状态又是接受状态)进行闭包,所以实际上可合并为一种状态,即是说这两个正规式对应于同一个NFA,所以相等是显然成立的。欢迎分享,转载请注明来源:内存溢出
评论列表(0条)