2010-11-27 2 views
2

У меня есть список n слов (скажем 26). Теперь я хочу получить список всех возможных комбинаций, но не более k слов в строке (скажем, 5)Получить все возможные комбинации слов

Итак, когда список слов: aaa, bbb, ..., zzz Я хочу get:

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

Я хочу сделать его переменным, чтобы он работал с любым значением n или k. Не должно быть слов в два раза, и все комбинации должны быть приняты (даже если их очень много).

Как я мог это достичь?

EDIT:

Благодарим за ответы. Это не задание. Я просто забыл о комбинациях моего пароля, и я хочу быть уверенным, что у меня есть все проверенные комбинации. Хотя у меня нет 26 паролей, но это упростило объяснение того, что я хочу.

Если есть другие люди с той же проблемой, эта связь может быть полезна:
Generate word combination array in c#

+1

Вы, вероятно, найти [код шаблона комбинации из кода проекта] (http://www.codeproject.com/KB/recipes/Combinatorics.aspx) делает то, что вам нужно. – 2010-11-27 09:22:12

ответ

2

Вы могли бы взглянуть на this

Однако, если вам нужно получить большое количество комбинаций (в десятках миллионов), вы должны использовать ленивую оценку для генерации комбинаций.

3

я написал простой функции, чтобы сделать это

 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 2014-07-03 15:33:22

Смежные вопросы