Деревья. Задачи о кратчайших расстояниях на графах. Основные алгоритмы для решения задач о кратчайших расстояниях.
Связный граф G(V,E), не имеющий циклов, называется деревом.
ТЕОРЕМА(основные свойства деревьев):
Пусть граф G(V,E) имеет n вершин. Тогда следующие утверждения эквивалентны:
- G является деревом;
- G не содержит циклов и имеет n-1 рёбер;
- G связен и имеет n-1 рёбер;
- G связен, но удаление любого ребра нарушает связность;
- две вершины графа G соединены ровно одним путём;
- G не имеет циклов, но добавление любого ребра порождает ровно один цикл.
Ориентированное дерево представляет собой ориентированный граф без циклов, в котором полустепень захода каждой вершины (за исключением одной, например x1) не больше 1, а полустепень захода вершины x1 (называемой также корнем) равна нулю.
Вершину v ордерева называют потомком вершины u, если $ путь из u в v. В этом же случае вершину u называют предком вершины v. Вершину, не имеющую потомков, называют листом.
Высота ордерева – это наибольшая длина пути из корня в лист. Глубина d(v) вершины ордерева – длина пути из корня в эту вершину. Высота вершины h(v) – наибольшая длина пути из данной вершины в лист. Уровень вершины – это разница между высотой дерева и глубиной данной вершины. Ордерево называют бинарным, если полустепень исхода любой его вершины не превосходит 2.
Пусть задан неориентированный граф. Остовным деревом (остовом) связного графа называется любой его остовный подграф, являющийся деревом.
Граф и два его остовных дерева (удаленные ребра показаны пунктиром).
Задачи о кратчайших расстояниях на графах:
- Построение минимального остовного дерева (кратчайшей связывающей сети) – соединение всех узлов сети с помощью путей наименьшей длины.
- Задача о нахождении дерева кратчайших расстояний – нахождение кратчайшего пути из одной вершины в любую другую.
ЗАДАЧА 1(пример прикладной задачи): необходимо проложить линии коммуникаций (дороги, линии связи, электропередач и т.п.) между n заданными "точечными" объектами, при условии, что, во-первых, известны "расстояния" между каждой парой объектов (это может быть геометрическое расстояние или стоимость прокладки коммуникаций между ними), и, во-вторых, объекты могут быть связаны как непосредственно, так и с участием произвольного количества промежуточных объектов.
При допущении, что разветвления возможны только в этих же n объектах, задача сводится к нахождению кратчайшего остовного дерева (SST - shortest spanning tree, или MST - minimal spanning tree) во взвешенном графе, вершины которого соответствуют заданным объектам, а веса ребер равны "расстояниям" между ними.
Тогда формулировка задачи принимает вид: найти кратчайшее остовное дерево(минимальный покрывающий остов) взвешенного графа.
Пусть дан неориентированный связный граф со взвешенными ребрами. Вес ребра (xi,xj) обозначим cij. Из всех остовов графа необходимо найти один, у которого сумма весов на ребрах наименьшая.
Стоимость остовного дерева вычисляется как сумма стоимостей всех рёбер, входящих в это дерево.
Алгоритм Прима
Определим расстояние между произвольной вершиной v взвешенного графа G=(V,E) и некоторым его подграфом G'ÍG как минимальный вес ребра, одним из концов которого является v, а другой лежит в G':
d(v,G')=min(v,w)ÎE(G),wÎG'Weight(v,w).
- SST '=<граф, состоящий из одной произвольной вершины графа G>;
- если |E(SST ')|=n-1, то SST=SST '; КОНЕЦ;
- среди множества I вершин графа G, не входящих в SST ', но инцидентных хотя бы одной вершине из SST' (I={u | uÎV(G), uÏSST', (u,v)ÎE(G), vÎSST'}), найти вершину wÎI, расстояние которой до SST' минимально: d(w,SST')=minvÎI d(v,SST');
- добавить ребро (w,u), на котором достигается минимальное расстояние d(w,SST'), в SST ';
- перейти на шаг 2.
ЗАДАЧА 2(пример прикладной задачи): необходимо добраться на самолете из города A в город B при условии, что между ними нет прямого авиационного сообщения, затратив при этом минимальные средства (при условии, что заданы возможные промежуточные аэропорты, для каждой пары аэропортов известно, существует ли между ними прямой маршрут, и если да, то известна минимальная стоимость перелета по этому маршруту).
Решение:
построим взвешенный граф (орграф - если бывают "несимметричные" маршруты), вершины которого соответствуют всем возможным аэропортам, ребра (дуги) - прямым маршрутам между ними, а веса ребер (дуг) равны стоимости перелета (очевидно, неотрицательной) между соответствующими аэропортами. Задача сводится к нахождению в графе (орграфе) пути минимального веса между вершинами, соответствующими A и B.
Тогда задача имеет следующую формулировку: найти один из путей минимальной суммарной длины между двумя заданными вершинами взвешенного орграфа с неотрицательными весами дуг. (Построить дерево кратчайших расстояний).
Алгоритм Дейкстры (в случае неотрицательных весов.)
Дано: непyстой взвешенный гpаф G=(V,E) с неотрицательными весами дуг. Требуется найти кpатчайший пyть от s к t (s≠t).
Инициализация:
· всем веpшинам vi пpиписывается метка - вещественное число: d(s)=0, d(vi)=¥ для всех vi≠s;
· метки всех вершин, кроме s, считаются временными, метка s - постоянной;
· вершина s объявляется текущей (c:=s);
· все дуги считаются непомеченными.
Основная часть:
- для всех вершин uj, инцидентных текущей вершине c, метки которых являются временными, пересчитываем эти метки по формуле:
d(uj):=min{d(uj), d(c)+Weight(c,uj)} (*)
где (c,uj) - дуга, соединяющая вершины c и uj, а Weight(c,uj) - ее вес;