2013-12-07 4 views
0

Я пишу программу на C++, где мне нужно взять набор элементов и сгенерировать все комбинации всех длин. Я видел здесь много примеров, которые берут набор, подобный [1,2,3,4], и создают [1,2,3,4], [1,2,4,3], [1,3 , 2,4], [1,3,4,2] ... и т. Д., Но это не то, что мне нужно. Нужно ли принимать множество как [1,2,3,4] и генерируют наборы элементов, таких как:Комбинации 1 2 3 4

1,2

1,3

1,4

2,3

2,4

1,2,3

1,3,4

2,3,4

1,2,3,4

(и любые другие, которые я, возможно, пропустили)

Что это самый простой алгоритм, чтобы сделать это?

+1

Нет, мы не будем делать домашнее задание для вас ... – ElGavilan

+1

@ElGavilan да, мы можем! ;-) – necromancer

+0

Объем Кнута 4A охватывает алгоритмы, которые делают это. –

ответ

0

Если время вычисления не является проблемой, вы можете просто взять эти «много примеров», которые вы видели для вычисления всех перестановок заданного набора, а затем запустить его через все подмножества вашего ввода.

1

при условии, у вас есть все комбинации полнометражного раствора, а затем, чтобы получить все длины для {1, 2, 3, 4}, сделайте следующее:

  • получить все длины-4 решения
  • удалить 1 получить {2, 3, 4} и вызов это решение рекурсивно
  • удалить 2 получить {1, 3, 4} и называть это решение рекурсивно
  • удалить 3 получить {1, 2, 4} и назвать это решение рекурсивно
  • удалить 4 получить {1, 2, 3} и называть это решение рекурсивно

естественно, когда вы вниз только один элемент, не пытайтесь решить ее, но просто вернуть его как только перестановка.

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