На множестве P всех перестановок <x0, x1, ..., xn-1> из элементов {1, 2, …, n} определим два типа порядка.
Лексикографический порядок на P вводится так [42, c.25; 26]. Пусть<a0, a1, ..., an-1>, <b0, b1, ..., bn-1>ÎP (3)
и символ <’ (меньше) используется в качестве знака лексикографического сравнения перестановок. Тогда считаем, что:
<a0, a1, ..., an-1>, <' <b0, b1, ..., bn-1> Û $ (0 £ k £ n-1) [(ak < bk) Ù"(s < k)(as = bs)]. (4)
Заметим, что если вместо чисел 1,2,…,n использовать буквы с естественным порядком следования их в алфавите, то лексикографический порядок определяет стандартную последовательность, в которой слова длины n появляются в словаре. И это справедливо для алфавитов любых языков.
Аналогично вводится и антилексикографический порядок [42, c.25] на P. Пусть символ <” (меньше) используется в качестве знака антилексикографического сравнения перестановок. Тогда для (3) считаем, что:
<a0, a1, ..., an-1>, <' <b0, b1, ..., bn-1> Û $ (0 £ k £ n-1) [(ak > bk) Ù"(s > k)(as = bs)]. (5)
адача 3. Написать рекурсивную программу-функцию генерирования всех перестановок из n элементов 1,2,…,n в антилексикографическом порядке.
Решение. Соответствующий алгоритм может базироваться на следующих двух утверждениях, непосредственно вытекающих из определений (3)-(4).Утверждение 1. Если множество перестановок P упорядочено антилексикографически, то начальная и конечная перестановки - это соответственно <1, 2, …, n> и < n, n-1,…,1>.
Утверждение 2. Упорядоченная антилексикографически последовательность перестановок по значению последнего элемента в них может быть разбита на n блоков длины (n-1)!. При этом q-й блок на последнем месте имеет элемент, равный (n-q+1), а первые n-1 позиций этого блока определяют последовательность перестановок множества {1,2,…,n}\{q} в антилексикографическом порядке.
Головная функция permut3(n) решает поставленную задачу. В ней по значению n для рекурсивной программы-функции permu(p) формируется начальная перестановка p. В permu(p) и проводятся все вычисления. На рисунке 3 представлен результат выполнения permut3(n) при n=3 и n=4. Для n=4 полученные последовательные перестановки расположены по строкам сверху вниз и столбцам от первого и до последнего.
Рис. 3. Генерирование перестановок в антилексикографическом порядке