Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
2blok_Дискретна математика.doc
Скачиваний:
21
Добавлен:
14.02.2016
Размер:
286.21 Кб
Скачать

5.Алгоритм Дійкстри

Граф називається зваженим, якщо кожному його ребру співставлено деяке ребро, яке називаємо вагою цього ребра. Довжиною цього маршруту наз. суму ваг всіх ребер, що входять до нього. Тобто вагу інколи розуміють як довжину ребра. В незваженому графі довжини всіх ребер вважаємо рівними 1.Якщо потрібно знайти найкоротший шлях тільки між двома вершинами u та застосовують алгоритм Дійкстри. Для нього у всіх вершинах графа ставлять позначки двох типів – тимчасові і постійні. Кожна позначка має вигляд (d,k), де d- вершини w, d- найкоротший вже отриманий шлях з u в v, k- вершина яка передує w в цьому шляху. На початку постійну позначку (0;0) ставимо тільки у вершині u. В усіх інших верщинах ставимо тимчасові позначки (∞,0). В кожний момент навколо вершини, в якій останньою поставлено постійну позначку, розглядаємо всі сусідні вершини з тимчасовими позначками. Якщо остання постійна позначка – у вершині ,а у суідній з нею вершині vj- тимчасова позначка, то порівнюємо числа і di+lij, де lij- довжина з і в j. Якщо сума виявляється меншою, замінюємо на неї dj ,і kj на в тій вершині, сусідній до i в якій тимчасова позначка dj є найменшою, робимо її постійною. Алгоритм зупиняється коли у вершині v ставимо постійну позначку.Алгоритм Дійкстри для однієї пари вершин вимагає набагато менше обчислень ніж алгоритм Флойда для всіх пар вершин, але застосовується алг. Дійкстри до всіх пар вершин приблизно в 2 довше ніж алг. Флойда.

6.Алгоритм пошуку в глибину

Орієнтований граф, як пишуть у [1] – це «пара (V, E), де V – кінцева множина, а E – бінарне відношення на V, тобто підмножина множини V*V… …множину V називають множиною вершин графа, а множину E – множиною ребер».

У неорієнтованому графі множина V складається з неупорядкованих пар вершин. Парою називається множина {u,v}, де u і v належать V.

Якщо в графі є ребро (u,v), то говорять, що вершина u суміжна з вершиною v. Для неорієнтованих графів відношення суміжності є симетричним.

Шлях довжини k з вершини u у вершину v визначається як послідовність вершин v0, v1, v2, … vk, у який v0 = u, vk = v, а (vi-1, vi) – ребро графа.

Пошук у глибину – ще один спосіб обходу графу. Він застосовується в таких алгоритмах, як алгоритм топологічного сортування, алгоритм пошуку сильно зв'язаних компонентів.

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

Знайшовши уперше вершину v, суміжну з u, ми відзначаємо цю подію, записуючи в поле ?[v] значення u. Утворюється дерево чи кілька дерев.

Як і пошук у ширину, алгоритм пошуку в глибину використовує кольори вершин. Спочатку усі вершини - білі. При виявленні нової вершини, вона фарбується в сірий колір. Коли вершина цілком оброблена, вона фарбується в чорний колір.

Крім цього пошук у глибину ставить на вершинах мітки часу. Кожна вершина має дві мітки: d[v] показує, коли вершина була виявлена, f[v] - коли оброблена. Ці мітки використовуються в багатьох алгоритмах на графах. Під час виконання цього алгоритму, обробка кожної вершини відбувається рівно один раз. Отже, складність роботи даного алгоритму становить O(V+E), де V – кількість вершин у графі, а E – кількість ребер.

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