- •1.1. Загальні методи побудови алгоритмів
- •2.1. Евристики
- •2.2. Програмування с відходом назад
- •Розділ 3. Метод гілок і меж
- •Розділ 4. Алгоритми перестановок та сортування.
- •4.1. Перестановка
- •4.2. Інверсія.
- •4.3. Обернені перестановки.
- •4.4. Сортування.
- •Контрольні запитання.
- •1.1. Загальні методи побудови алгоритмів …………………..4
4.2. Інверсія.
Нехай а1, а2, ..., аn - перестановка множини {1, 2,..., n}. Якщо i<j, a ai>aj, то (ai, aj) називають інверсією перестановки.
Наприклад, для перестановки
3142
існують три інверсії: (3,1), (3,2), (4, 2).
Тільки одна перестановка не має інверсій - впорядкована по зростанню.
Таблицею інверсій перестановки а1, а2, ..., аn називають послідовність чисел b1, b2, ..., bn де bj - кількість елементів, більших за j та розташованих лівіше j (кількість інверсій для j).
Маршал Холл (1956) довів наступне: "Таблиця інверсій однозначно визначає відповідну перестановку". Розглянемо приклад. Нехай задана перестановка:
j |
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
перестановка |
5 |
9 |
1 |
8 |
2 |
6 |
4 |
7 |
3 |
таблиця інверсій |
2 |
3 |
6 |
4 |
5 |
2 |
2 |
1 |
0 |
Таблиця інверсій визначається дуже просто. В перестановці знаходимо 1 та підраховуємо, скільки чисел, більших за 1 стоїть попереду в цій перестановці. Це два елементи - 5 та 9. ставимо на перше місце 2. Для двійки таких чисел 3 - 5,9 та 8. Ставимо на друге місце 3.1 так до кінця.
А тепер на основі таблиці інверсій отримаємо задану перестановку.
j |
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
таблиця інверсій |
2 |
3 |
6 |
4 |
5 |
2 |
2 |
1 |
0 |
Всього елементів 9. Тому записуємо 9 для початку.
Для j=8 bj =1, то запишемо 9,8. Адже перед 8 стоїть одне більніе число.
Для j=7 bj=2, то запишемо 9,8,7.
Для j=6 bj=2, то запишемо 9,8,6,7.
Дляі j=5 bj=0, то запишемо 5,9,8,6,7.
Для j=4 bj=4, то запишемо 5,9,8,6,4,7.
Для j=3 bj=6, то запишемо 5,9,8,6,4,7,3.
Для j=2 bj=3, то запишемо 5,9,8,2,6,4,7,3.
Для j=1 bj=2, то запишемо 5,9,1,8,2,6,4,7,3.
В результаті отримали задану перестановку.
Таким чином задачу, яка була сформульована в термінах перестановок, можна замінити аналогічною задачею в термінах інверсій. Так наприклад, запитання "Скільки існує перестановок множини {1,2, ...,n}?" можна відповісти "Кількість перестановок дорівнює кількості можливих таблиць інверсій". Кількість таблиць інверсій легко перелічити: b1 ) можна вибрати n способами, b2 можна вибрати n-1 способами, ..., bn можна вибрати 1 способом. Отримуємо
n*(n-l)*(n-2)*...*2*l=n!
Таблиці інверсій обчислити легше, тому що b незалежні, а а повинні бути всі різними.
Якщо поміняти місцями два сусідніх елементи перестановки, то кількість інверсій збільшиться або зменшиться на одиницю
4.3. Обернені перестановки.
Перестановку можна записати у вигляді таблиці з двома рядками:
1 |
2 |
3 |
… |
n |
а1 |
а2 |
а3 |
… |
аn |
Далі поміняємо місцями рядки та впорядкуємо стовпчики в порядку зростання по верхнім елементам:
а1 |
а2 |
а3 |
… |
аn |
1 |
2 |
3 |
… |
n |
1 |
2 |
3 |
… |
n |
а1' |
а2' |
а3' |
… |
аn' |
Отримана перестановка а1', а2',..., аn' називається оберненою перестановкою.
Для перестановки 5 9 1 8 2 6 4 73 отримаємо обернену перестановку:
5 |
9 |
1 |
8 |
2 |
6 |
4 |
7 |
3 |
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
3 |
5 |
9 |
7 |
1 |
6 ■ |
8 |
4 |
2 |
Обернена перестановка -3 5 9 7 1 6 8 4 2.