Учебно-методическое пособие. Алматы, 2017 ббк



бет91/106
Дата03.01.2022
өлшемі483.39 Kb.
#451845
түріУчебно-методическое пособие
1   ...   87   88   89   90   91   92   93   94   ...   106
УЧЕБНИКПаскаль(100217)

Перестановки - соединения, каждое из которых содержит N различных элементов, взятых в определенном порядке, называются перестановками из N элементов. Следует отметить, что порядок элементов в перестановке существенен, и в образовании перестановки участвуют все N элементов (M = N).

Пример. Выпишем все перестановки из элементов а, b, с:

abc, acb, bac, bca, cab, cba.

Количество всех способов, которыми можно переставить N различных предметов, расположенных на N различных местах, принято обозначать РN(читается: <число перестановок из N>).

Найдем РN. На первое из имеющихся мест предмет может быть выбран N способами, на второе место - (N - 1) способом, на третье место - (N - 2) способами и т. д. На предпоследнее место предмет выбирается из двух остав­шихся, а для последнего места выбор предмета единственен. Общее количество способов будет равно произведению N (N- 1)* (N - 2) ... * 2 * 1. Такое произведение называется факториалом числа N и обозначается N!.

Таким образом, РN = N!.
Иногда требуется не просто подсчитать количество перестановок из n элементов, но и найти каждую из них. Существует несколько алгоритмов генерации всех перестановок из n элементов. Они различаются порядком генерации перестановок.

Рассмотрим один из хорошо известных алгоритмов, в процессе исполнения которого перестановки располагаются лексикографически (в словарном порядке). Это значит, что перестановки сравниваются слева-направо поэлементно и большей из них является та, у которой раньше встретился элемент, больший соответствующего ему элемента во второй перестановке. (Например, если S=(3, 5, 4, 6, 7), а L=(3, 5, 6, 4, 7), то S < L.)

Приведем фрагмент программы, генерирующей все перестановки в лексикографическом порядке:

for i:= 0 to n do

p(i) :=i;

while p(0)=0 do

begin

for i:= 0 to n do



p(i) :=p(i)

j=N


while p(j-1) >=p(j)

j =j+1


wend

k=N


while p(j-1)>=p(k)

k=k - 1


wend

d=p(j-1)

p(j-1)=p(k)

p(k)=d


for i = j do n

r(i) =p(N-i+j)

next i

for i = j do n

p(i) =r(i)

next i


wend


Достарыңызбен бөлісу:
1   ...   87   88   89   90   91   92   93   94   ...   106




©dereksiz.org 2024
әкімшілігінің қараңыз

    Басты бет