Получить все возможные словосочетания

2

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

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

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

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

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

EDIT:

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

Если есть другие люди с одинаковой проблемой, эта ссылка может быть полезной:
Создать массив комбинаций слов в С#

Теги:
recursion
combinations
combinatorics

2 ответа

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

Ещё вопросы

Сообщество Overcoder
Наверх
Меню