public CNode FullCopyMe() { var newNode = new CNode(); foreach (var item in ElementIDs) { newNode.ElementIDs.Add(item); } newNode.Support = Support; return(newNode); }
private bool CalculateNextStep(float minSupport) { var tempList = new List <CNode>(); if (CNodes.First().ElementIDs.Count == 1) { for (var i = 0; i < CNodes.Count; i++) { for (var k = i + 1; k < CNodes.Count; k++) { var newNode = new CNode(CNodes[i].ElementIDs[0]); newNode.AddElement(CNodes[k].ElementIDs[0]); newNode.CalculateSupport(Data.Rows); tempList.Add(newNode); } } } else { foreach (var groups in CNodes.GroupByElements(CNodes.First().ElementIDs.Count - 1)) { var groupsCount = groups.Count(); for (var i = 0; i < groupsCount - 1; i++) { for (var k = i + 1; k < groupsCount; k++) { if (k == groupsCount) { break; } var newNode = groups.ElementAt(i).FullCopyMe(); newNode.AddElement(groups.ElementAt(k).ElementIDs.Last()); newNode.CalculateSupport(Data.Rows); if (newNode.Support >= minSupport) { tempList.Add(newNode); } } } } } if (tempList.Count >= 1) { //this.CNodes = CNode.ClearSame(tempList);// => this action deletes last cNode this.CNodes = tempList; return(true); } return(false); }
private static List <AssociationRule> GetRules(CNode node, List <List <CNode> > eachLevelOfCNodes) { var rules = new List <AssociationRule>(); var subsets = SubSetsOf <int>(node.ElementIDs).OrderBy(x => x.Count()).ToList(); for (int i = 1; i < (subsets.Count / 2); i++) { var nodeA = new CNode(subsets[i].ToList()); var nodeB = new CNode(subsets[subsets.Count - i - 1].ToList()); var aFound = eachLevelOfCNodes[nodeA.ElementIDs.Count - 1].FirstOrDefault(x => x.ElementIDs.OrderBy(t => t).SequenceEqual(nodeA.ElementIDs.OrderBy(t => t))); var bFound = eachLevelOfCNodes[nodeB.ElementIDs.Count - 1].FirstOrDefault(x => x.ElementIDs.OrderBy(t => t).SequenceEqual(nodeB.ElementIDs.OrderBy(t => t))); if (aFound != null && bFound != null) { rules.Add(new AssociationRule(node, aFound, bFound).Calculate()); rules.Add(new AssociationRule(node, bFound, aFound).Calculate()); } } return(rules); }
public AssociationRule(CNode nodeAb, CNode nodeA, CNode nodeB) { NodeAB = nodeAb; NodeA = nodeA; NodeB = nodeB; }