Professional Documents
Culture Documents
методичка Фунд алг ч І
методичка Фунд алг ч І
Г.Е. Копча-Горячкіна
ФУНДАМЕНТАЛЬНІ АЛГОРИТМИ
В КОМБІНАТОРИЦІ ТА ГРАФАХ
Навчально-методичний посібник
частина І
Ужгород-2008
1
Копча-Горячкіна Галина Ернестівна
Г.Е.Копча-Горячкіна, 2008.
2
Вступ
3
Опис предмета навчальної дисципліни
Напрям, спеціальності,
Курс: підготовка
освітньо- Характеристика
(бакалаврів,
кваліфікаційний навчальної дисципліни
спеціалістів, магістрів)
рівень
Кількість кредитів 6.050103 Дисципліна вільного
вибору студента
ECTS – 4,5 Програмна інженерія
Рік підготовки –
Модулів: к-ть модулів – 2008/2009
2
Семестр – 2
Змістових модулів:
Лекції – 22 год.
к-сть модулів – 2
6.080400
ПЗАС Лабораторних – 32 год.
Загальна кількість
годин – 162 Самостійна робота –
108 год.
4
Навчально-тематичний план дисципліни «Фундаментальні алгоритми в
комбінаториці та графах»
Всього годин
Лабораторні
Самостійна
Практичні
Лекційні
заняття
роботи
робота
№
п/п Назва теми, її зміст Література
Змістовий модуль 1
1. Вступ. Основні поняття
[1], с.48-50,
комбінаторики. Зв’язок з 7 1 - - 6
[2], с.134-135
іншими дисциплінами
2. Розміщення, сполучення,
вибірки. Алгоритми їх 12 2 [1], с.50-51,
- 4 6
обчислення [2], с.135-138
3. Перестановки. Підстановки.
14 2 - 2 10 [1], с.51-53
Задача розкладання в ящики.
4. Алгоритм сортування
10 2 - 4 4 [2], с.141-142
„бульбашковим методом”
5. Алгоритм „Генерація
20 2 - 8 10 [2], с.142-143
перестановок”
6. Біном Ньютона. Властивості
8 2 - - 6 [1], с.53-55
біноміальних коефіцієнтів
7. Генерація підмножин 5 1 - 4 - [2], с.147-148
Модульний контроль
(тестування, контрольна робота)
Всього годин за модулем 1 76 12 - 22 42
Змістовий модуль 2
8. Основні поняття теорії графів.
22 2 - - 20 [2], с.189-197
Зв’язок з іншими дисциплінами
9. Представлення графів в ЕОМ.
20 2 - 2 16 [2], с.201-203
Способи задання графа
10. Обходи графів. Алгоритм
16 2 - 4 10 [2], с.203-204
пошуку в глибину в графі
11. Алгоритм пошуку в ширину в
16 2 - 4 10 [2], с.204-205
графі
12. Алгоритми пошуку
12 2 - - 10 [2], с.228-233
найкоротших шляхів у графі
Модульний контроль
(тестування, контрольна робота)
Всього годин за модулем 2 86 10 - 10 66
5
Зміст лекційних тем курсу
6
Теми лабораторних занять
№ К-сть
Назва теми Література
п/п годин
Реалізація алгоритмів на [1], с.50-51,
1. обчислення розміщення та 4 [2], с.135-138
сполучення
Реалізація алгоритму сортування
2. 2 [2], с.141-142
„бульбашковим методом”
Реалізація алгоритму сортування
елементів методом транспозиції
3. 2 [2], с.141-142
(перестановкою сусідніх
елементів)
Генерування перестановок в
4. 4 [2], с.142-143
лексикографічному порядку
Генерування перестановок в
5. 4 [2], с.142-143
антилексикографічному порядку
6. Генерування підмножин 2 [2], с.147-148
7. Генерування сполучень 2 [2], с.147-148
8. Визначення парності підстановки 2 [2], с.141
Модульний
9. Змістовий модуль 1
контроль 1
Задання графа матрицею
10. 2 [2], с.201-203
інцидентності
Реалізація алгоритму пошуку в
11. 4 [2], с.203-204
глибину в графі
Реалізація алгоритму пошуку в
12. 4 [2], с.204-205
ширину в графі
Модульний
13. Змістовий модуль 2
контроль 2
7
Теми самостійної роботи студентів
№
Назва теми К-сть годин
п/п
Змістовий модуль1
1. Задача про цілочислові розв’язки. Числа
6
Стірлінга та числа Белла
2. Властивості біноміальних коефіцієнтів 6
3. Перестановки. Підстановки. Множення
6
підстановок
4. Обернена підстановка. Порядок підстановки 6
5. Розклад підстановок в добуток циклів 6
6. Розклад підстановок в добуток транспозицій 4
7. Транспозиції, інверсії, парність підстановки 8
Література: [1], с.56-57, с.53-55, [2], с.136-143
Всього за змістовий модуль 1 42
Змістовий модуль 2
8. Алгоритм Флойда 8
9. Алгоритм Дейкстри 8
10. Дерева. Основні властивості дерев. 10
11. Орієнтовані, впорядковані і бінарні дерева 10
12. Зображення дерев в ЕОМ. 10
13. Обходи бінарних дерев. Алгоритм
10
симетричного обходу бінарного дерева
14. Дерева сортування. Способи реалізації
10
асоціативної пам’яті
Література: [2], с.229-230, с.230-231, с.234-238, с.238-242, с.243-244,
с.244-246, с.246-253
Всього за змістовий модуль 2 66
8
Література
9
Перелік питань на модуль ІІ
11
ОСНОВНІ АЛГОРИТМИ В КОМБІНАТОРИЦІ
Наприклад.
- тролейбусом (Т),
- автобусом (А),
- метро (М);
з пункту В в пункт С – лише двома видами транспорту: тролейбусом (Т) і
автобусом (А). Скількома способами можна доїхати з пункту А в пункт С міста
Києва?
Але якщо n=100 000 (що досить реально), то відповідь буде одержано за
4 999 950 секунд – а це 1389 годин!
13
Зазвичай задачі оцінюються з точки зору розміру, тобто загальної
кількості різних варіантів, серед яких треба знайти розв'язок, а алгоритми
оцінюються з точки зору складності.
14
1.Дано n предметів. Їх треба розмістити по m ящиках так, щоб
виконувались задані обмеження. Скількома способами це можна зробити?
Наприклад.
15
Або інакше: нехай деяку процедуру можна виконати, розв'язавши два
завдання. Якщо є n1 спосіб розв'язати перше завдання та n 2 способи розв’язати
після цього друге завдання, то всю процедуру можна виконати n1 n 2 способами.
Наприклад.
3. Наступна задача.
Другою теж може бути одна з цих трьох цифр. Аналогічно і третя може
бути вибрана трьома способами.
Розв’язок.
17
Очевидно V1 =26, за правилом добутку V2 =26·36-5=931.
Отже, V=26+931=957.
........................................................................................................
Крок r. Якщо a i , ai …, a i
1 2 r 1
– елементи, які вибрані на перших r-1 кроках
r 1
А \ aik . Тоді елементи a i1 , ai2 …, a ir утворюють вибірку обсягом r, або
k 1
r-вибірку з множини А.
Якщо ні – невпорядкованою.
18
Тобто впорядкована вибірка – це кортеж (вектор) з r компонентів і
позначається b1 , b2 ,.., br , bi А , і=1,.., r.
k
k 1
Наприклад.
20
Кількість всіх розміщень без повторень з n елементів по r позначають Anr
(або An, r ), де r і n - невід'ємні цілі числа, r n .
Твердження.
n!
Anr n(n 1)...( n r 1) (1)
(n r )!
~
Anr n r (2)
Anr n!
C r
(3)
r! r!(n r )!
n
H nr C nr r 1 (4)
21
Перестановки.
Pn Ann n!
Очевидно, що n1 n2 .. nk n .
Щоб знайти явний вираз для Pn (n1 , n2 ,.., nk ) , візьмемо окрему перестановку
та замінимо в ній усі однакові елементи різними.
22
Тоді кількість різних перестановок, котрі можна отримати з узятої однієї
перестановки n1!n2 !..nk !
n!
Pn (n1 , n2 ,.., nk )
n1!n2 !..nk !
Приклад 1.
Приклад 2.
7!
Р7 (3,2,1,1) 420 слів.
3!2!1!1!
х х х х х х
Наприклад, якщо а 1 2 3 , b= 1 2 3 , то
х2 х1 х3 х1 х3 х2
х1 х2 х3
а b= .
х3 х1 х2
х1 х2 х3 х4
І= .
х1 х2 х3 х4
24
Для кожної підстановки Р існує обернена Р-1, яка знаходиться заміною
верхнього рядка на нижній. Справедливо співвідношення:
0 1 2 3 4 5 6 7 8 9
Р= .
3 5 8 7 2 0 9 1 4 6
0 3 7 1 5 2 8 4 6 9
Р= .
3 7 1 5 0 8 4 2 9 6
03715 284 69
Р= . Ці підстановки можна виконувати в довільному
37150 842 96
порядку, оскільки вони незалежні, тобто не мають спільних елементів.
Р= 0371528469 .
(12345) = (12)(13)(14)(15)(23)(23).
(12345) = (01)(02)(03)(04)(05)(01).
порядку зростання.
if A[j]<A[m] then
27
m:=j {новий кандидат в мінімальні елементи}
end if
end for
End for
28
Алгоритм 2. Сортування методом транспозиції
begin
for i:=2 to n do
if a[j-1]>a[j] then
{ x:=a[j-1];
a[j-1]:=a[j];
a[j]:=x
end;
29
Серед n n1 предметів, що залишились, візьмемо n2 -підмножину й
покладемо її в 2-й ящик (це можливо зробити Cnnn способами) і продовжимо 2
1
цей процес.
n! (n n1 )! (n n1 .. nk 1 )!
C nn1 · Cnn2 n1 ·..· Cnnk n1 n2 ..nk 1 = . .…. =
n1!(n n1 )! n2 !(n n1 n2 )! nk !(n n1 .. nk )!
n!
= .
n1!n2 !..nk !
Біном Ньютона.
n!
Числа Cnr називається біноміальними коефіцієнтами, тобто це
r!(n r )!
30
Розглянемо властивості біномних коефіцієнтів.
Тоді C nr С nnr .
n! n! n!
Дійсно, Cnnr Cnr .
(n r )!n (n r )! (n r )!r! r!(n r )!
сполучення з S n1,k 1 .
S n 1,k .
31
Отримане співвідношення дає змогу побудувати таблицю для чисел C nk ,
яке називають трикутником Паскаля.
Записують так:
1 1 n =1
1 2 1 n =2
1 3 3 1 n =3
1 4 6 4 1 n =4
………
В цьому рівнобедреному трикутнику кожне число (крім одиниць на
бокових сторонах) являється сумою двох чисел, які стоять над ним.
k
0 1 2 3 4 5 6 7 8 9 ..
n
0 1 ..
1 1 1 ..
2 1 2 1 ..
3 1 3 3 1 ..
4 1 4 6 4 1 ..
5 1 5 10 10 5 1 ..
6 1 6 15 20 15 6 1 ..
7 1 7 21 35 35 21 7 1 ..
8 1 8 28 56 70 56 28 8 1 ..
9 1 9 36 84 126 126 84 36 9 1 ..
.. .. .. .. .. .. .. .. .. .. .. ..
32
3. Послідовність (pn) дійсних чисел називається унімодальною, якщо є
такий унімодальний номер m, що p0 p1 ... pm , pm1 pm2 ... pn , тобто:
Через х позначимо найбільше ціле число, яке менше або дорівнює х
(цілу частину числа х).
k=0,1,..,п, унімодальна, m .
n
2
n n
Якщо п – парне, то максимум досягається в точці m , якщо
2 2
n 1 n 1
непарне, то – у двох точках m
n
і m 1 .
2 2 2
4. Рівність Вандермонда.
Нехай m,п,r – невід'ємні цілі числа, причому r min m, n. Тоді
r
C nr m C mr k C nk .
k 0
33
Теорема біноміальна.
n n
Тоді ( x y) n Cnj x j y n j Cnj x n j y j .
j 0 j 0
n
Легко перевірити, що ( x y) n (1) j Cnj x n j y j .
j 0
Приклад 1.
Приклад 2.
25!
13
C 25 5200300 .
13!12!
n
5. C nk 2 n .
k 0
n n
Дійсно, 2 n (1 1) n Cnk 1nk1k Cnk .
k 0 k 0
n
6. (1) k Cnk 0 .
k 0
n n
Аналогічно 0 1 (1) C 1 k nk
(1) (1) k C nk .
n k
n
k 0 k 0
Поліноміальна теорема.
( x1 x2 ... xk ) n .
Теорема.
35
Вираз ( x1 x2 ... xk ) n дорівнює сумі всіх можливих доданків
Pn (n1 , n2 ,.., nk ) x1n1 x2n2 ...xknk , де n1 n2 ... nk n , тобто
( x1 x2 ... xk ) n P (n ,.., n ) x
n
n1 0 ,..., nk 0
1 k
n1
1 x2n2 ...xknk .
n1 ... nk n
Вона дає змогу доводити деякі властивості чисел Pn (n1 ,.., nk ) . Зазначимо
дві з них.
таке співвідношення:
Pn (n1 , n2 ,.., nk ) Pn1 (n 1, n2 ,.., nk ) Pn1 (n1 , n2 1,.., nk ) ... Pn1 (n1 , n2 ,.., nk 1) .
36
Задача про цілочислові розв'язки.
Формулюється так:
Приклад 1
13! 12 13
За формулою: H 311 C311111 C1311 78 .
11!2! 2
37
Приклад 2. Знайти кількість невід'ємних цілих розв'язків рівняння х1 х2 х3 11
за умов х1 1, х2 2 , х3 3 .
14!
H 35 C 411111 C14
11
364 .
11!3!
n
4. Формула винесення за дужки Cnk Cnk11 .
k
38
5. Cn0 Cn11 ... Cnnk Cnnk 1 .
0 m
Розв’язок.
Розв’язок.
Таким чином, число всіх точок перетину дорівнює числу способів, якими
з 10-ти вершин можна вибрати чотири вершини, тобто
10! 10 9 8 7
С104 210 .
4!6! 43 2
41
Скільки існує різних результатів, якщо в змаганні бере участь п
учасників?
Розв’язок.
Розв’язок.
28! 28 27 26 25 24 23 22
С28
7
1184040 .
7! (28 7)! 7 6 5 4 3 2 1
Розв’язок.
(m n 1)!
H mn Cmn n1 способами.
n!(m 1)!
42
Генерація перестановок.
Деякі з цих методів було знову відкрито в наш час у зв'язку з появою
комп'ютерів.
43
Генерування перестановок в лексикографічному
порядку.
44
Приклад 1.
Приклад 2.
Якщо an2 an1 , то останні три члени можна переставити для отримання
наступної перестановки.
Поставимо менше з двох чисел a n1 і a n , яке, однак, більше, ніж an2 ,
на позицію п-2.
45
Потім розмістимо число, яке залишилося, і an2 на останніх двох позиціях
у висхідному порядку.
Приклад.3.
Кроки алгоритму:
Для цього треба знайти в перестановці першу справа пару сусідніх чисел,
у якій число, що ліворуч, менше від числа, що праворуч.
46
Обґрунтування.
Покажемо, що не існує перестановки, яка водночас більша від а1а 2 ..а n , але
менша від побудованої за цим алгоритмом.
більшим, ніж a j .
Приклад. 4.
47
Отже, розглянемо послідовність чисел 541.
п!=4!=1·2·3·4=24 24 перестановки.
48
Генерування перестановок в антилексикографічному
порядку.
Тобто:
a k bk , a k 1 bk 1 , ..., a n bn .
Наприклад,
49
Розглянемо алгоритм, який генерує всі перестановки елементів 1,…,n в
антилексикографічному порядку.
for i from 1 to п do
end for
порядку.
if m=1 then
else
for i from 1 to m do
if i<m then
end if
end for
end if
while j<k do
P j Pk
j : j 1
k : k 1
end while
Обґрунтування:
52
При цьому антилексикографічний порядок збережений для
послідовностей всередині одного блоку, бо цей порядок був збережений у
вихідній послідовності, а для послідовностей на границях двох блоків, тому що
відбувається зменшення крайнього правого елемента.
Приклад.
53
Генерування підмножин.
for I from 1 to m do
end for
if m=п then
54
yield A1..n {єдина підмножина}
exit
end if
while p 1 do
if An m then
else
end if
if p 1 then
end for
end if
end while.
55
Обґрунтування.
Приклад.
56
Генерування сполучень
Кроки алгоритму:
Приклад.
57
Отже, наступне в лексикографічному порядку сполучення – те, що
зображене рядком 1345, тобто {1,3,4,5}.
Проте ми прагнемо побудувати найменший рядок із тих, які більші від 125.
58
Отже, перші два числа – 1 і 3, тому наступний рядок – 134.
Узагальнюємо.
59
Приклади.
1.Обчислити значення:
35 ; 56 , 18 , 85 , 88 , 10
9
, nn 24 .
n!
rn – кількість розміщень без повторень з п елементів по r .
(n r )!
5! 1 2 3 4 5 1 2 3 4 5
35 3 4 5 60
5 3! 2! 1 2
6! 1 2 3 4 5 6
56 6 20 6 36 20 720
6 5! 1!
8! 1 2 3 4 5 6 7 8
18 8
8 1! 1 2 3 4 5 6 7
8! 8! 3!4 5 6 7 8
85 20 8 42 160 42 6720
8 5! 3! 3!
8!
88 40320
0!
10! 10!
10
9
10!
10 9! 1
2.Обчислити значення:
C 51 ; C 53 , C 84 , C126
60
n!
C nr – кількість розміщень без повторень з п елементів по r .
r!n r !
5! 5! 4*!5
C51 5
1! 5 1! 4! 4!
5! 3!4 5 20
C53 10
3!5 3! 3!2! 2
8! 4!5 6 7 8 10 7 2
C84 70
4!8 4! 4!4! 2
12! 6!7 8 9 10 11 12 7 8 9 10 11 12 7 8 9 11
C126 7 4 3 11 924
6!12 6! 6!6! 1 2 3 4 5 6 3 2
F1,2,3 1......12
61
5.Скільки різних слів (рядків) можна утворити зі слова MISSISSIPPI,
використовуючи всі букви?
Pn n1 , n2 ,......, nk
n!
n1!n2 !.....nk !
4!5 6 7 8 9 10 11
P11 4,4,1,2
11!
5 7 9 10 11 35 9 110 34650 .
4!4!1!2! 4!1 2 3 4 2
14
32 54123
12 45
3 4523
1 6714235
31528
764
654312, 435612.
62
Відповідь: 1) 156423; 2) 165432; 3) 231456; 4) 231465; 5) 234561;
6)314562; 7) 432561; 8) 435612; 9) 541236; 10) 543216; 11) 654312; 12)
654321
123456
126435
135624
145236
153426
12346
5 126 45
3 1356
42 14526
3 15346
2
123546
126534
1362 45
145326
153624
12356
4 126
543 13625
4 14536
2 1536
42
1236 45
132456
1364 25
1456 23
154236
1236
54 132 46
5 13645
2 1456
32 154 26
3
12435
6 132546
136524
146235
154326
12436
5 13256
4 136
542 146 25
3 15436
2
124536
1326 45
142356
146325
1546 23
12456
3 1326
54 14236
5 14635
2 1546
32
63
124635
134256
142536
146523
156234
12 46
53 134 26
5 14256
3 146
532 15624
3
125346
134526
142635
152346
156324
12536
4 13456
2 14 26
53 15236
4 15634
2
125436
1346 25
143256
152436
1564 23
12546
3 1346
52 14326
5 152 46
3 156
432
125634
135246
143526
152634
162345
1256
43 13526
4 14356
2 1526
43 16235
4
126345
135426
1436 25
153246
162435
12635
4 13546
2 1436
52 15326
4 162 45
3
162534
164523
213645
16 25
43 16 45
32 2136
54
1632 45
165234
214356
16325
4 16524
3 21436
5
64
1634 25
165324
214536
16345
2 16534
2 21456
3
163524
1654 23
214635
1635
42 16
5432 214653
164235
213456
164 25
3 21346
5
164325
213546
16435
2 21356
4
a 1
b2
c 3
65
d 4
e5
12345
abcde
1235
4
abced
12435
abdce
12 45
3
abdec
12534
abecd
125
43
abedc
132 45
acbde
1325
4
acbed
134 25
acdbe
1345
2
acdeb
13524
acebd
135
42
acedb
66
14235
adbce
14 25
3
adbec
14325
adcbe
1435
2
adceb
14523
adebc
145
32
adecb
15234
aebcd
1524
3
aebdc
15324
aecbd
1534
2
aecdb
154 23
aedbc
15
432
aedcb
21345
bacde
21354 baced
67
Приклади на генерування підмножин.
m!
Їх кількість C mn
n!m n !
Приклад 1.
Використовуємо формулу:
6! 56
C 64 15
2!4! 2
1) 1234
2) 1235
3) 1236
4) 1245
5) 1246
6) 1256
7) 1345
8) 1346
9) 1356
10) 1456
11) 2345
12) 2346
13) 2356
68
14) 2456
Приклад 2.
6! 456
Їх кількість C 63 20
3!3! 6
двадцять підмножин.
69
Література
70
71
72
73
ЗМІСТ
Теоретичні відомості:
Генерація перестановок………………………………………. 43
Генерування підмножин…………………………………………… 52
Генерування сполучень…………………………………………….. 57
Література………………………………………………………… 70
74
Копча-Горячкіна Галина Ернестівна – викладач кафедри
інформаційних управляючих систем та технологій факультету
інформатики Закарпатського державного університету
75
76