ТА_Методички / Lab12_Prima_edited _07.08.13_
.pdfПсевдокод алгоритму
Вхід: список Е ребер графу G з їхніми довжинами
Вихід: множина Т ребер мінімального кістякового дерева
Т – {Ø};
Впорядкувати Е у порядку зростання ваги k = 1 (номер ребра, яке розглядається) for (i = 1) to (p-1)
while додавання ребра Е(k) утворює цикл у Т do k += 1 (пропускаємо це ребро)
end while
T = T + {E[k]} (додаємо це ребро до мінімального кістякового дерева) end for
Спочатку множина ребер є пустою. Потім, поки це можливо, відбувається наступне: з усіх ребер, додавання яких до вже існуючої множини не викличе в ньому появи циклу, вибирається ребро з мінімальною вагою і додається до множини. Коли таких ребер більше не залишиться, алгоритм закінчується.
Оцінка складності
Визначимо час роботи алгоритму. До початку роботи алгоритму необхідно відсортувати ребра за їхньої вагою, це потребуватиме O(E × log(E)) часу. Компоненти зв’язності зручно зберігати у вигляді системи множин які не перетинаються. Усі операції у такому випадку займатимуть O(E × α(E, V)), де α – функція, обернена до функції Аккермана (рекурсивна функція першого порядку). Оскільки для будь-яких практичних задач α(E, V) < 5, то можна прийняти її за конастанту, таким чином загальний час роботи алгоритму Крускала можна вважати O(E).
2.4. Алгоритм Борувки
Нехай дано зв’язний неорієнтований G(V;E) і на ньому задана вагова функція. Нехай А – проміжний кістяковий ліс для графу V. На першому кроці A складається з усіх вершин G і пустої множини ребер. Спочатку, на кожній фазі алгоритму Борувки, для кожної компоненти зв’язності проміжного кістякового лісу, вибирається лідер («leader» node) або корінь – вершина, яка співставляється кожній компоненті. У найпростішому випадку, це можна зробити за допомогою обходу А в глибину: вершина, з якої починається обхід наступних компонент, буде її лідером. В алгоритмі за це відповідає процедура/функція ? CHOOSE-LEADERS. Лідер для v зберігається у змінній leader(v).
Після того, як лідери вибрані, для кожної компоненти зв’язності знаходиться безпечне для неї ребро. Це робота процедура/функція FINDSAFE_EDGES. Безпечне ребро для лідера v зберігається у змінній safe(v'). Як тільки всі такі ребра відібрані, вони додаються до A. Процес продовжується до того часу, поки в A є більше ніж одна компонента зв’язності.
MST-BORUVKA(G,w)
1:A ← (V,0)
2:while (поки) в A є більше одної компоненти зв’язності
3:do CHOOSE-LEADERS(A)
4:FIND-SAFE-EDGES(G)
5:foreach (для кожного) лідера v'
6:додати safe(v') у A
7:return A
Ось можливий простий вид процедури пошуку безпечних ребер:
FIND-SAFE-EDGES(G)
1:foreach (для кожного) лідера v'
2:safe(v') ← ∞
3:foreach (для кожного) ребра (u,v) E
4:u' ← leader(u)
5:v' ← leader(v)
6:if u' ≠ v' then
7:if w(u,v) < w(safe(u')) then
8:safe(u') ← (u,v)
9:if w(u,v) < w(safe(v')) then
10:safe(v') ← (u,v)
Приклад покрокового виконання алгоритму Борувки.
Початкова фаза. Мінімальний |
Для кожної компоненти зв’язності |
покриваючий ліс складається з всіх |
(для кожної вершини) знаходимо |
вершин графу і пустої множини |
безпечні. Вони відзначені стрілками |
ребер. |
від компоненти вздовж безпечного |
|
ребра. |
Додаємо безпечні ребра до |
Знаходимо безпечні ребра для |
мінімального кістякового лісу. |
кожної компоненти зв’язності. |
Додаємо знайдені ребра. Отримаємо мінімальне кістякове дерево
Оцінка складності
Кожне звернення до FIND-SAFE-EDGES потребує O(E) часу, так як всередині процедури відбувається перевірка кожного ребра. Так як ми вважаємо граф зв’язним, то у ньому є максимум |E|+1 вершин. Тоді у випадку, якщо граф представлений у вигляді зв’язного списку, потрібно O(E) часу для виконання кожної ітерації основного циклу алгоритму Борувки MST-BORUVKA. Кожна ітерація зменшує кількість компонент як мінімум у два рази (найгірший випадок, якщо усі компоненти розбиваються на пари). Таким чином, якщо початкова кількість компоненти була рівна V, то головний цикл алгоритму виконується O(logV). Загальний час виконання алгоритму рівний O(ElogV).
Розглянемо в якості приклада розв’язання наступної задачі. На основі завданого графа побудувати мінімальне кістякове дерево.
1.В якості вершин графа візьмемо частини світу. На основі вибраної карти будуємо граф, так щоб ребра не перетинались.
2.Замінимо назви континентів на букви від ”А” до ”G”. Довільно розставимо ваги ребер графа.
3. |
Побудуємо матрицю ваг для даного графу |
|
|
|
||||
|
|
|
|
|
|
|
|
|
|
|
A |
B |
C |
D |
E |
F |
G |
A |
|
0 |
10 |
0 |
0 |
0 |
18 |
11 |
B |
|
10 |
0 |
14 |
0 |
0 |
0 |
9 |
C |
|
0 |
14 |
0 |
12 |
0 |
0 |
16 |
D |
|
0 |
0 |
12 |
0 |
13 |
0 |
15 |
E |
|
0 |
0 |
0 |
13 |
0 |
20 |
10 |
F |
|
18 |
0 |
0 |
0 |
20 |
0 |
17 |
G |
|
11 |
9 |
16 |
15 |
10 |
17 |
0 |
4.Застосуємо алгоритм Прима, для побудови мінімального кістякового дерева.
Візьмемо вершину А початковою. Побудуємо таблицю для відображення послідовності кроків виконання алгоритму:
Крок |
Опис кроку |
Вага ребра |
1 |
А – B |
10 |
2 |
B – G |
9 |
3 |
G – E |
10 |
4 |
E – D |
13 |
5 |
D – C |
12 |
6 |
G – F |
17 |
Отримане мінімальне кістякове дерево за допомогою алгоритму Прима.
Отже вага дерева = 10 + 9 + 10 + 13 + 12 + 17 = 71
3.КОНТРОЛЬНІ ЗАПИТАННЯ
1.Що таке мінімальне кістякове дерево?
2.Що таке алгоритм Прима?
3.Правила виконання алгоритму Прима.
4.Як працює алгоритм Прима?
5.Що потребує в якості вхідних даних алгоритм Прима?
6.Яка складність алгоритму Прима?
7.Яка складність алгоритму Борувки?
4.ЛАБОРАТОРНЕ ЗАВДАННЯ
Згідно з варіантом індивідуального завдання отриманого у викладача побудувати граф на основі карти обласного центру України. Вершинами позначити районні центри, ваги ребер проставити у відповідності до відстані (км). Виконати алгоритм Прима.
5.ОФОРМЛЕННЯ ЗВІТУ
1.Мета роботи.
2.Короткий опис опрацьованого теоретичного матеріалу.
3.Відповіді на контрольні запитання.
4.Індивідуальне завдання, отримане у викладача.
5.Хід виконання, програмна реалізація. Результати роботи.
5.Аналіз отриманих результатів і висновки.
6.Список літературних джерел.
6.СПИСОК ЛІТЕРУТАРИ
1.Ю. Нікольский, В. Пасічник, Ю. Щербина. Дискретна математика. – К: BHV, 2007. – 368 с.
2.Трохимчик Р.М.. Теорія графів. – Навчальний посібник для студентів факультету кібернетики.– К: РВЦ «Київський університет», 1998.–24с.
3.Харари Ф. Теория графов. – М.: Мир, 1973. — 304 с.
|
ВАРІАНТИ ІНДИВІДУАЛЬНИХ ЗАВДАНЬ |
|
|
|
|
№ |
Область України |
|
варіанту |
|
|
|
|
|
1 |
АР Крим |
|
2 |
Вінницька область |
|
3 |
Волинська область |
|
4 |
Дніпропетровська область |
|
5 |
Донецька область |
|
6 |
Житомирська область |
|
7 |
Закарпатська область |
|
8 |
Запорізька область |
|
9 |
Івано-Франківська область |
|
10 |
Київська область |
|
11 |
Кіровоградська область |
|
12 |
Луганська область |
|
13 |
Львівська область |
|
14 |
Миколаївська область |
|
15 |
Одеська область |
|
16 |
Полтавська область |
|
17 |
Рівненська область |
|
18 |
Сумська область |
|
19 |
Тернопільська область |
|
20 |
Харківська область |
|
21 |
Херсонська область |
|
22 |
Хмельницька область |
|
23 |
Черкаська область |
|
24 |
Чернівецька область |
|
25 |
Чернігівська область |
|
НАВЧАЛЬНЕ ВИДАННЯ
Побудова мінімального кістякового дерева
МЕТОДИЧНІ ВКАЗІВКИ
до лабораторної роботи № 12 з курсу «Теорія алгоритмів»
для студентів базового напрямку 6.050101 «Комп’ютерні науки»
Укладачі |
Денисюк П.Ю., канд.техн.наук, доц., |
|
Керницький А.Б., др.інж., доц., |
|
Медвідь А.В., |
|
Сосницький В.Ю., |
|
Юрчак І.Ю., канд.техн.наук, доц. |
Редактор |
Денисюк П.Ю. |
Комп’ютерне верстання |
Денисюк П. Ю., |
|
Медвідь А.В., |
|
Сосницький В.Ю. |
