public static AttributeList ComputeClosure( AttributeList attr, List <FunctionalDependency> fdList) { var size = 0; var result = new AttributeList(attr); do { size = result.Count; foreach (var fd in fdList) { if (result.Contains(fd.LeftHandSide)) { result.Add(fd.RightHandSide); } } } while (size != result.Count); return(result); }
public static List <AttributeList> GetCombinations(AttributeList list) { var result = new List <AttributeList>(); var count = (int)Math.Pow(2, list.Count); for (var i = 1; i <= count - 1; i++) { string str = Convert.ToString(i, 2).PadLeft(list.Count, '0'); var combi = new AttributeList(); for (var j = 0; j < str.Length; j++) { if (str[j] == '1') { combi.Add(list[j]); } } result.Add(combi); } return(result); }