Лекции по дискретной математике. Ч.II. Комбинаторика, разостные уравнения, алгоритмы на графах. Гайдамака Ю.В - 22 стр.

UptoLike

22
жет быть следующим. Начиная от перестановки (1,2,…,n), мы пе-
реходим далее от
Π
=(
π
1
,…,
π
n
) и ее последующей путем просмотра
Π
справа налево в поисках самой правой позиции, в которой
π
i
+
π
i+1
. Найдя ее, мы теперь ищем
π
j
, наименьший элемент, распо-
ложенный справа от
π
i
и больший его; затем осуществляется
транспозиция элементов
π
i
и
π
j
и отрезок
π
i+1
,…,
π
n
переворачива-
ется.
Например, для n=8 и
Π
=(2,6,5,8,7,4,3,1) мы имеем
π
i
=5,
π
j
=7,
меняя их местами, получаем (2,6,7,8,5,4,3,1). Переворачивая отре-
зок
π
i+1
,…,
π
n
получаем новую перестановку (2,6,7,1,3,4,5,8), сле-
дующую за
Π
в лексикографическом порядке.
Следующий алгоритм реализует эту процедуру (в квадратных
скобках даны комментарии):
Листинг 6.1
Алгоритм генерации перестановок в лексикогра-
фическом порядке.
for j=0 to n do
π
j
j;
i
1;
while i
0 do
begin
вывести
Π
=(
π
1
,…,
π
n
);
[Найти самое правое место, где
π
i
<
π
i+1
.]
i
n-1;
while
π
i
>
π
i+1
do i
i-1;
[Найти
π
j
, наименьший элемент справа от
π
i
и больший
его]
j
n;
while
π
i
>
π
j
do j
j-1;
[Поменять местами
π
i
и
π
j
и затем перевернуть
π
i+1,…
π
n
]
π
i
π
;
j
r
n;
s
i+1;
while r>s do
begin
π
r
⇔π
s
;
r
r-1;
s
s+1;