#java #cpp #алгоритм #комбинаторика #множества
Как можно сгенерировать все возможные комбинации, состоящие из элементов заданных n множеств ? Например, если имеется 3 множества: A=1,2,3,4,... B=a,b,c,d,... C=A,B,C,D,... и нужно получить что-то вроде: 1 a A; 1 b A; 1 c A .... 1 a B; 1 b B При этом число n заранее неизвестно, так что вложенными циклами решить не получается.
Ответы
Ответ 1
Представьте себе, что это - цифры, стоящие на соответствующих местах числа. Создаем первое число - 1aA (или сколько там нужно мест). Потом просто увеличиваем последний элемент, пока не переберем все. После этого выставляем его равным минимальному элементу и увеличиваем предыдущий (если он тоже максимален - сбрасываем его в минимум и переходим к предыдущему). 1aA 1aB 1aC // достигли максимума в последней позиции. переход- 1bA 1bB 1bC // достигли максимума в последней позиции. переход- 1bA 1bB 1bC // достигли максимума в последней позиции. переход- 1bA 1bB 1bC // достигли максимума в последней позиции. переход- 1сA 1сB 1сC // достигли максимума в последней позиции. переход- но во второй позиции // тоже максимум, перенос далее 2aA ... Словом, просто реализуем алгоритм M (Генерация в смешанной позиционной системе счисления) со страницы 330 4А тома "Искусства программирования"...
Комментариев нет:
Отправить комментарий