2010-11-27 28 views
2

私はn個の単語のリストを持っています(26としましょう)。今すぐすべての可能な組み合わせの一覧を取得したいが、行ごとに最大k語を持つ(5と言う)可能なすべての単語の組み合わせを取得

私の単語リストが:aaa、bbb、...、zzzのとき 私はしたいget:

aaa 
bbb 
... 
aaabbb 
aaaccc 
... 
aaabbbcccdddeeefff 
aaabbbcccdddeeeggg 
... 

変数を任意のnまたはk値で使用できるようにしたいと思います。 単語が2回ある必要はなく、すべての組み合わせを取る必要があります(非常に多くても)。

どうすれば達成できますか?

編集:

ありがとうございます。それは割り当てではありません。私は自分のパスワードの組み合わせを忘れてしまったので、すべての組み合わせをテストしたことを確認したいのです。私は26個のパスワードパーツを持っていませんが、これは私が望むものを説明しやすくしました。

同じ問題を持つ他の人がいる場合は、このリンクは参考になっ可能性:あなたは組み合わせの大規模な番号を取得する必要がある場合
Generate word combination array in c#

+1

を行うための機能をシンプルに書きました)あなたが必要とすることをします。 –

答えて

2

あなたは(ただし、this

を見てみることができ何千万もの場合)、組み合わせの生成に遅延評価を使用する必要があります。

3

は、私はあなたがおそらく[コードプロジェクトからのコンビネーションテンプレートコード](http://www.codeproject.com/KB/recipes/Combinatorics.aspxを見つけることができます。この

 private string allState(int index,string[] inStr) 
     { 
      string a = inStr[index].ToString(); 
      int l = index+1; 
      int k = l; 
      var result = string.Empty; 
      var t = inStr.Length; 
      int i = index; 
      while (i < t) 
      { 
       string s = a; 
       for (int j = l; j < k; j++) 
       { 
        s += inStr[j].ToString(); 
       } 
       result += s+","; 
       k++; 
       i++; 
      } 

      index++; 
      if(index<inStr.Length) 
       result += allState(index, inStr); 
      return result.TrimEnd(new char[] { ',' }); 
     } 

allState(0, new string[] { "a", "b", "c"}) 
+0

残念ながら、これは3つの文字列のリストに対してのみ機能します。どんなに大きなものでも、組み合わせが足りなくなる。 IE:ABCDはあなたにABCD、ABC、BCDを与えますが、ACDは与えません – Talon

関連する問題