Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Структуры и алгоритмы / графы_задачи1.doc
Скачиваний:
98
Добавлен:
23.02.2015
Размер:
1.58 Mб
Скачать
    1. Алгоритм вычисления стоимости прохождения между узлами

Вход. Орграф G = (V, E), где V = {v1, …, vn}, l – функция разметки такая, что l: (V V) S, где (S, +, , 0, 1) – замкнутое полукольцо. Полагаем, l(vi, vj) = 0, если (vi, vj) E.

Выход. Для любых i и j, изменяющихся в диапазоне от 1 до n найти элемент c(vi, vj) S. Это сумма по всем путям из vi, в vj меток этих путей.

Метод. Вычисляем

Эта величина равна сумме меток путей, идущих из vi, в vj, все узлы которых, кроме, может быть, концевых, принадлежат множеству {v1, v2, …, vk}. Например, путь v9, v3, v8 рассматривается при вычислении

, но не рассматривается при вычислении .

Таким образом, это сумма меток всех путей из vi, в vj, не содержащих промежуточных узлов с индексами больше k.

Алгоритм

На основе алгоритма вычисления стоимости строится решение задачи нахождения кратчайшего пути в графах. Для этого представленный алгоритм требует небольшой модификации.

    1. Алгоритм нахождения кратчайшего пути

Неформально можно сказать, что кратчайшим путем из vi в vj, не проходящим через узлы, индексы которых больше k, будет более короткий из следующих двух путей:

  • кратчайший путь, не проходящий через узлы, индексы которых больше k-1;

  • кратчайший путь из vi в vk и затем в vj, не проходящий через другие узлы, индексы которых больше k-1, то есть

Чтобы превратить алгоритм вычисления стоимости в алгоритм нахождения кратчайшего пути, зададим l(vi, vj) как стоимость ребра (vi, vj), если оно есть, и + - иначе.

Теперь заменим строку 5 алгоритма последней формулой. Значение c(vi, vj), полученное с помощью алгоритма, будет наименьшей стоимостью, (то есть суммой стоимостей ребер) пути из всех путей между vi и vj.

Например, рассмотрим граф G = (V, E) (рис.15).

Рис.15. Ориентированный граф

Результат работы алгоритма принято оформлять в виде совокупности таблиц, каждая из которых содержит сумму меток путей, идущих из vi в vj, но проходящих через вершины, индексы которых не больше чем k.

l(vi, vj)

v1

v2

v3

v1

2

8

5

v2

3

v3

2

Cij, k=0

v1

v2

v3

v1

0

8

5

v2

3

0

v3

2

0

Cij, k=1

v1

v2

v3

v1

0

8

5

v2

3

0

8

v3

2

0

Cij, k=2

v1

v2

v3

v1

0

8

5

v2

3

0

8

v3

5

2

0

Cij, k=3

v1

v2

v3

v1

0

7

5

v2

3

0

8

v3

5

2

0

    1. Задачи с одним источником

Во многих приложениях достаточно находить кратчайшие пути только из одного узла. Такой узел называется источником.

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

Если стоимости ребер неотрицательны, то можно быть уверенным, что путь из источника в произвольный узел проходит только через узлы из множества S. Поэтому достаточно найти для каждого узла v кратчайшее расстояние до него от источника вдоль пути, проходящего только через узлы из множества S.