2011-04-24 45 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(); 

一樣容易