/// <summary>
 /// 对当前候选集中的项集求support counting
 /// </summary>
 /// <param name="candidate">候选项集</param>
 /// <param name="depth">当前的候选项集的项的个数</param>
 /// <returns>返回support counting大于等于minsup的项集</returns>
 static Candidates<int> DoSupportCounting(Candidates<int> candidate, int depth)
 {
     //建立hash树
     HashTree<int> tree = new HashTree<int>(HashCode, 0, 2, depth, NodePrint);
     foreach (var tmp in candidate.ItemSets)
     {
         tree.AddNode(tmp);
     }
     //计算候选集中的support counting
     foreach (var tmp in transactions)
     {
         tree.ClearTag(tree.Root);
         tree.SupportCounting(tmp, tree.Root, -1);
     }
     //将support counting大于minsup的加入频繁项的集合
     Candidates<int> tmpCandi = new Candidates<int>();
     tree.ClearTag(tree.Root);
     TreeNode<int> node = tree.GetLeaves(tree.Root);
     while (node != null)
     {
         foreach (var d in node.list)
         {
             if (d.value >= minsup * transactions.Count()) tmpCandi.AddCandidate(d);
         }
         node = tree.GetLeaves(tree.Root);
     }
     return SortInTrie(tmpCandi);
 }