Графы и алгоритмы

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

Показывать лекцию целиком

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

В этой лекции рассматриваются связные графы с неотрицательными весами ребер. Вес пути в графе определяется как сумма весов ребер этого пути. Кратчайшим путем между двумя вершинами называется путь наименьшего веса, соединяющий эти вершины. Рассмотрим задачу отыскания кратчайших путей от заданной вершины $$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}).$$

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

$$w(P) < w(P').$$

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

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

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

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

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

  • cоздать дерево $$T$$ из одной вершины $$a$$
  • $$\delta (a):=0$$
  • $$A:=\{ a\}$$
  • while $$A\ne V$$ do
  • cреди ребер $$(x,y)$$, где $$x\in A$$, $$y\in \overline{A}$$, найти ребро $$(x_{0},y_{0})$$ c наименьшим значением величины $$\delta (x)+w(x,y)$$ ;
  • добавить к дереву $$T$$ вершину $$y_{0}$$ и ребро $$(x_{0},y_{0})$$ ;
  • $$\delta (y_{0} ):=\delta (x_{0} )+w(x_{0},y_{0})$$
  • Этот алгоритм очень похож на алгоритм Прима для построения оптимального каркаса. Единственное отличие между ними состоит в правиле выбора ребра, присоединяемого к строящемуся дереву на очередном шаге. В алгоритме Прима выбирается ребро наименьшего веса, а в алгоритме для построения геодезического дерева - ребро с минимальным значением величины $$\delta (x)+w(x,y)$$. Ясно, что и оценка трудоемкости нового алгоритма будет такая же, как и для алгоритма Прима, то есть $$O(n^{3})$$. Подобно алгоритму Прима, этот алгоритм можно рационализировать, понизив тем самым оценку трудоемкости до $$O(n^{2})$$. Усовершенствованный алгоритм поиска кратчайших путей известен как алгоритм Дейкстры.

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

    Допустим, на некотором шаге описанного выше алгоритма построено дерево с множеством вершин $$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. Алгоритм Дейкстры.

  • $$F(a):=a$$
  • $$A:=\{ a\}$$
  • for $$x\in V$$ do $$\{\Delta (x):=w(a,x)$$ ; $$F(x):=a\}$$
  • while $$A\ne V$$ do
  • выбрать вершину $$y\in \overline{A}$$ с наименьшим значением $$\Delta (y)$$
  • $$A:=A\cup \{ y\}$$
  • for $$z\in \overline{A}$$ do
  • if $$\Delta (y)+w(y,z) < \Delta (z)$$
  • then $$\{F(z)=y$$, $$\Delta (z)=\Delta (y)+w(y,z)\}$$
  • Вернуться к учебному плану