Нижегородский государственный университет им. Н.И.Лобачевского
Опубликован: 27.09.2006 | Доступ: свободный | Студентов: 3533 / 125 | Оценка: 4.44 / 4.11 | Длительность: 13:45:00
Специальности: Программист, Математик
Лекция 15:

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

< Лекция 14 || Лекция 15: 12 || Лекция 16 >
Аннотация: В этой лекции рассматриваются связные графы с неотрицательными весами ребер. А также кратчайшие пути, геодезическое дерево и алгоритм Дейкстры.

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

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

Геодезическое дерево

Пусть a - вершина связного графа G с заданной на множестве ребер весовой функцией w с неотрицательными значениями. Каркас T графа G с корнем a называется геодезическим деревом, если для любой вершины x путь между вершинами x и a в дереве T является кратчайшим путем между этими вершинами в графе G. Это обобщает понятие геодезического дерева, введенное в "лекции 4" и соответствующее случаю, когда все веса равны 1. Докажем сначала, что геодезическое дерево всегда существует.

Обозначим через \delta (x) вес кратчайшего пути между вершинами x и a в графе G. Дерево F с корнем a назовем частичным геодезическим деревом, (ЧГД), если существует такое геодезическое дерево T_{0} с корнем a, что F является подграфом дерева T_{0}. Иначе говоря, ЧГД - это корневое дерево, которое можно достроить до геодезического дерева с тем же корнем.

Пусть V - множество всех вершин графа G. Для множества A\subseteq V через \overline{A} обозначаем дополнение A до V.

Теорема 1. Пусть T - ЧГД с корнем a и множеством вершин A в графе G, (x_{0},y_{0}) - ребро c наименьшим значением величины \delta (x)+w(x,y) среди всех ребер (x,y), где x\in A, y\in
\bar{A}. Тогда T'={T\cup \{ (x_{0},y_{0} )\}} - ЧГД с корнем a.

Доказательство.

Рассмотрим в дереве T' путь P', соединяющий вершину y_{0} с корнем a. Он состоит из пути между вершинами a и x_{0} в дереве T и ребра (x_{0},y_{0}), следовательно, .

w(P')=\delta (x_{0} )+w(x_{0},y_{0}). ( 1)

Мы должны доказать, что он является кратчайшим путем между вершинами a и y_{0} в графе G. Допустим, имеется путь P между этими вершинами, такой, что.

w(P) < w(P'). ( 2)

Пусть (u,v) - первое ребро пути P, у которого u\in A, v\in \overline{A} (считаем, что путь начинается в вершине a ). Так как веса ребер неотрицательны, то

w(P)\ge \delta (u)+w(u,v). ( 3)

Из (1), (2) и (3) следует неравенство \delta (u)+w(u,v) < \delta (x_{0})
+w(x_{0},y_{0}), противоречащее выбору ребра (x_{0},y_{0}).

Эта теорема показывает, что геодезическое дерево можно построить с помощью следующего алгоритма.

Алгоритм 1. Построение геодезического дерева для вершины a.

  1. cоздать дерево T из одной вершины a
  2. \delta (a):=0
  3. A:=\{ a\}
  4. while A\ne V do
  5. cреди ребер (x,y), где x\in A, y\in
\overline{A}, найти ребро (x_{0},y_{0}) c наименьшим значением величины \delta (x)+w(x,y) ;
  6. добавить к дереву T вершину y_{0} и ребро (x_{0},y_{0}) ;
  7. \delta (y_{0} ):=\delta (x_{0} )+w(x_{0},y_{0})

Этот алгоритм очень похож на алгоритм Прима для построения оптимального каркаса. Единственное отличие между ними состоит в правиле выбора ребра, присоединяемого к строящемуся дереву на очередном шаге. В алгоритме Прима выбирается ребро наименьшего веса, а в алгоритме для построения геодезического дерева - ребро с минимальным значением величины \delta (x)+w(x,y). Ясно, что и оценка трудоемкости нового алгоритма будет такая же, как и для алгоритма Прима, то есть O(n^{3}). Подобно алгоритму Прима, этот алгоритм можно рационализировать, понизив тем самым оценку трудоемкости до O(n^{2}). Усовершенствованный алгоритм поиска кратчайших путей известен как алгоритм Дейкстры.

< Лекция 14 || Лекция 15: 12 || Лекция 16 >
Петр Петров
Петр Петров

произведение графов К(2)*О(4) фактически 4 отдельных графа К(2)?

Александр Лаврентьев
Александр Лаврентьев

много инструкций вида if - then - else

Например Procedure DFS(a) опишите каким образом следует понимать вложенность инструкций. Как в языке С ? 

т.е. следующее 

if (...) then (...)

if (...) then (...)

else(...)

 

раскрывается как 

if (...) then (...)

if (...) then (...)

         else(...)

или так :

if (...) then

 {  (...)

     if (...) then (...)

              else(...)

}

обьясните пожалуйста.

 

 

Андрей Марченко
Андрей Марченко
Россия, г. Нижний Новгород