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

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

< Лекция 14 || Лекция 15: 12 || Лекция 16 >

Алгоритм Дейкстры

Допустим, на некотором шаге описанного выше алгоритма построено дерево с множеством вершин A, а для каждой вершины y\in
\overline{A} известна вершина x_{0} =F(y), на которой достигается наименьшее значение величины \Delta(y)=\min\{\delta (x)+w(x,y)\}, где минимум берется по всем вершинам x\in A. Тогда на этом шаге следует выбрать вершину y\in \overline{A} с наименьшим значением величины \Delta
(y) и присоединить к дереву ребро (F(y),y). После этого для каждой вершины z, еще не принадлежащей к дереву, значения \Delta
(z) и F(z) уточняются следующим образом: если \Delta (y)+w(y,z)< \Delta (z), то следует положить F(z)=y, \Delta (z)=\Delta (y)+w(y,z). Вершина F(y) может рассматриваться как предполагаемый отец вершины y в геодезическом дереве (если все множество \overline{A} состояло бы из одной вершины y, то F(y) была бы ее истинным отцом). Величина \Delta(y) представляет собой оценку кратчайшего пути из a в y, она равна весу кратчайшего из путей, проходящих только через вершины множества A. После того, как вершина y присоединяется к дереву, значения F(y) и \Delta(y) больше не изменяются, F(y) является отцом вершины y в геодезическом дереве, а \Delta(y)=\delta (y). В целом алгоритм можно представить следующим образом:

Алгоритм 2. Алгоритм Дейкстры.

  1. F(a):=a
  2. A:=\{ a\}
  3. for x\in V do \{\Delta (x):=w(a,x) ; F(x):=a\}
  4. while A\ne V do
  5. выбрать вершину y\in \overline{A} с наименьшим значением \Delta (y)
  6. A:=A\cup \{ y\}
  7. for z\in \overline{A} do
  8. if \Delta (y)+w(y,z) < \Delta (z)
  9. then \{F(z)=y, \Delta (z)=\Delta (y)+w(y,z)\}
< Лекция 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(...)

}

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

 

 

Асмик Гаряка
Асмик Гаряка
Армения, Ереван
Константин Дементьев
Константин Дементьев
Россия, г. Мичуринск