Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ОДМ_Розд.5.doc
Скачиваний:
12
Добавлен:
11.11.2019
Размер:
206.34 Кб
Скачать

5.2.2. Графічне уявлення підстановок

Підстановки зручно подавати в графічній формі, проводячи стрілки від кожного елемента х до елемента f(x).

Приклад. Графічне уявлення підстановки

подано на рис.5.1.

Рис.5.1. Графічне уявлення підстановки

5.2.3. Цикли

Цикл підстановки - це послідовність елементів , така що

Цикл довжини 2 називається транспозицією.

5.2.4. Підстановки і перестановки

У таблиці підстановки нижній рядок (значення функції) є перестановкою елементів верхнього рядка (значення аргументу). Якщо прийняти умову, що елементи верхнього рядка (аргументи) завжди розташовуються у визначеному порядку (наприклад, за зростанням), то верхній рядок можна не вказувати - підстановка визначається одним нижнім рядком. Таким чином, підстановки однозначно відповідають перестановкам.

Перестановку (і відповідну їй підстановку) елементів 1,...n будемо позначати де все - довільне число з діапазону 1, ... , n.

5.2.5. Інверсії

Якщо в перестановці для елементів і має місце нерівність при i<j, то пара називається інверсією. Позначимо I(f) - кількість інверсій у перестановці f.

Розглянемо таку теорему. Довільну підстановку f можна уявити у вигляді суперпозиції I(f) транспозицій сусідніх елементів.

Розглянемо доведення цієї теореми. Нехай Переставимо 1 на перше місце, помінявши її місцями із сусідніми зліва елементами. Позначимо послідовність цих транспозицій через . При цьому всі інверсії (і тільки вони), в яких брала участь 1, зникнуть. Потім переставимо 2 на друге місце і т.д. Таким чином, і за властивостями групи , причому

Наслідком цієї теореми є твердження, що всяке сортування може бути виконано перестановкою сусідніх елементів. Доведена теорема підтверджує, що довільну перестановку можна уявити у вигляді композиції визначеної кількості транспозицій, але не підтверджує, що таке уявлення є ефективним. Метод сортування, заснований на попередній теоремі, відомий як метод бульбашки.

Зауважимо, що при переміщенні елемента на своє місце транспозиціями сусідніх елементів усі останні залишаються на своїх місцях, крім тих елементів, що переміщуються і знаходяться на цільовому місці, ці елементи міняються місцями. Таким чином, метод бульбашки може бути виражений у формі алгоритму. Цей алгоритм простий, але далеко не найефективніший алгоритм сортування.

Алгоритм сортування методом бульбашки має вигляд:

Вхід: масив А: array [1..n] of B, де значення елементів масиву розташовані в довільному порядку і для значень типу В задане відношення < .

Вихід: масив А: array [1..n] of B, в якому значення розташовані в порядку зростання

for i from 1 to n-1 do

m: = і{ індекс кандидата в мінімальні елементи}

for j from i+1 to n do

if A [j]<A [m] then

m:=j { новий кандидат у мінімальні}

end for

end for

A[i] A[m] { ставимо мінімальний елемент на місце}

end for.

5.2.6. Генерація перестановок

На множині перестановок природно можна визначити впорядкованість на основі впорядкованості елементів. Як-от, говорять, що перестановка лексикографічно передує перестановці , якщо . Аналогічно говорять, що перестановка антилексикографічно передує перестановці , якщо

Такий алгоритм генерує всі перестановки елементів 1, ... , n в антилексикографічному порядку. Масив P: array [1..n] of 1..n є глобальним і призначений для збереження перестановок.

Розглянемо алгоритм генерації перестановок в антилексикографічному порядку.

Вхід: n- кількість елементів

Вихід: послідовність перестановок елементів 1,...n в антилексикографічному порядку.

for i from 1 to n do

P [i] : = i { ініціалізація}

end for

Antilex (n) {виклик рекурсивної процедури Antilex}.

Основна робота з генерації перестановок виконується рекурсивной процедурою Antilex.

Вхід: m-параметр процедури - кількість перших елементів масиву P, для яких генеруються перестановки.

Вихід: послідовність перестановок 1, ... , m в антилексикографічному порядку.

if m=1 then

yield P{чергова перестановка}

else

for i from 1 to m do

Antilex (m-1) {рекурсивний виклик}

if i<m then

P[i] P[m] {такий елемент}

Reverse (m-1) {зміна порядку елементів}

end if

end for

end if.

Допоміжна процедура Reverse переставляє елементи заданого відрізка масиву Р в оберненому порядку.

Вхід: - номер елемента, що задає відрізок масиву Р, який підлягає перестановці в оберненому порядку.

Вихід: перші елементів масиву Р переставлені в оберненому порядку

j:=1{нижня межа, що повертається діапазону}

while j<k do

P [j] P[k]

j: = j +1

k: = k-1

end while.

Зауважимо, що шукану послідовність перестановок n елементів можна одержати з послідовності перестановок n-1 елементів в такий спосіб. Потрібно виписати n блоків по (n-1)! перестановок у кожному, що відповідають послідовності перестановок n-1 елемента в антилексикографічному порядку. Потім до всіх перестановок у першому блоці потрібно приписати справа n, у другому - n-1 і т.д. у спадному порядку, потім у кожному блоці (крім першого), до перестановок якого справа приписаний елемент і, потрібно в перестановках блока замінити усі входження елемента і на елемент n. В отриманій послідовності всі перестановки різноманітні, і їх n(n-1)! = n!, тобто перераховані всі перестановки. При цьому антилексикографічний порядок дотриманий для послідовностей усередині одного блока, тому що цей порядок був дотриманий у вихідній послідовності, і послідовностей на межах двох блоків, тому що відбувається зменшення самого правого елемента. Звернемося до процедури Antilex - легко бачити, що в ній реалізована зазначена побудова. В основному циклі спочатку будується черговий блок - послідовність перестановок перших m - 1 елементів масиву Р (при цьому елементи P[m], ... , P[n] залишаються незмінними). Потім елемент P[m] мінюється місцями з черговим елементом P[i]. Виклик допоміжної процедури Reverse необхідний, оскільки остання перестановка в блоці є обертанням першої, а для генерації такого блока на черговому кроку циклу потрібно відновити вихідний порядок.

Розглянемо приклад.

Послідовність перестановок в антилексикографічному порядку для n=3: (1, 2, 3), (2, 1, 3), (1, 3, 2), (3, 1, 2), (2, 3, 1), (3, 2, 1).

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]