Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Дискретная математика УчебПос.doc
Скачиваний:
0
Добавлен:
01.05.2025
Размер:
16.32 Mб
Скачать

4.5. Алгоритмы построения минимального остовного дерева

1) Алгоритм Краскала построения минимального остовного дерева:

a. Упорядочить ребра графа в порядке возрастания весов. Пусть

w(e1)  w(e2)  …  w(eq).

b. Включить ребро e1 с минимальным весом в строящееся дерево.

c. Для i = 2,3,4…q выполнить: если ребро ei не образует цикла с уже включенными ребрами, включить ребро ei в дерево, иначе – пропустить. Закончить работу, когда будут выбраны p-1 ребер, где p – число вершин в графе.

2) Алгоритм Дейкстры-Прима построения минимального остовного дерева:

a. Выбрать произвольную вершину и считать ее ребром нулевой длины.

b. Упорядочить ребра графа в порядке возрастания весов. Пусть:

      1. = w(e1) < w(e2)  …  w(eq).

с. Включить ребро с минимальным нулевым весом в строящееся дерево.

d. Включить в дерево ребро ei минимального веса, образующее связный граф без циклов с уже включенными ребрами. Исключить из дальнейшего рассмотрения всякое просмотренное ребро e, образующее цикл с уже включенными ребрами. Повторять шаг 4 до тех пор, пока не будут выбраны p – 1 ребер ненулевого веса.

4.6 Задача о кратчайшем пути и алгоритм Дейкстры для ее решения

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

Задача о кратчайшем пути формулируется следующим образом:

1). Найти длины кратчайших путей и сами пути от фиксированной вершины s до всех остальных вершин.

2). Найти длины кратчайших путей и сами пути между всеми парами вершин данного графа.

Алгоритм Дейкстры работает с дугами положительной длины и определяет кратчайшие пути от вершины s до любой другой вершины. Если в графе имеются дуги отрицательной длины (направление обратное направлению движения от точки s к искомой вершине), то задача не имеет смысла. Любой кратчайший путь – это простая цепь.

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

Технически действия по алгоритму Дейкстры осуществляются при помощи аппарата меток. Метка вершины обозначается d(v). Всякая метка – это число, равное длине пути от s до v. Метки делятся на временные и постоянные. На каждом шаге только одна метка становится постоянной. Это означает, что ее значение равно длине кратчайшего пути до соответствующей вершины, а сама вершина упорядочивается.

1 шаг. Положить d(s) = 0 и считать эту метку постоянной. Положить d(vi) =  и считать эти метки временными. Положить p = s.

2 шаг (повторяется пока не будут упорядочены все вершины графа). Пересчитать временную метку d(vi) всякой неупорядоченной вершины vi, в которую входит дуга, выходящая из вершины p по правилу:

d (vi) = min (d (vi); d (p) + l (p, vi)).

Выбрать вершину с минимальной временной меткой и считать эту метку постоянной. Если таких вершин несколько, то выбрать любую.

4.7. Дерево кратчайших путей

Дерево кратчайших путей с корнем в s есть ориентированный подграф, в котором:

1) множество вершин графа достижимы из вершины s

2) граф является деревом с корнем в s

3) для каждой вершины v путь из s в v является кратчайшим.

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

Алгоритм Беллмана решения задачи о кратчайшем пути:

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

Обозначим через длину пути от вершины s до вершины vi, кратчайшего из всех путей от s до vi, в которых не более k дуг. Тогда:

Здесь - длина пути от вершины s до vi, через вершину vj.

Алгоритм может окончить работу быстрее, чем за n шагов. Если все числа, найденные на k+1 шаге повторяют числа, найденные на предыдущем шаге, то это и есть минимальные пути и алгоритм заканчивает свою работу.