2014-11-21 26 views
-1

我有一个类'itemset'的列表,我称之为频繁的项目集,其中包含数据库中的所有频繁项目集和另一个整数列表,我称之为'index_of_sensitiveItemsets',其中包含敏感的indecies频繁项目集在频繁项目集列表中,并由用户定义。在c#中的列表剩余indecies#

这样

List<Itemset> frequentItemsets = get_frequentItemsets_fromDB(); 
List<int> index_of_sensitiveItemsets = get_senFrqItemsetIndex_from_user(); 

一个解决这个问题是这样的:

 for (int i = 0; i < allfrequentItemsets.Count - 1; i++) 
        { 
         if (! index_of_sensitiveItemsets.Contains(i)) 
          index_of_nonsensitiveItemsets.Add(i); 
        } 

但我询问是否有更好的方式,得到的将indecies(指数的复数)频繁项集中不在index_of_sensitiveItemsets列表中的其余元素。

类Itemset从spmf java库加载。它有两个构件:整数和整数的支持阵列和像这样的一些方法:

public class Itemset : AbstractOrderedItemset 
    { 
     public int[] itemset; 
     public int support; 

     public Itemset(); 
     public Itemset(int item); 
     public Itemset(int[] items); 

     public virtual Itemset cloneItemSetMinusAnItemset(Itemset itemsetToNotKeep); 
     public virtual Itemset cloneItemSetMinusOneItem(Integer itemToRemove); 
     public override Integer get(int position); 
     public override int getAbsoluteSupport(); 
     public virtual int[] getItems(); 
     public virtual void increaseTransactionCount(); 
     public virtual Itemset intersection(Itemset itemset2); 
     public virtual void setAbsoluteSupport(Integer support); 
     public override int size(); 
    } 

感谢很多预先

+1

看起来像你需要显示更多的代码是相对于你的问题2个独立的方法看起来像什么? “itemset”类的结构看起来像什么??? – MethodMan 2014-11-21 19:38:15

+0

而不是存储敏感项目集的索引,我会建议存储项目集的唯一标识符。这样,如果频繁项目集的顺序发生变化,您的代码将更加健壮并且不容易中断。这也可以让你很容易地编写一个Linq查询来完成这个任务。 – SquidScareMe 2014-11-21 20:38:31

+1

@SquidScareMe - 好点 - 我只是假设索引是关键(如数据库标识列)。好的建议。 – PhillipH 2014-11-21 20:42:58

回答

0

这取决于sensitiveItemSets对frequentItemSets的比率。如果frequencyItemSets的50%以上为sensitiveItemSets,则更有意义的方法是颠倒问题并将所有的frequentItemSets复制到nonsensitiveItemSets,然后删除所有不存在于sensitiveItemSets中的那些。

无论哪种方式,它不太可能有一个比你写的更好的执行代码构造。是的,您可以使用一些花哨的Linq以较少的代码行来完成此任务,但是您的代码很明确且易于理解。我会坚持你的所得,除非你可以提供一些进一步的信息,表明它在某种程度上表现不佳。

+0

非常感谢 – 2014-11-21 22:19:33