КАТЕГОРИИ: Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748) |
Коротші путі в графі
У реальних задачах на графах часто потрібно брати до уваги додаткову інформацію — фактичну віддаль між окремими пунктами, вартість проїзду, час проїзду тощо. Для цього використовують поняття зваженого графа. Зваженим називають простий граф, кожному ребру є якого приписано дійсне число w(e). Це число називають вагою ребра е. Аналогічно означають зважений орієнтований граф: це такий орієнтований граф, кожній дузі е якого приписано дійсне число w(e), називане вагою дуги. Розглянемо три способи зберігання зваженого графа G = (V, Е) в пам'яті комп'ютера. Нехай Перший — подання графа матрицею ваг W, яка являє собою аналог матриці суміжності, її елемент Другий спосіб — подання графа списком ребер. Для зваженого графа під кожний елемент списку Е можна відвести три комірки — дві для ребра й одну для його ваги, тобто всього потрібно З m комірок. Третій спосіб — подання графа списками суміжності. Для зваженого графа кожний список Adj [ u ] містить окрім покажчиків на всі вершини v; множини Г(u) ще й числа Довжиною шляху в зваженому графі називають суму ваг ребер (дуг), які утворюють цей шлях. Якщо граф не зважений, то вагу кожного ребра (кожної дуги) уважають рівною 1 й отримують раніше введене поняття довжини шляху як кількості ребер (дуг) у ньому. Задача про найкоротший шлях полягає в знаходженні найкоротшого шляху від заданої початкової вершини а до заданої вершини z. Наступні дві задачі — безпосередні узагальнення сформульованої задачі про найкоротший шлях. 1. Для заданої початкової вершини а знайти найкоротші шляхи від а до всіх інших вершин. 2. Знайти найкоротші шляхи між усіма парами вершин. Виявляється, що майже всі методи розв'язання задачі про найкоротший шлях від заданої початкової вершини а до заданої вершини z також дають змогу знайти й найкоротші шляхи від вершини а до всіх інших вершин графа. Отже, за їх допомогою можна розв'язати задачу 1 із невеликими додатковими обчислювальними витратами. З іншого боку, задачу 2 можна розв'язати або п разів застосувавши алгоритм задачі 1 із різними початковими вершинами, або один раз застосувавши спеціальний алгоритм. Розглянемо два алгоритми: перший алгоритм призначений для розв'язування задачі 1, другий — для задачі 2. Найефективніший алгоритм визначення довжини найкоротшого шляху від фіксованої вершини до будь-якої іншої запропонував 1959 р. датський математик Е. Дейкстра. Цей алгоритм застосовний лише тоді, коли вага кожного ребра (дуги) додатна. Опишемо докладно цей алгоритм для орієнтованого графа. Нехай G = (V,E) — зважений орієнтований граф, Описаний процес зручно виконувати за допомогою присвоювання вершинам міток. Є мітки двох типів — тимчасові та постійні. Вершини з постійними мітками групують у множину М, яку називають множиною позначених вершин. Решта вершин має тимчасові мітки, і множину таких вершин позначимо як Т, Т=V\M. Позначатимемо мітку (тимчасову чи постійну) вершини v як l(v). Значення постійної мітки l (d) дорівнює довжині найкоротшого шляху від вершини a до вершини v, тимчасової — довжині найкоротшого шляху, який проходить лише через вершини з постійними мітками. Фіксованою початковою вершиною вважаємо вершину а; довжину найкоротшого шляху шукаємо до вершини z (або до всіх вершин графа). Алгоритм Дейкстри Крок 1. Присвоювання початкових значень. Виконати l (a):=0 та вважати цю мітку постійною. Виконати l (d):= Крок 2. Оновлення міток. Для кожної вершини v Крок 3. Перетворення мітки в постійну. Серед усіх вершин із тимчасовими мітками знайти вершину з мінімальною міткою, тобто знайти вершину v* з умови l (v*)=min{ l (v*)}, v Крок 4. Уважати мітку вершини v* постійною й виконати M:=M Крок 5. а) Для пошуку шляху від а до z: якщо x =z, то l (z) — довжина найкоротшого шляху від а до z, зупинитись; якщо x б) Для пошуку шляхів від а до всіх інших вершин: якщо всі вершини отримали постійні мітки (включені в множину М), то ці мітки дорівнюють довжинам найкоротших шляхів, зупинитись; якщо деякі вершини мають тимчасові мітки, то перейти до кроку 2. Якщо граф подано матрицею суміжності, складність алгоритму Дейкстри становить 0{ п 2}. Коли кількість дуг m значно менша., ніж п 2, то найкраще подавати орієнтований граф списками суміжності. Тоді алгоритм можна реалізувати зі складністю 0(m log n), що в цьому разі істотно менше, ніж 0(п2). Ми розглянули задачу відшукання в графі найкоротшого шляху від якоїсь виділеної (початкової) вершини до будь-якої іншої. Розглянемо задач;' пошуку в графі найкоротшого шляху між кожною парою вершин. Звичайно, цю загальнішу задачу можна розв'язати багатократним застосуванням алгоритму Дейкстри з послідовним вибором кожної вершини графа як початкової. Проте є й прямий спосіб розв'язання цієї задачі за допомогою алгоритму Флойда. У ньому довжини дуг можуть бути від'ємними, проте не може бути циклів із від'ємною довжиною. Нехай G= (V. Г) — орієнтований граф. Нагадаємо, що внутрішні вершини шляху а, х1, х2,..., хт-1, b в графі G — х1, х2,..., хт- 1. Наприклад, внутрішні вершини шляху а, с, d, a, f, b — с, d, a, f. Пронумеруємо вершини графа цілими числами від 1 до п. Позначимо як В алгоритмі Флойда як початкову беруть матрицю 1. Найкорогший шлях із вершини і у вершину k, у якому як внутрішні використано лише перші (k-1) вершин. 2. Найкоротший шлях із вершини k у вершину j, у якому як внутрішні використано лише перші (k-1) вершин. 3. Найкоротший шлях із вершини і у вершину j, у якому як внутрішні використано лише перші (k - 1) вершин. Оскільки за припущенням граф G не містить циклів із від'ємною довжиною, то один із двох шляхів — шлях із п. З чи об'єднання шляхів із пп. 1 і 2 — найкоротший шлях із вершини і у вершину j, у якому як внутрішні використано лише перші (k-1) вершин. Отже,
Зі співвідношення видно, що для обчислення елементів матриці Алгоритм Флойда Крок 1. Присвоювання початкових значень. Пронумерувати вершини графа G цілими числами від 1 до п. Побудувати матрицю Крок 2. Цикл. Для k, що послідовно набуває значення 1, 2,..., п, визначити за елементами матриці Після закінчення цієї процедури (і, j)-елемент матриці Якщо під час роботи алгоритму для якихось k й і виявиться, що, Якщо заздалегідь відомо, що в графі G немає циклів із від'ємною довжиною, то обсяг обчислень можна дещо зменшити. У цьому разі для всіх і та всіх k має бути
Дата добавления: 2014-01-07; Просмотров: 966; Нарушение авторских прав?; Мы поможем в написании вашей работы! |