Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
135
Добавлен:
21.03.2016
Размер:
2.79 Mб
Скачать

Тема 9. Размеченные графы. Вес рёбер и вес маршрута. Требования. Задача поиска кратчайшего маршрута. Алгоритм Флойда-Уоршалла.

Вычисление отношения связности позволяет ответить на вопрос, существует ли хотя бы один маршрут из одной вершины в другую, но в процессе вычисления по формуле сами маршруты (последовательности вершин) не вычисляются. Больший интерес вызывает вопрос: как именно выглядит маршрут. Более того, если существует несколько маршрутов, то желательно среди них выбрать (или сразу найти) в определённом смысле «лучший», например, самый короткий по длине, или, если у графа есть разметки, оптимизирующий некоторую функцию от значений разметок элементов маршрута (вершин и рёбер).

Обычно рассматривается граф, в котором рёбра размечены численными значениями, называемымивесамирёбер и рассматривается задача отысканиякратчайшего маршрута– маршрута, обладающегоминимальнымвесом.Весом маршрута называется сумма весов рёбер, входящих в маршрут.

Тип численных значений не столь важен. Пусть aиbнекоторые такие значения. Тогдаabозначаетлинейнуюупорядоченность значений (чтобы любые значения можно было сравнивать).min(ab) означает минимальное в смысле указанной упорядоченности значение:

Для значений определена коммутативная и ассоциативная операция суммирования a+b, причёмaa+b. Это означает, что при суммировании значений сумма не уменьшается.

Это требование важно, если в графе возможны маршруты, многократно проходящие по одному ребру. Если бы требование не выполнялось, вес маршрута можно было бы сделать сколь угодно малым.

Указанному требованию удовлетворяют, например, неотрицательные действительные или целые числа с обычной операцией сложения.

Для поиска кратчайшего пути веса рёбер обычно сводят в матрицу, похожую на матрицу смежности и в определённом смысле заменяющую её – матрица весов рёбер тоже однозначно определяет граф с разметкой рёбер, если в дополнение к значениям-весам ввести дополнительное значение, обозначающее отсутствие ребра. Это значение обычно обозначается символом ∞ и рассматривается как наибольшее возможное значение: a∞ & a+∞=∞. Также будем считать, что значение, обозначенное символом 0, является наименьшим возможным значением: 0a & a+0=a.

Матрица весов рёберWопределяется следующим образом

Здесь w({vivj}) – значение функции разметки рёбер (веса) для ребра {vivj}. Множество вершин занумеровано:V={v1v2, …, vn}.

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

Аналогично можно представлять и ориентированные графы с разметкой весов дуг. При этом матрица весов может оказаться несимметричной. Для возрастающих в суммировании весов петли всё равно можно опустить, так как прокладывание маршрута через петлю или цикл может только увеличить его вес.

Конечный результат поиска маршрутов минимальных весов представим в виде двух матриц (LP):

  • Матрица минимальных весов маршрутов Lорганизована аналогично матрице весов рёбер: её элементыLijпредставляют собой минимальный вес маршрута из вершиныviв вершинуvj.

  • Матрица маршрутов P. Вместо того, чтобы представить результат списком маршрутов, используем для них представление, основанное на следующем принципе: еслиs0s1s3sk– маршрут минимального веса изkрёбер из вершиныs0=viв вершинуsk=vj, тоs1s2sk– маршрут минимального веса изk1 рёбер из вершиныs1в вершинуsk. Это следует из свойств операции суммирования весов. Поэтому, имея в качестве элементов матрицыPследующие значения

можно найти и сами кратчайшие маршруты для любой пары вершин (vivj), или установить, что вершины не связаны. Для этого надо отследить маршрут по матрицеPследующим образом:

s0=vi, k1=Pij, s1=vk1, k2=Pk1j, s2=vk2, k3=Pk2j, s3=vk3sm=vkm=vj

Построение маршрута s0s1smзаканчивается, когда на очередном шаге извлечения маршрута из матрицыPв столбцеjвстречается сам номерjконечной вершины. Если вершины не связаны, уже на первом шаге будет обнаруженоPij=0.

Алгоритм построения матриц LиPопишем пошагово. Каждый шаг означает исследование в графе маршрутов с длиной, равной номеру шага.

На первом шаге положим и.

Это показывает, что при условии, что маршруты имеют длину не более чем 1, веса таких маршрутов есть элементы матрицы весов рёбер. Такие маршруты есть только между связанными вершинами.

Имея L(0)иP(0)найдёмL(1)иP(1)– веса кратчайших маршрутов и сами маршруты, при условии, что длина маршрутов не более чем 2, а промежуточной вершиной является вершинаv1. Выберем, что лучше: связывающее ребро {vi, vj} или маршрутviv1vj. В последнем случае отметим, что первой промежуточной вершиной будетv1. Для данного шага можно было бы написать ипри выборе маршрутаviv1vj, но для последующих шагов такая форма записи удобнее. Сравнения и суммирование проводят с учётом специальных значений 0 и ∞.

В примере получаем (изменённые элементы отмечены квадратными скобками)

Это единственные места, где выполнено условие .

Вообще для последующих шагов получаем рекуррентную формулу

Продолжая пример, получим

На шагах 3 и 4 изменений в матрицах не будет.

Последним будет шаг 5. При этом в матрице будут изменения. Особо заметим .

Это был последний шаг, так как число шагов совпадает с числом узлов. Окончательно получаем:

Посмотрим, как извлечь из матрицы Pмаршрут изv1вv3. Вес этого маршрута будетL13=5. Сам маршрут строится так:

s0=v1, k1=P13=2, s1=v2, k2=P23=5, s2=v5, k3=P53=3, s3=v3

Получаем маршрут v1v2v5v3.

Данный алгоритм поиска кратчайшего пути известен как алгоритм Флойда-Уоршалла. То, что алгоритм действительно решает данную задачу, можно пояснить так. На каждом шаге вычисляется частичный результат, в предположении об определённом максимальном числе промежуточных вершин (но на каждом шагевсевершины рассматриваются как варианты начал и концов маршрутов). При этом и максимальная длина маршрута соответствует числу вершин. На каждом шаге происходит уточнение решения, допуская очередную вершину в качестве промежуточной вершины на маршруте (во все возможные позиции всех маршрутов, ведь в качестве начальных и конечных вершин всегда перебираются все вершины), но и максимальная длина маршрутов увеличивается на 1. Так как кратчайший путь при принятых ограничениях на свойства суммирования весов не может содержать циклов (повторяющихся вершин на маршруте), задача будет решена правильно – максимальная длина кратчайшего маршрута не более числа вершин графа.

Соседние файлы в папке lect