Студопедия.Орг Главная | Случайная страница | Контакты | Мы поможем в написании вашей работы!  
 

Лекция 3. Кратчайшие пути между всеми парами узлов



Рассмотрим задачу поиска кратчайших путей между всеми парами узлов сети.

Пусть , , , …, , - кратчайший путь из Vi в Vq. Тогда кратчайший путь из Vi в Vj должен представлять собой единственную дугу еij, кратчайший путь из Vj в Vk — дугу ejk, и т. д.

Назовем дугу еij базисной, если она представляет собой кратчайший путь из Vi в Vj. Из данного определения следует, что кратчайший путь состоит только из базисных дуг.

Алгоритм, который мы опишем, заменяет все небазисные дуги базисными. Т.е., алгоритм строит дуги, соединяющие каждую пару узлов, не соединенную базисной дугой. Длина каждой построенной дуги равна крат­чайшему расстоянию между двумя узлами. Для данного узла Vj рассмотрим следующую простую операцию:

(3.1)

Операция выполняется для каждого фиксированного j и всевозможных i и k, не равных j. Для трех узлов Vj, Vj и Vk и трех дуг с длинами dik, dij и djk данная операция сравнивает длину дуги еik, с длиной пути, состоящего из двух дуг, с промежуточным узлом Vj. Этот случай показан на рис. 8. Операция (2.1) называется тройственной операцией.

Рис. 8.

Для всевозможных пар узлов Vi и Vk, смежных с Vj, выполним следующие операции.

- Если dik dij + djk, то никаких действий не производим.

- Если dik > dij + djk,, то создаем новую дугу, ведущую из Vi в Vk с dik = dij + djk.

Схема алгоритма:

1) Фиксируем j = 1 и выполняем тройственную операцию (3.1) для всех i, k = 2,3,..., n.

2) Фиксируем j = 2 и выполняем тройственную операцию (3.1) для всех i, k = 1, 3,..., n.

Замечание. Все новые дуги, добавленные при j = 1, используются далее при j = 2, и т.д.

Как только все тройственные операции будут выполнены для j = n, сеть будет состоять только из базисных дуг и, числа, приписанные каждой ориентированной дуге, ведущей из Vp в Vq, являются кратчайшими расстояниями из Vp в Vq. Докажем это утверждение на примере.

В исходной сети рассмотрим любой кратчайший путь из Vp в Vq. Кратчайший путь должен состоять из базисных дуг этой сети. Если в результате тройственной операции создается дуга с длиной, равной сумме длин всех ба­зисных дуг кратчайшего пути, то это докажет корректность алгоритма.

Рассмотрим кратчайший путь, изображенный на рис. 9.

Рис. 9.

При j = 1 тройственная операция создает новую дугу с d 63 = d 61 + d 13.

При j = 2 тройственная операция никак не скажется на данном отдельном кратчайшем пути.

При j = 3 дуга с d 63 = d 61 + d 13 уже построена, следовательно, тройствен­ная операция построит дугу с d 63 = d 63 + d 39 = (d 61 + d 13) + d 39.

При j = 4 будет построена дуга с d 26 = d 24 + d 46.

При j = 6 будет построена дуга длины d 29= d 26 + d 69=(d 24 + d 46) + (d 63 + d 39)= d 24 + d 46 + d 61 + d 13 + d 39.

На рис. 9 построенные дуги изображены пунктирной линией. Числа рядом указывают порядок, в котором эти дуги появлялись. Таким образом, базисная дуга е 63 построена первой, а базисная дуга е 69 построена второй. Некоторые базисные дуги, которые также будут построены в результате тройственной операции, например, e 41, не изображены на рисунке, так как они не влияют на рассматриваемый кратчайший путь.

Замечание 1. Любая из дуг, построенная в результате тройственной операции, не может быть заменена другой дугой или путем меньшей длины. Противное противоречило бы тому, что исходный путь — кратчайший.

Замечание 2. Если в сети отсутствуют отрицательные циклы, то любой кратчайший путь должен быть простым и должен состоять не более чем из n - 1 дуг и не более чем из n - 2 различных промежуточных узлов.

Приведенный алгоритм легко может быть запрограммирован на компьютере. Длины дуг сети с n узлами могут быть заданы массивом n х n.

Пример 3.1. Для сети, изображенной на рис. 10, матрица расстояний представлена в таблице 1.

Рис. 10. Сеть, пример 2

При j = 1 мы сравниваем каждый элемент di,k () с dj ,1 + d 1, k.

Если di,k > dj ,1 + d 1, k, то элемент di,k заменяется на эту сумму. В противном случае элемент не меняется.

Табл. 1. Матрица расстояний, пример 2

узел          
       
         
       
         
       

При j = 2 мы сравниваем каждый элемент di,k () с dj ,2 + d 2, k. Минимум из чисел di,k и dj ,2 + d 2, k становится новым значением элемента di,k.

Замечание 3. В описанных вычислениях при j = 2 мы использовали результаты, полу­ченные при j = 1.

Для фиксированного значения j мы должны просмотреть элементы в (n — 1) х (n — 1) матрице (диагональные элементы всегда равны 0). Каждый элемент сравнивается с суммой двух других элементов: один из той же строки и один из того же столбца. Алгоритм завершает свою работу, когда мы заканчиваем вычисления для j = n.

