<<
>>

Алгоритм Форда (случай общей матрицы весов)

Алгоритм Дейкстры применим лишь в том случае, когда для всех i и j. Однако если матрица С является матрицей стоимостей, то дуги, приносящие доход, должны иметь отрицательные «стоимости».

В этом случае для нахождения кратчайших путей между вершиной s и всеми другими вершинами можно воспользоваться описанной ниже процедурой. Этот метод также является итерационным и основан на пометках вершин, причем в конце k-й итерации пометки равны длинам тех кратчайших путей (от s ко всем остальным вершинам), которые содержат не более k+1 дуг. В отличие от алгоритма Дейкстры никакая из пометок во время этого процесса не рассматривается как окончательная. Описываемый метод был первоначально предложен Фордом.

Описание алгоритма Форда:

Пусть - пометка вершины в конце (k+1)–й итерации.

Шаг 1. Положить S=Г(s), k=1, , для всех и для всех остальных xi.

Шаг 2. Для каждой вершины () изменить ее пометку следующим образом:

,

где (множество содержит те вершины, для которых текущие кратчайшие пути из s состоят из k дуг и для которых существуют дуги к вершине xi.). Для вершин положим .

Шаг 3.

1. Если и для всех xi, то получен оптимальный ответ и пометки равны длинам кратчайших путей.

2. Если и для некоторой вершины xi, то перейти к шагу 4.

3. Если и для некоторой вершины xi, то в графе существует цикл отрицательного веса и задача не имеет решения.

Шаг 4. Обновить множество S следующим образом:

.

Шаг 4. Положить и перейти к шагу 2.

Также можно привести общую матрицу весов к неотрицательной, увеличив вес каждого ребра на величину и найти кратчайшие пути между вершиной s и всеми другими вершинами с помощью алгоритма Дейкстры.

<< | >>
Источник: Теория графов. Лекция. 2017

Еще по теме Алгоритм Форда (случай общей матрицы весов):

  1. II. КЛАССИЧЕСКАЯ ПОЛИТИЧЕСКАЯ ЭКОНОМИЯ