2011-04-24 76 views
3

我正在实施Apriori算法。我需要计算列表 的例如组合我有一个包含 ABC DEF GHI JKL 及其出来放列表应该是这样的 ABCDEF ABCGHI ABCJKL要查找列表的组合

PLZ告诉我,HW我能得到这样的输出.....

回答

6

这就是所谓的cartesian product

简单的方法

var inputs = new [] { "ABC", "DEF", "GHI", "JKL", "MNO" }; 
var combi = from first in inputs 
      from second in inputs 
      select first+second; 

灵活的方式(通过Eric Lippert出版)

static IEnumerable<IEnumerable<T>> CartesianProduct<T>(this IEnumerable<IEnumerable<T>> sequences) 
{ 
    IEnumerable<IEnumerable<T>> emptyProduct = new[] { Enumerable.Empty<T>() }; 
    return sequences.Aggregate( 
    emptyProduct, 
    (accumulator, sequence) => 
     from accseq in accumulator 
     from item in sequence 
     select accseq.Concat(new[] {item}));     
} 

使用它像

var combi = new [] { inputs, inputs }.CartesianProduct(); 

力量来自能够做

var combi = new [] { inputs, inputs, somethingelse, inputs }.CartesianProduct(); 

一样容易