
Маршрут |
s (s0 , s1, sm ), |
s V m 1 |
|
i (si 1, si ) |
|
mдлина маршрута
Веса ребер w RE
Вес маршрута – сумма весов ребер
m
w({si 1, si })
i 1

Упорядоченность значений весов ребер
Требование в задачах поиска маршрута минимального веса
Для значений определена
коммутативная и ассоциативная операция суммирования
a+b, |
Специальные |
|
значения |
причём a a+b. |
0 a & a+0=a |
|
|
Веса не уменьшаются при суммировании. |
a ∞ & a+∞=∞ |
|

Матрица весов рёбер W
Множество вершин занумеровано: V={v1, v2, …, vn}.
Форма представления результата
Пара матриц (L, P):
Матрица минимальных весов маршрутов L организована аналогично матрице весов рёбер: её элементы Lij представляют
собой минимальный вес маршрута из вершины vi в вершину vj.
Матрица маршрутов P. Вместо того, чтобы представить результат списком маршрутов, используем для них представление, основанное на следующем принципе: если s0s1s3…sk – маршрут минимального веса из k рёбер из вершины
s0=vi в вершину sk=vj, то s1s2…sk – маршрут минимального веса из k 1 рёбер из вершины s1 в вершину sk.

Извлечение маршрута из матрицы P
s0=vi, k1=Pij, s1=vk1, k2=Pk1j, s2=vk2, k3=Pk2j, s3=vk3 … sm=vkm=vj
Построение маршрута s0s1…sm заканчивается, когда
на очередном шаге извлечения маршрута из матрицы P в столбце j встречается сам номер j конечной вершины.
Если вершины не связаны, уже на первом шаге будет обнаружено Pij=0.

Алгоритм Уоршалла
Начальные условия

Шаги алгоритма
Последовательность промежуточных результатов:
(L0, P0) → (L1, P1) → (L2, P2) →… → (Lk-1, Pk-1) → (Lk, Pk) → … (Ln, Pn)
Частичное решение: (Lk, Pk)
Условие:
(Lk, Pk) – множество маршрутов минимального веса при условии, что промежуточными вершинами могут быть только вершины с номерами от 1 до k.
(L0, P0) – без промежуточных вершин: только одношаговые маршруты.
(L1, P1) – одношаговые или только через вершину № 1.
(L2, P2) – одношаговые или только через вершины №№ 1 и/или 2.
…
(Ln, Pn) – искомое решение.

Шаг № k алгоритма: (Lk-1, Pk-1) → (Lk, Pk)
Как можно улучшить частичное решение, если в дополнение к вершинам 1,2,…k-1 допустить вершину k в качестве промежуточной?
|
|
|
|
L(ijk 1) |
|
|
|
Wi,P( k 1) |
v |
|
… |
|
vj |
||
( k 1) |
|
|
|
||||
ij |
|
Pij |
|
|
|
|
|
vi |
|
|
|
|
|
|
|
Wi,Pik( k 1) |
vPik( k 1) |
|
|
|
|
… |
|
… |
|
v |
k |
vP( k 1) |
|||
|
|
|
|
|
|
kj |
|
|
|
L(ikk 1) |
|
|
|
L(kjk 1) |
|
|
|
|
L(ikk 1) L(kjk 1) |
|

