Алгоритмы Алгоритм Краскалла Алгоритм Дейкстры Остов минимального веса Задача нахождения остова минимального веса во взвешенном связном графе, возникает при проектировании линий электропередачи, трубопроводов, дорог и т.п., когда требуется заданные центры соединить некоторой системой каналов, связных либо непосредственно соединяющим их каналом, либо через другие центры и каналы, так, чтобы общая длина (или, например, стоимость) каналов связи была минимальной. Решение этой задачи «слепым» перебором вариантов потребовало бы чрезвычайно больших вычислений даже при относительно малых n (можно доказать, что полный граф Kn содержит nn–2 различных остовных дерева). Однако для ее решения имеются эффективные алгоритмы. Опишем два из них - алгоритмы Дж. Краскала (1956) и Р. Прима (1957), применяемые к произвольному связному графу (G, w) порядка n. Алгоритм Краскалла Шаг 1. Строим граф T1=On+e1, присоединяя к пустому графу на множестве вершин VG ребро e1∈VG минимального веса. Шаг 2. Если граф Ti уже построен и i<n–1, то строим граф Ti+1=Ti+ei+1, где ei+1 – ребро графа G, имеющее минимальный вес среди ребер, не входящих в Ti и не составляющих циклов с ребрами из Ti. Задание Построить связный 9-вершинный граф, без петель и кратных ребер. Случайным образом распределить веса ребер. С помощью алгоритма Краскалла найти остов минимального веса. Задание Дан граф, найти остов минимального веса. 4 3 2 8 5 3 4 1 9 6 7 4 5 2 2 6 1 5 3 7 Задача о минимальной связке Найти остовное дерево графа с наименьшим весом, используя алгоритм Краскалла. 9 12 2 7 11 3 2 6 4 1 7 6 4 8 5 3 1 1 6 2 1 7 8 5 4 9 6 10 3 11 Задача о кратчайшей цепи Задача о кратчайшем пути. Пусть задана сеть из n + 1 вершины, то есть ориентированный граф, в котором выделены две вершины – вход (нулевая вершина) и выход (вершина с номером n). Для каждой дуги заданы числа, называемые длинами дуг. Длиной пути (контура) называется сумма длин входящих в него дуг (если длины дуг не заданы, то длина пути (контура) определяется как число входящих в него дуг). Задача заключается в поиске кратчайшего пути (пути минимальной длины) от входа до выхода сети. Известно, что для существования кратчайшего пути необходимо и достаточно отсутствия в сети контуров отрицательной длины. Алгоритм Дейкстры Алгоритм основан на приписывании узлам временных или постоянных меток. Первоначально только источнику приписывается постоянная метка, равная нулю. Всем другим узлам приписываются временные метки, соответствующие весу дуги из источника в рассматриваемый узел. Если такой дуги нет, то узлу приписывается временная метка, равная бесконечности. Алгоритм Дейкстры Для определения ближайшего к источнику узла выберем временную метку с минимальным значением и объявим ее постоянной. Затем, до тех пор, пока стоку не будет приписана постоянная метка, необходимо выполнить следующее: Алгоритм Дейкстры Рассмотреть оставшиеся узлы с временными метками. Сравнить величину каждой временной метки с суммой величин последней из постоянных меток и веса дуги, ведущей из соответствующего постоянно помеченного узла в рассматриваемый. Минимальная из двух сравниваемых величин определяется как новая временная метка рассматриваемого узла. 2. Среди временных меток выбрать минимальную и объявить ее постоянной. После постоянного помечивания стока алгоритм прекращает работу, при этом минимальная сумма весов дуг, соединяющий источник и сток, равна постоянной метке стока. Искомая цепь состоит из дуг, для каждой из которых разность между постоянными метками ее концевых узлов равна весу этой дуги. 1. Задание 1 Дана сеть. Определить ориентированную цепь из узла S в узел t, сумма весов дуг которой минимальна. V1 1 V2 10 2 2 3 3 6 S t 3 V3 3 1 7 5 V4 1 V5 Задание 2 Дана сеть. Определить ориентированную цепь из узла S в узел t, сумма весов дуг которой минимальна. 4 3 2 8 5 3 1 9 6 S 4 t 7 4 5 2 2 6 1 5 3 7 Задание 3 Дана сеть. Определить ориентированную цепь из узла S в узел t, сумма весов дуг которой минимальна. V1 5 V2 12 S 2 6 4 V4 V5 3 4 8 3 8 t 7 2 12 V6 V3 6 9 8 5 V7 V8