LINUX.ORG.RU

Алгоритм генерации всех возможных комбинаций элементов из заданных наборов

 ,


0

1

Есть некоторое количество (не очень много, до 5) строк разной длины (до 15 символов). Нужно сформировать все возможные комбинации букв из этих строк. Например, есть такие строки:

hello
contribution
world
development

То есть нужно получить все комбинации по 4 буквы (по одной из каждой строки). Как-то так:

hcwd
hcwe
hcwv
...
onde
ondn
ondt

Повторения игнорировать не нужно. Итого, для данного примера должно получиться 3300 комбинаций (5 * 12 * 5 * 11). Подскажите, пожалуйста, где посмотреть как такое реализовать?

то же самое что инкремент числа в длинной арифметике. Число разрядов - число строк, максимальное значение в каждом разряде - длина строки, и т.д.

anonymous ()

Алгоритм можно реализовать, но не до конца понятно, как ты предлагаешь обрабатывать случаи, когда количество символов в n+1 строке больше чем в строке n. Не сказано, имеет ли значение порядок строк при формировании итоговой строки, и какой порядок вычленения x+1 символа из n строки для y+1 итоговой строки.

exfx ()

Называется «прямое произведение множеств» или «декартово произведение множеств». Реализуется вложенными циклами или готовыми библиотечными функциями:

import itertools
data = ['hello', 'contribution', 'world', 'development']
for e in itertools.product(*data):
    print(e)
i-rinat ★★★★★ ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.