Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лекция Алгоритмы на графах.doc
Скачиваний:
103
Добавлен:
20.06.2014
Размер:
1.78 Mб
Скачать

Нахождение дерева покрытия с помощью

Результат работы алгоритма – дерево покрытия (ориентированное) . Пусть - вершина, с которой начинается поиск.

  1. ; ; ; // адрес 1-ой ячейки

; // адрес последней ячейки

  1. ; ;

  2. ;

  3. Если вершина уже просмотрена, то  п.5. Иначе ; ;  п.5.

  4. Если , то  и.6, иначе и  п.4.

  5. ;

  6. Если , то конец, иначе  п.2.

Чтобы найти остов несвязного графа, нужно для каждой компоненты связности построить дерево покрытия.

    1. Остов минимального веса (кратчайший остов)

  1. Граф (ориентированный или неориентированный), каждому ребру которого сопоставлено число, будем называть взвешенным. Число, сопоставленное ребру, будем называть весом или длиной ребра.

  2. Остов минимального веса – остов, сумма весов рёбер которого минимальна по сравнению с другими остовами.

Замечание. Далее мы будем рассматривать взвешенные графы.

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

Для решения задачи нахождения минимального остова имеются эффективные алгоритмы. Опишем некоторые из них – алгоритм Краскала и Прима, применимые к произвольно связному графу.

Задача об остове минимального веса:

В связном взвешенном графе порядка найти остов минимального веса,

  1. функция, ставящая в соответствие ребру графа некоторый вес .

Алгоритм Краскала.

  1. Строим граф , присоединяя к пустому графу ребро минимального веса.

  2. Если граф уже построен и , то строим граф где - ребро графа , имеющее минимальный вес среди ребер, не входящих в и не составляющих циклов с рёбрами из .

Рассмотрим граф:

Алгоритм Прима.

  1. Выбираем ребро минимального веса и строим дерево , пологая .

  2. Если дерево порядка - уже построена и , то среди рёбер, вершины этого дерева с вершинами графа , не входящими в , выбираем ребро минимального веса. Строим дерево , присоединяя к ребро вместе с его не входящими в концами.

В некоторых ситуациях требуется построить остов не минимального а, максимального веса. К этой задаче также применимы оба алгоритма. Следует только всюду минимальный вес заменять на максимальный.

    1. Кратчайшие пути

Пусть - ориентированный взвешенный граф.

Задача о кратчайшем пути состоит в отыскании пути минимального веса, соединяющего задание начальную и конечную вершину графа при условии, что хотя бы 1 такой путь ет. Начальную и конечную вершины обозначим соответственно через и .

- путь минимального веса будем называть кратчайшим путём.

      1. Алгоритм Дейкстра

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

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

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

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

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

Будем считать, что граф задан матрицей весов либо списками смежности.