Замечание 4. Все длины в неориентированной сети симметричны, поэтому достаточно вычислить только одну из двух длин.

Решение примера 2.1. Выполним тройственную операцию для j = 1,2,3,4,5 и запишем только вычисления, которые приводят к изменению в матрице расстояний.

При j = 1

d 25 = min{ d 25, d 21 + d 15} = min{∞, 1 + 4} = 5.

Изменения расстояний занесены в табл. 2

Табл. 2.

узел          
       
           
       
         
         

При j = 2

d 13 = min{ d 13, d 12 + d 23} = min{∞, 1 + 5} = 6,

d 14 = min{ d 14, d 12 + d 24} = min{∞, 1 + 1} = 2,

d 35 = min{ d 35, d 32 + d25} = min{∞, 5 + 5} = 10.

Изменения расстояний занесены в табл. 3.

При j = 3

изменений нет.

При j = 4

d 13 = min{ d 13, d 14 + d 43} = min{6, 2 + 2} = 4,

d 15 = min{ d 15, d 14 + d 45}= min{4, 2 + 1} = 3,

d 23 = min{ d 23, d 24 + d 43} = min{5, 1 + 2} = 3,

d 25 = min{ d 25, d 24-+ d 45} = min{5, 1 + 1} = 2,

d 35 = min{ d 35, d 34 + d 45} = min{10, 2 + 1} = 3.

Изменения расстояний занесены в табл. 4

Табл. 3.

узел          
           
          5
           
           
    5      

Табл. 4.

узел          
           
           
           
           
           

При j = 5изменений нет.

Кратчайшие расстояния между каждой парой узлов найдены. Итоговая таблица кратчайших расстояний – это табл. 4. Но необходимо найти промежуточные (внутренние) узлы для кратчайших путей.

Чтобы зафиксировать порядок, в котором появляются эти узлы, мы используем матрицу [ pi,k ],в которой элемент i -ой строки и k -ro столбца указывает на первый внутренний узел в пути из Vi в Vj,. Если Рik = j, то кратчайший путь имеет вид Vi, Vj,..., Vk. Далее, если pj,k = s, то кратчайший путь имеет вид Vi,Vj, Vs,..., Vk. Изначально мы полагаем Pi,k = k для всех i, k. Например, таблице 1 соответствует таблица 5.

Таблица 5. Начальная таблица промежуточных узлов

узел          
           
           
           
           
           

.

Таким образом, предполагается, что каждая дуга — базисная (до тех пор, пока не установлено обратное), и первым внутренним узлом на пути из Vi в Vk является сам Vk.

Во время выполнения тройственной операции над таблицей 1 мы также обновляем данные в таблице промежуточных узлов. Элементы таблицы промежуточных узлов изменяются согласно следующему правилу:

pi,k = (3.2)

Например, когда мы присваиваем элементу d 25 значение d21 + d15 = 5, мы также полагаем

p 25 = p 21 = 1.

Когда мы присваиваем элементу d 14значение d 12+ d 24 = 2, мы также полагаем

p 14 = p 12 = 2.

Когда мы присваиваем элементу d 15 значение d 14 +d 45, = 2, мы также полагаем

p 15 = p 14 = p 12 = 2.

Когда мы присваиваем элементу d25 значение d 24+ d 45 = 2, мы также полагаем

p 25 = p 24 = 4.

Итак, по окончании вычислений мы имеем

p 15 = 2, p 25 = 4.

Так как дуга e 45 — базисная, то на протяжении всех вычислений р 45 = 5.

p 15 = 2 означает, что V 2есть первый промежуточный узел на пути из V 1в V 5.

p 25 = 4 означает, что V 4 есть первый промежуточный узел на пути из V 2 в V5.

p 45 = 5 означает, что V 5 есть первый промежуточный узел на пути из V 4в V5.

Таким образом, мы можем выписать все промежуточные узлы на пути из V 1 в V 5 ими являются V 1, V 2, V 4и V 5.

В общем случае, чтобы найти кратчайший путь из Vg в Vt, мы находим первый промежуточный узел pgt.

Если pst = a, то ищем pat =?

Если pat = b, то ищем рbt =?

Эти действия завершаются, когда pzt=t. Тогда Vs, Va, Vb,..., Vz, Vt — узлы кратчайшего пути.

Элементы таблицы 5 изменяются по формулам (3.2) в то же самое время, когда элементы таблицы 1 изменяются по формулам (3.1). В конце вычислений по формулам (3.1), когда мы получаем таблицу 4 кратчайших расстояний, мы также получаем таблицу 6 промежуточных узлов, вычисленную по формулам (3.2).

Табл. 6. Таблица промежуточных узлов. Пример 2.1

узел          
           
           
           
           
           

Замечание 5. Несмотря на то, что таблица 1 симметрична, таблица 6 таковой не является. Для того, чтобы получить всю таблицу 6, мы должны провести все вычисления над таблицей 1, а не только половину вычислений, которые мы выполнили в примере.

Например, когда мы полагаем d 25 = d 51 + d 12 = 5, мы также должны выполнить присваивания p 52 = p 51 = 1.





Дата публикования: 2014-11-02; Прочитано: 559 | Нарушение авторского права страницы | Мы поможем в написании вашей работы!



studopedia.org - Студопедия.Орг - 2014-2024 год. Студопедия не является автором материалов, которые размещены. Но предоставляет возможность бесплатного использования (0.014 с)...