Решения задач на порождение комбинаторных объектов в своей основе имеют одну и ту же схему, которая предполагает ответ на следующие вопросы:
Примечание: вопросы 2 и 4, как правило, решаются крайне легко
Сама же процедура порождения всех комбинаций обычно имеет следующий вид:
процедура получитьВсеКомбинации
| получитьПервуюКомбинацию
| вывести Комбинацию
| пока не текущаяКомбинацияПоследняя выполнять
| | получитьСледующуюКомбинацию
| | вывести Комбинацию
| конецЦикла
|конецПроцедуры
В задачах этого листка:
07_01a (начальная)
Напечатать все последовательности длины n из чисел 0.. k-1 в лексикографическом порядке
07_01b (легкая)
Напечатать все последовательности длины n из чисел 0.. k-1 в обратном лексикографическом порядке
07_01c (легкая)
Напечатать все последовательности длины n у которых i-ый член не превосходит i.
07_01d (трудная)
Напечатать все последовательности длины n из чисел 0.. k-1 так, чтобы соседние последовательности (а также первая и последняя) отличались бы только в одной позиции и только на единицу.
07_02 (средняя)
Напечатать все подмножества множества 1 .. k.
07_03a (трудная)
Напечатать все перестановки чисел 1 .. n. (то есть последовательности длины n, в которые каждое из этих чисел входит по одному разу).
07_03b (очень трудная)
То же, что и в предыдущей, но еще так, чтобы соседние последовательности получались бы друг из друга обменом лишь двух элементов
07_04 (средняя)
Перечислить все возрастающие последовательности длины k из чисел 1 .. n в лексикографическом порядке.
5.
6. Перечислить все вложения (т. е. функции, переводящие разные элементы в разные) множества {1..k} в {1..n}, где k не превышает n.
7. Перечислить все последовательности нулей и единиц длины 2n, содержащие n нулей и n единиц, такие, что в любом их начальном отрезке число единиц не превосходит числа нулей.
8. Перечислить все способы расстановки скобок в произведении n сомножителей. Порядок сомножителей не меняется, скобки полностью определяют порядок действий.
9. На окружности задано 2n пронумерованных точек Перечислить все способы провести nнепересекающихся хорд, с вершинами в этих точках.
10. Перечислить все способы разрезать выпуклый n–угольник на треугольники, проведя n–3 его диагонали.