Заглавная страница Избранные статьи Случайная статья Познавательные статьи Новые добавления Обратная связь FAQ Написать работу КАТЕГОРИИ: АрхеологияБиология Генетика География Информатика История Логика Маркетинг Математика Менеджмент Механика Педагогика Религия Социология Технологии Физика Философия Финансы Химия Экология ТОП 10 на сайте Приготовление дезинфицирующих растворов различной концентрацииТехника нижней прямой подачи мяча. Франко-прусская война (причины и последствия) Организация работы процедурного кабинета Смысловое и механическое запоминание, их место и роль в усвоении знаний Коммуникативные барьеры и пути их преодоления Обработка изделий медицинского назначения многократного применения Образцы текста публицистического стиля Четыре типа изменения баланса Задачи с ответами для Всероссийской олимпиады по праву Мы поможем в написании ваших работ! ЗНАЕТЕ ЛИ ВЫ?
Влияние общества на человека
Приготовление дезинфицирующих растворов различной концентрации Практические работы по географии для 6 класса Организация работы процедурного кабинета Изменения в неживой природе осенью Уборка процедурного кабинета Сольфеджио. Все правила по сольфеджио Балочные системы. Определение реакций опор и моментов защемления |
Нахождение кратчайших маршрутовСодержание книги
Поиск на нашем сайте
Пусть G = (М, R) — взвешенный граф, имеющий п вершин и матрицу весов W = (wij), Î R. Опишем некоторые методы нахождения взвешенного расстояния от фиксированной вершины ai Î М (называемой источником) до всех вершин графа G. Мы будем предполагать, что в G отсутствуют контуры с отрицательным весом, поскольку, двигаясь по такому контуру достаточное количество раз, можно получить маршрут, имеющий вес, меньший любого заведомо взятого числа, и тем самым задача нахождения расстояния становится бессмысленной. Определим алгоритм Форда-Беллмана. Зададим строку D(1) = (d1(1), d2(1),…, dn(1)), полагая di(1) = 0, dj(1) = wij, i ¹ j. В этой строке dj(1) (j ¹ i) есть вес wij дуги (ai ¹ aj), если (ai,aj) существует, и dj(1) = ¥, если (ai,aj) Î R. Теперь определим строку D(2) = (d1(2), d2(2),…, dn(2)), полагая dj(2) = min{ dj(1), dk(1) + wkj } k=1,…,n. Нетрудно заметить, что dj(2) — минимальный из весов (ai,aj)-маршрутов, состоящих не более чем из двух дуг (рис. 4.24). Продолжая процесс, на шаге s определим строку D(s) = (d1(s), d2(s),…, dn(s)), полагая dj(s) = min{ dj(s-1), dk(s-1) + wkj } k=1,…,n. Искомая строка, w -расстояний получается при s = n - 1: dj(n-1) = Пример 4.5.1. Продемонстрируем работу алгоритма Форда-Беллмана на примере взвешенного графа, показанного на, рис 4.25, с матрицей весов 0 1 ¥ ¥ 3 ¥ 0 3 3 8
¥ ¥ 2 0 ¥ ¥ ¥ ¥ 4 0 В качестве источника выберем вершину 1. Тогда D(1) = (0,1,¥,¥,3), D(2) = (0,1,4,4,3), D(3) = (0,1,4,4,-1), D(4) = (0,1,4,3,-1). Таким образом, pw (1,1) = 0, pw (1,2) = 1, pw (1,3) = 4, pw (1,4) = 3, pw (1,5) = -1. Отметим, что, зная расстояние от источника ai до всех остальных вершин графа, можно найти и сами кратчайшие (ai,aj)-маршруты. Действительно, пусть ai,b1,b2,…,br,aj кратчайший (ai,aj)-маршрут. Тогда по строке D(n-1) вершина br = находится из соотношения pw (ai,aj) = pw (ai, ) + , вершина br-1 = — из соотношения pw (ai, ) = pw (ai, ) + , и т. д. Пример 4.5.2. В примере 4.5.1 кратчайший (1,4)-маршрут определяется следующим образом: pw (1,4) = 3 = -1 + 4 = pw (1,5) + w 54, тогда br = 5; pw (1,5) = -1 = 4 - 5 = pw (1,3) + w 35, откуда br-1 = 3; pw (1,3) = 4 = 1 + 3 = w 12 + w 23, следовательно, br-1 = b2 = 3, br-3 = b1 = 2. Таким образом, кратчайший (1,4)-маршрут задается последовательностью вершин (1,2,3, 5,4). Алгоритм Дейкстры является более эффективным, чем алгоритм Форда-Беллмана, но используется только для взвешенных графов, в которых веса всех дуг неотрицательны. Итак, пусть G = (M,R)— взвешенный граф, W = (wij)— матрица весов графа G, где wij ³ 0; ai; — выделенный источник. Зададим строку D(1) = (d1(1), d2(1),…, dn(1)), полагая, как и в алгоритме Форда-Беллмана, di(1) = 0, dj(1) = wij, i ¹ j, Обозначим через T1 множество вершин M \{ ai }. Предположим, что на шаге s уже определены строка D(s) = (d1(s), d2(s),…, dn(s)) и множество вершин Ts. Выберем теперь вершину aj Î Ts так, что dj(s) = min{ dk(s) | ak Î Ts }. Положим Тs+1 = Тs \{ аj }, D(s+1) = (d1(s+1),…, dn(s+1)), где dk(s+1) = min{ dk(s), dj(s) + wjk }, если ak Î Тs+1. На шаге s = n -1 образуется строка D(n-1) w -расстояний между вершиной аi и остальными вершинами графа: dj(n-1) = рw{аi,aj). Отметим, что для реализации алгоритма Форда-Беллмана требуется порядка n3 операций, тогда как в алгоритме Дейкстры необходимо выполнить порядка n2 операций. Пример 4.5.3. Рассмотрим взвешенный граф G с матрицей весов 0 1 ¥ ¥ ¥ ¥ ¥ 0 5 2 ¥ 7
2 ¥ 1 0 4 ¥ ¥ ¥ ¥ 3 0 ¥ ¥ ¥ ¥ ¥ 1 0 и источником 1 (рис. 4.26). Тогда по алгоритму Дейкстры T1 = {2,3,4,5,6}, D(1) = (0, 1,¥,¥,¥,¥), T2 = {3,4,5,6}, D(2) = (0,1,6, 3,¥,¥), T3 = {3,5,6}, D(3) = (0,1, 4,3,7,8), T4 = {5,6}, D(4) = (0,1,4,3,7, 5); T5 = {5}, D(5) = (0,1,4,3,6,5) (в D(s) подчеркнута величина dj(s), для которой Ts.+1 = Ts \{ aj }). Таким образом, рw (1,1) = 0, рw (1,2) = 1, рw (1,3) = 4, рw (1,4) = 3, рw (1,5) = 6, рw (1,6) = 5. □ Опишем теперь алгоритм нахождения кратчайших маршрутов, в бесконтурном графе. Так же, как и в алгоритме Дейкстры, для выполнения этого алгоритма необходимо порядка п2 операций. Прежде всего заметим, что в конечном бесконтурном графе G = (М,R)вершины можно перенумеровать так, что каждая дуга будет иметь вид (ai,aj), где i < j. Действительно, в конечном бесконтурном графе всегда существует вершина а, в которую не заходит ни одна дуга. Обозначим эту вершину через а1 и рассмотрим граф G1,полученный из G удалением вершины а1. Граф G1 также является бесконтурным и, следовательно, содержит вершину a¢, в которую не заходит ни одна дуга графа G1. Вершину a¢ обозначим через а2, а граф, полученный из G1 удалением вершины а2 — через G2. Продолжая процесс, получим в результате искомую нумерацию a1, a2,…, an вершин графа G. Пример 4.5.4. На рис. 4.27 приведен пример нумерации вершин бесконтурного взвешенного графа, при которой из (ai,aj) Î R. следует i < j (в скобках указаны веса взвешенных дуг). □ Предположим, что в бесконтурном графе G = ({ a1,…, an }, R)для произвольной дуги (ai,aj)выполняется условие i < j. Заметим, что при такой нумерации все элементы матрицы весов, стоящие под главной диагональю, равны ¥. Найдем расстояние от ai до всех вершин графа. Рассмотрим строку D(1) = (d1(1), d2(1),…, dn(1)), где d1(1) = 0, dj(1) = w1j, j ³ 2. Если на шаге s строка D(s) = (d1(s), d2(s),…, dn(s)) определена, положим D(s+1) = (d1(s+1), d2(s+1),…, dn(s+1)), где dj(s+1) = min{ dj(s), dk(s) + wkj }, для k < j и Î R, j = 1,…, n. Данный алгоритм является аналогом алгоритма Форда-Беллмана, учитывающим бесконтурность графа. G, и при s = п – 1 получаем dj(n-1) = pw (a1,aj) Пример 4.5.5. Для графа G (рис. 4.27) имеем 0 1 ¥ 2 ¥ ¥ 1 ¥ ¥ 0 -2 ¥ 7 ¥ ¥ ¥ ¥ ¥ 0 ¥ ¥ 10 ¥ ¥
¥ ¥ ¥ ¥ 0 6 ¥ 1 ¥ ¥ ¥ ¥ ¥ 0 ¥ ¥ ¥ ¥ ¥ ¥ ¥ ¥ 0 3 ¥ ¥ ¥ ¥ ¥ ¥ ¥ 0 D(1) = (0,1,¥,2,¥,¥,1,¥), D(2) = (0,1,-1,2,-3,¥,1,4), D(3) = (0,1,-1,2,-3,3,1, Отметим, что если в приведенных алгоритмах ¥ заменить на -¥, min — на max, то получим алгоритмы, которые позволяют в графах, не имеющих контуров положительных весов, находить маршруты наибольшей длины.
|
||||||||||||||
Последнее изменение этой страницы: 2016-04-07; просмотров: 469; Нарушение авторского права страницы; Мы поможем в написании вашей работы! infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 52.14.66.242 (0.011 с.) |