![]() |
Архитектура Аудит Военная наука Иностранные языки Медицина Металлургия Метрология Образование Политология Производство Психология Стандартизация Технологии |
АЛГОРИТМЫ ПОСТРОЕНИЯ КРАТЧАЙШИХ ПУТЕЙ В ГРАФЕ И КРАТЧАЙШЕГО ОСТОВА ГРАФА
Цель работы: изучение алгоритмов на графах Теоретические сведения 1. Построение кратчайшего пути между двумя вершинами. Для построения такого пути нужно вначале определить кратчайшие расстояния от фиксированной начальной вершины до всех вершин графа, а затем восстановить кратчайший путь от этой вершины до заданной конечной вершины. Для определения кратчайших расстояний от фиксированной начальной вершины до всех вершин ориентированного графа воспользуемся алгоритмом Форда-Беллмана. Обозначим через C – матрицу весов дуг графа (вес несуществующей дуги в задачах поиска минимума расстояний считаем равным +¥ ), D – массив кратчайших расстояний от начальной вершины s до всех вершин графа (полагаем { for ( for ( for ( for ( } Для произвольного ориентированного графа, не содержащего циклы отрицательного веса, такие кратчайшие расстояния можно вычислить максимум за Количество итераций вычисления массива D можно уменьшить, сравнивая массивы в конце текущей и предыдущей
итерации (аналогично, алгоритмам сортировки). Если значения массива D не изменились на данной итерации, то вычисления заканчиваются. Алгоритм восстановления кратчайшего пути от начальной вершины s до конечной вершины t использует механизм стека. В нём применяются следующие обозначения: 1) СТЕК 2) { СТЕК: =Æ; СТЕК while ( { for ( if (
} } Конечная вершина пути заносится в стек, и пока верхушка стека v не совпадёт с начальной вершиной s, будет определяться предыдущая вершина пути u, т.е. вершина, на которой достигается минимум. 2. Построение кратчайшего остова. Напомним, что остовом называется остовный подграф, который является деревом. Остов, суммарный вес которого минимален, называется кратчайшим остовом. Для построения кратчайшего остова воспользуемся алгоритмом Краскала. Обозначим через Предварительно рёбра упорядочиваются в порядке возрастания весов. Обозначим
{ T: = Æ; for ( i = for ( j = { if ( ( {
} } } Для построения остова просматриваются все рёбра графа. Если вершины, инцидентные данному ребру, принадлежат разным компонентам связности остова (т.е. вершины принадлежат разным множествам разбиения), то ребро добавляется в остов, а его вес суммируется с весом остова. Добавление ребра в остов влечёт за собой пересчёт разбиения его множества вершин, при этом два множества разбиения объединяются. В противном случае, добавления ребра не происходит, так как это повлечёт за собой появление цикла в графе. Пример выполнения работы.
1 2 1 1 5 3 2 3 3 2 4 3 2 5 8 3 4 1 3 5 -5 4 3 2 5 4 4
Матрица весов дуг данного графа имеет вид
Пусть
Восстановим кратчайший путь от s до вершины
Следовательно, кратчайший путь между вершинами 1 и 4, длина которого равна 3: 1 ® 2 ® 3 ® 5 ® 4. 2. Рассмотрим неориентированный граф, заданный следующим входным файлом. Построим графическое представление графа, определяемого этим файлом.
1 2 3 1 3 1 1 4 7 2 3 3 2 6 6 3 4 4 3 6 5 4 5 7 5 6 2 5 7 10 6 7 8
Перед построением остова Упорядочим рёбра в порядке возрастания весов. Результат работы алгоритма Краскала оформим в виде таблицы. Обозначим через:
Если ребро графа добавляется в остов (его инцидентные вершины принадлежат разным связным компонентам остова), то
Таким образом кратчайший остов графа суммарного веса
Контрольные вопросы 1. Каким образом находится кратчайший путь между двумя фиксированными вершинами? 2. Объясните основную идею алгоритма Форда-Беллмана. 3. Как определяется кратчайшее расстояние до вершины на каждой итерации? 4. Как восстанавливается кратчайший путь по найденным кратчайшим расстояниям? 5. Что называется кратчайшим остовом? 6. Объясните основную идею алгоритма Краскала. Задание для лабораторной работы. 1. Для ориентированного графа варианта, заданного файлом вида «таблица рёбер», определить вручную кратчайшие расстояния от вершины 1 до всех остальных вершин графа, используя алгоритм Форда-Беллмана. Восстановить кратчайший путь от вершины 1 до вершины графа, имеющей максимальный номер. Отчёт должен содержать: a) текст входного файла, графическое представление графа и матрицу весов дуг; b) выполнение одного шага алгоритма Форда-Беллмана вручную подробно и таблицу пошагового вычисления массива кратчайших расстояний D; c) стек восстановления кратчайшего пути между вершинами 1 и 2. Для неориентированного графа варианта, заданного файлом вида «таблица рёбер» построить кратчайший остов графа, используя алгоритм Краскала. Отчёт должен содержать: a) текст входного файла и графическое представление графа; b) построение вручную кратчайшего остова; c) графическое представление кратчайшего остова. Лабораторная работа №8 Популярное:
|
Последнее изменение этой страницы: 2017-03-11; Просмотров: 1341; Нарушение авторского права страницы