2015-06-25 3 views
0

Я знаю алгоритм Кучи для вычисления перестановок заданной последовательности, но что, если бы я хотел рассчитать перестановки подмножества k-элементов для данной последовательности N?Алгоритм вычисления перестановок

Решение, о котором я думаю, на этот раз является обратным, но ему нужно будет генерировать новую последовательность подэлементов при каждом удалении одного и рекурсивном вызове функции перестановки. Это звучит дорого, и я хотел бы знать, если есть лучшее решение

+0

Насколько велики n и k? Независимо от того, что вам нужно (n! - k!) Ответы, так что это становится огромным действительно, очень быстро. –

+0

Вы правы, и сложность будет сложной, однако выделение пространства при каждой рекурсии также дорого. Мне просто интересно, существует ли рекурсивный стандартный алгоритм для создания перестановок (N, k) – Albert

+0

@Albert Существует итеративный алгоритм для генерации перестановок заданного набора. Вы ищете этого? – Vesper

ответ

0
  1. Используйте алгоритм для генерации комбинаций размера K из множества N. (Выберите любой из SO вопроса: Algorithm to return all combinations of k elements from n).
  2. Используя результат, примените Heap's Algorithm для создания всех перестановок этого подмножества k-элементов (или другого Algorithm to generate all possible permutations of a list).
  3. Создайте следующее подмножество размера K и повторите (шаги 1 и 2) до тех пор, пока не будут перечислены все подмножества размера K.
Смежные вопросы