protected virtual Itemset[] PruneCandidatesByAprioriSlim(UInt32[][] candidatesItemset, Itemset[] frequentItemset) { var frequentCandidates = new List <Itemset>(); var frequent = new HashSet <UInt32[]>(frequentItemset.Select(i => i.Items), new ItemsEqualityComparer()); for (int i = 0; i < candidatesItemset.Length; i++) { bool hasAllSubItemsetFrequent = true; // TODO: Lazy generating, we can stop generating subitemset if we know that an one is not frequent. List <UInt32[]> subItemsets = ItemsetHelper.GenerateOneLevelSubItemsets(candidatesItemset[i]); for (int j = 0; j < subItemsets.Count; j++) { if (frequent.Contains(subItemsets[j])) { continue; } hasAllSubItemsetFrequent = false; break; } if (hasAllSubItemsetFrequent) { frequentCandidates.Add(new Itemset(candidatesItemset[i])); } } return(frequentCandidates.ToArray()); }
public void Can_Generate_SubItemset_From_2_Length_Itemset() { Itemset itemset = new Itemset(new uint[] { 0, 1 }); Itemset[] result = ItemsetHelper.GenerateOneLevelSubItemsets(itemset).ToArray(); Assert.AreEqual(2, result.Length); Assert.AreEqual(1, result[0].Length); Assert.AreEqual(1, result[1].Length); Assert.AreEqual(result[0][0], 0); Assert.AreEqual(result[1][0], 1); }
public void Can_Generate_SubItemset_From_3_Length_Itemset() { Itemset itemset = Itemset.Create(0, 1, 2); Itemset[] result = ItemsetHelper.GenerateOneLevelSubItemsets(itemset).ToArray(); Assert.AreEqual(3, result.Length); Assert.AreEqual(2, result[0].Length); Assert.AreEqual(2, result[1].Length); Assert.AreEqual(2, result[2].Length); Assert.AreEqual(result[0][0], 0); Assert.AreEqual(result[0][1], 1); Assert.AreEqual(result[1][0], 0); Assert.AreEqual(result[1][1], 2); Assert.AreEqual(result[2][0], 1); Assert.AreEqual(result[2][1], 2); }