Наиболее эффективный алгоритм решения задачи о кратчайшем пути первоначально дал Дейкстра. В общем случае этот метод основан на приписывании вершинам временных пометок, причем пометка вершины дает верхнюю границу длины пути от некоторой вершины s к рассматриваемой вершине. Эти пометки постепенно уменьшаются с помощью некоторой итерационной процедуры, и на каждом шаге итерации только одна из временных пометок становится постоянной. Последнее указывает на то, что пометка уже не является верхней границей, а дает точную длину кратчайшего пути от t к рассматриваемой вершине. Рассмотрим подробнее этот алгоритм.
Дан граф Обозначим L(хi) пометку вершины хi
. Веса дуг (или ребер) даны матрицей весов ().
(рис 9.1) Граф со взвешенными дугами| с1 | с3 | ||
| с2 | |||
| с5 | |||
| с4 |
Рассмотрим алгоритм нахождения кратчайшего пути от вершины s к вершине t графа и более общий случай: от вершины s ко всем вершинам графа.
Присвоение начальных значений
Ш А Г 1. Положить L(s) = 0 и считать эту пометку постоянной. Для всех вершин $$х_{i} \ne s$$ положить $$L(х_{i})= \infty$$ и считать эти пометки временными. За текущую рассматриваемую вершину с постоянной пометкой возьмем вершину p, т. е. положить p = s.
Обновление пометок
Ш А Г 2. Для вершин, входящих в прямое отображение вершины р, т. е. для всех хi
, принадлежащих Г(p), пометки которых временные, изменить пометки в соответствии со следующим выражением:
L(хi) <- min [ L(хi), L(p) + C(p, хi) ].
Превращение пометки в постоянную
Ш А Г 3. Среди всех вершин с временными пометками найти такую, для которой
L(x*i)=min[L(xi)].
Ш А Г 4. Считать пометку вершины x*i постоянной и положить p=x*i.
Ш А Г 5(a ). { При нахождении пути от s к t }
p является искомой, т. е. p = t, то L(p) является длиной кратчайшего пути от s к t. Останов.Ш А Г 5(б). { При нахождении путей от s ко всем вершинам }
Как только длины кратчайших путей от вершины s будут найдены, сами пути можно получить с помощью рекурсивной процедуры ( * ). Так как вершина x*i непосредственно предшествует вершине хi
в кратчайшем пути от s к хi
, то для любой вершины хi
соответствующую вершину x*i можно найти как одну из оставшихся вершин, для которой
L(x*i)+c( x*i, xi)=L( xi).(*)
Если кратчайший путь от s до любой вершины хi
является единственным, то дуги (x*i, xi) этого кратчайшего пути образуют ориентированное дерево с корнем s. Если существует несколько кратчайших путей от s к какой-либо другой вершине, то при некоторой фиксированной вершине x*i соотношение ( * ) будет выполняться для более чем одной вершины хi
. В этом случае выбор может быть либо произвольным (если нужен какой-то один кратчайший путь между s и хi
), либо таким, что рассматриваются все дуги (x*2,x2), входящие в какой-либо из кратчайших путей, и при этом совокупность всех таких дуг образует не ориентированное дерево, а общий граф, называемый s.
П р и м е р. Рассмотрим граф смешанного типа, изображенный на ,а, где каждое неориентированное ребро рассматривается как пара противоположно направленных дуг равного веса. Матрица весов приведена на ,б. Требуется найти все кратчайшие пути от вершины х1
ко всем остальным вершинам.
(рис 9.2) Пример поиска кратчайшего пути: а – граф; б – матрица весов дуг Постоянные пометки будем помечать знаком +.
Ш А Г 1. Присвоим $$L(х_{1}) = 0, L(х_{i}) = \infty$$ для всех хi
, кроме х1
. Положим р = х1
.
Первая итерация
Ш А Г 2. Найдем прямое отображение для текущей рассматриваемой вершины: Г(р) = Г(х1) = { х2, х7, х8, х9 }. Все вершины, входящие в прямое отображение имеют временные пометки, поэтому пересчитаем их значение:
$$L(x_{2})=min[L(x_{2}),L(x_{1}) + c(x_{1},x_{2})]=min[\infty ,0+10]=10$$
$$L(x_{7})=min[\infty ,0+3]=3$$
$$L(x_{8})=min[\infty ,0+6]=6$$
$$L(x_{9})=min[\infty ,0+12]=12$$
Ш А Г 3. На данном шаге итерации имеем следующие временные метки вершин:
$$L(х_{2}) = 10, L(х_{3}) = \infty$$,
$$L(х_{7}) = 3, L(х_{4}) = \infty$$,
$$L(х_{8}) = 6, L(х_{5}) = \infty$$,
$$L(х_{9}) = 12, L(х_{6}) = \infty$$.
Очевидно, что минимальную метку, равную 3, имеет вершина х7
.
Ш А Г 4. За следующую текущую метку принимаем вершину х7
, т. е. p = х7
, а ее метка становится постоянной, L(х7) = 3+
.
Ш А Г 5. Так как не все вершины графа имеют постоянные метки, переходим к шагу 2.
Вторая итерация
Граф с текущими значениями меток вершин показан на
(рис 9.3) Пометки в конце первой итерацииШ А Г 2. Находим Г(х7) = { х2, х4, х6, х9}. Метки всех вершин временные, следовательно пересчитываем их значения:
L(х2)= min [10, 3 + 2 ] = 5,
$$L(х_{4})= min [ \infty , 3 + 4 ] = 7$$,
$$L(х_{6})= min [ \infty , 3 + 14 ] = 17$$,
L(х9)= min [ 12, 3 + 24 ] = 12.
Ш А Г 3. На данном шаге итерации имеем следующие временные метки вершин:
$$L(х_{2}) = 5, L(х_{3}) = \infty$$,
$$L(х_{4}) = 7, L(х_{5}) = \infty$$,
L(х6) = 17, L(х8) = 6, L(х9) = 12.
Очевидно, что минимальную метку, равную 5, имеет вершина х2
.
Ш А Г 4. За следующую текущую метку принимаем вершину х2
, т. е. p = х2
, а ее метка становится постоянной, L(х2) = 5+
.
Ш А Г 5. Так как не все вершины графа имеют постоянные метки, переходим к шагу 2.
Третья итерация
Граф с текущими значениями меток вершин показан на .
(рис 9.4) Пометки в конце второй итерацииШ А Г 2. Находим Г(х2) = {х1, х3, х7, х9}. Метки вершин х3
и х9
временные, следовательно пересчитываем их значения:
$$L(х_{3}) = min [ \infty , 5 + 18 ] = 23$$,
L(х9) = min [ 12, 5+13 ] = 12.
Ш А Г 3. На данном шаге итерации имеем следующие временные метки вершин:
$$L(х_{3}) = 23, L(х_{4}) = 7, L(х_{5}) = \infty$$,
L(х6) = 17, L(х8) = 6, L(х9) = 12.
Очевидно, что минимальную метку, равную 6, имеет вершина х8
.
Ш А Г 4. За следующую текущую метку принимаем вершину х8
, т. е. p = х8
, а ее метка становится постоянной, L(х8) = 6+
.
Ш А Г 5. Не все вершины графа имеют постоянные метки, поэтому переходим к шагу 2.
Четвертая итерация
Ш А Г 2. Находим Г(х8) = { х1, х5, х6, х9 }. Метки вершин х5, х6
и х9
временные, следовательно, пересчитываем их значения:
$$L(х_{5}) = min [ \infty , 6 + 23 ] = 29$$,
L(х6) = min [ 17, 6 + 15 ] = 17,
L(х9) = min [ 12, 6 + 5 ] = 11.
Ш А Г 3. На данном шаге итерации имеем следующие временные метки вершин:
L(х3) = 23, L(х4) = 7,
L(х5) = 29, L(х6) = 17, L(х9) = 11.
Очевидно, что минимальную метку, равную 7 имеет вершина х4
.
Ш А Г 4. За следующую текущую метку принимаем вершину х4
, т. е. p = х4
, а ее метка становится постоянной, L(х4) = 7+
.
Ш А Г 5. Так как не все вершины графа имеют постоянные метки, переходим к шагу 2.
Пятая итерация
Ш А Г 2. Находим Г(х4) = { х3, х5, х6, х7 }. Метки вершин х3, х5 и х6
временные, следовательно, пересчитываем их значения:
L(х3) = min [ 23, 7 + 25 ] = 23,
L(х5)= min [ 29, 7 + 5 ] = 12,
L(х6)= min [17, 7 + 16] = 17.
Ш А Г 3. На данном шаге итерации имеем следующие временные метки вершин:
L(х3) = 23, L(х5) = 12,
L(х6) = 17, L(х9) = 11.
Очевидно, что минимальную метку, равную 11 имеет вершина х9
.
Ш А Г 4. За следующую текущую метку принимаем вершину х9
, т. е. p = х9
, а ее метка становится постоянной, L(х9) = 11+
.
Ш А Г 5. Так как не все вершины графа имеют постоянные метки, переходим к шагу 2.
Шестая итерация
Ш А Г 2. Находим Г(х9) = {х1, х2, х6, х7, х8}. Метка вершины х6
временная, следовательно пересчитываем ее значение:
L(х6) = min [17, 11 + 9] = 17.
Ш А Г 3. На данном шаге итерации имеем следующие временные метки вершин:
L(х3) = 23, L(х5) = 12, L(х6) = 17.
Очевидно, что минимальную метку, равную 12 имеет вершина х5
.
Ш А Г 4. За следующую текущую метку принимаем вершину х5
, т. е. p = х5
, а ее метка становится постоянной, L(х5) = 12+
.
Ш А Г 5. Так как не все вершины графа имеют постоянные метки, переходим к шагу 2.
Седьмая итерация
Ш А Г 2. Находим Г(х5) = { х4, х6 }. Метка вершины х6
временная, следовательно, пересчитываем ее значение:
L(х6)= min [17, 12 + 10 ] = 17.
Ш А Г 3. На данном шаге итерации имеем следующие временные метки :
L(х3) = 23, L(х6) = 17.
Очевидно, что минимальную метку, равную 17 имеет вершина х6
.
Ш А Г 4. За следующую текущую метку принимаем вершину х6
, т. е. p = х6
, а ее метка становится постоянной, L(х6) = 17+
.
Ш А Г 5. Так как не все вершины графа имеют постоянные метки, переходим к шагу 2.
Восьмая итерация
Ш А Г 2. Находим Г(х6) = { х3, х5, х7, х8, х9 }. Метка вершины х3
временная, следовательно, пересчитываем ее значение:
L(х3) = min [ 23, 17 + 20 ] = 23.
Ш А Г 3. На данном шаге итерации имеем одну временную метку вершины: L(х3) = 23, которая становится постоянной.
Ш А Г 4. Все вершины имеют постоянные метки, поэтому алгоритм окончен.
Для нахождения кратчайшего пути между вершинами, например, х2
и начальной х1
последовательно используем соотношение ( ** ): L(x'2)+c(x'2,x2)=L(x2)=5, где вершина x'2 – это вершина, непосредственно предшествующая х2
в кратчайшем пути от х1
к х2
.
Единственной такой вершиной является вершина х7
. Далее соотношение ( ** ) применяем второй раз:
L(x7')+ с(x7’, x7) = L(x7) = 3
Единственной такой вершиной является вершина х1
. Поэтому кратчайший путь от х1
к х2
есть ( х1, х7, х2). Вершина х1
, называемая базой и дающая все кратчайшие пути от х1 представляет дерево.
(рис 9.5) Окончательные пометки и х1 - база
Наиболее эффективный алгоритм решения задачи о кратчайшем пути первоначально дал Дейкстра. В общем случае этот метод основан на приписывании вершинам временных пометок, причем пометка вершины дает верхнюю границу длины пути от некоторой вершины s к рассматриваемой вершине. Эти пометки постепенно уменьшаются с помощью некоторой итерационной процедуры, и на каждом шаге итерации только одна из временных пометок становится постоянной. Последнее указывает на то, что пометка уже не является верхней границей, а дает точную длину кратчайшего пути от t к рассматриваемой вершине. Рассмотрим подробнее этот алгоритм.
Дан граф Обозначим L(хi) пометку вершины хi
. Веса дуг (или ребер) даны матрицей весов ().
(рис 9.1) Граф со взвешенными дугами| с1 | с3 | ||
| с2 | |||
| с5 | |||
| с4 |
Рассмотрим алгоритм нахождения кратчайшего пути от вершины s к вершине t графа и более общий случай: от вершины s ко всем вершинам графа.
Присвоение начальных значений
Ш А Г 1. Положить L(s) = 0 и считать эту пометку постоянной. Для всех вершин $$х_{i} \ne s$$ положить $$L(х_{i})= \infty$$ и считать эти пометки временными. За текущую рассматриваемую вершину с постоянной пометкой возьмем вершину p, т. е. положить p = s.
Обновление пометок
Ш А Г 2. Для вершин, входящих в прямое отображение вершины р, т. е. для всех хi
, принадлежащих Г(p), пометки которых временные, изменить пометки в соответствии со следующим выражением:
L(хi) <- min [ L(хi), L(p) + C(p, хi) ].
Превращение пометки в постоянную
Ш А Г 3. Среди всех вершин с временными пометками найти такую, для которой
L(x*i)=min[L(xi)].
Ш А Г 4. Считать пометку вершины x*i постоянной и положить p=x*i.
Ш А Г 5(a ). { При нахождении пути от s к t }
p является искомой, т. е. p = t, то L(p) является длиной кратчайшего пути от s к t. Останов.Ш А Г 5(б). { При нахождении путей от s ко всем вершинам }
Как только длины кратчайших путей от вершины s будут найдены, сами пути можно получить с помощью рекурсивной процедуры ( * ). Так как вершина x*i непосредственно предшествует вершине хi
в кратчайшем пути от s к хi
, то для любой вершины хi
соответствующую вершину x*i можно найти как одну из оставшихся вершин, для которой
L(x*i)+c( x*i, xi)=L( xi).(*)
Если кратчайший путь от s до любой вершины хi
является единственным, то дуги (x*i, xi) этого кратчайшего пути образуют ориентированное дерево с корнем s. Если существует несколько кратчайших путей от s к какой-либо другой вершине, то при некоторой фиксированной вершине x*i соотношение ( * ) будет выполняться для более чем одной вершины хi
. В этом случае выбор может быть либо произвольным (если нужен какой-то один кратчайший путь между s и хi
), либо таким, что рассматриваются все дуги (x*2,x2), входящие в какой-либо из кратчайших путей, и при этом совокупность всех таких дуг образует не ориентированное дерево, а общий граф, называемый s.
П р и м е р. Рассмотрим граф смешанного типа, изображенный на ,а, где каждое неориентированное ребро рассматривается как пара противоположно направленных дуг равного веса. Матрица весов приведена на ,б. Требуется найти все кратчайшие пути от вершины х1
ко всем остальным вершинам.
(рис 9.2) Пример поиска кратчайшего пути: а – граф; б – матрица весов дуг Постоянные пометки будем помечать знаком +.
Ш А Г 1. Присвоим $$L(х_{1}) = 0, L(х_{i}) = \infty$$ для всех хi
, кроме х1
. Положим р = х1
.
Первая итерация
Ш А Г 2. Найдем прямое отображение для текущей рассматриваемой вершины: Г(р) = Г(х1) = { х2, х7, х8, х9 }. Все вершины, входящие в прямое отображение имеют временные пометки, поэтому пересчитаем их значение:
$$L(x_{2})=min[L(x_{2}),L(x_{1}) + c(x_{1},x_{2})]=min[\infty ,0+10]=10$$
$$L(x_{7})=min[\infty ,0+3]=3$$
$$L(x_{8})=min[\infty ,0+6]=6$$
$$L(x_{9})=min[\infty ,0+12]=12$$
Ш А Г 3. На данном шаге итерации имеем следующие временные метки вершин:
$$L(х_{2}) = 10, L(х_{3}) = \infty$$,
$$L(х_{7}) = 3, L(х_{4}) = \infty$$,
$$L(х_{8}) = 6, L(х_{5}) = \infty$$,
$$L(х_{9}) = 12, L(х_{6}) = \infty$$.
Очевидно, что минимальную метку, равную 3, имеет вершина х7
.
Ш А Г 4. За следующую текущую метку принимаем вершину х7
, т. е. p = х7
, а ее метка становится постоянной, L(х7) = 3+
.
Ш А Г 5. Так как не все вершины графа имеют постоянные метки, переходим к шагу 2.
Вторая итерация
Граф с текущими значениями меток вершин показан на
(рис 9.3) Пометки в конце первой итерацииШ А Г 2. Находим Г(х7) = { х2, х4, х6, х9}. Метки всех вершин временные, следовательно пересчитываем их значения:
L(х2)= min [10, 3 + 2 ] = 5,
$$L(х_{4})= min [ \infty , 3 + 4 ] = 7$$,
$$L(х_{6})= min [ \infty , 3 + 14 ] = 17$$,
L(х9)= min [ 12, 3 + 24 ] = 12.
Ш А Г 3. На данном шаге итерации имеем следующие временные метки вершин:
$$L(х_{2}) = 5, L(х_{3}) = \infty$$,
$$L(х_{4}) = 7, L(х_{5}) = \infty$$,
L(х6) = 17, L(х8) = 6, L(х9) = 12.
Очевидно, что минимальную метку, равную 5, имеет вершина х2
.
Ш А Г 4. За следующую текущую метку принимаем вершину х2
, т. е. p = х2
, а ее метка становится постоянной, L(х2) = 5+
.
Ш А Г 5. Так как не все вершины графа имеют постоянные метки, переходим к шагу 2.
Третья итерация
Граф с текущими значениями меток вершин показан на .
(рис 9.4) Пометки в конце второй итерацииШ А Г 2. Находим Г(х2) = {х1, х3, х7, х9}. Метки вершин х3
и х9
временные, следовательно пересчитываем их значения:
$$L(х_{3}) = min [ \infty , 5 + 18 ] = 23$$,
L(х9) = min [ 12, 5+13 ] = 12.
Ш А Г 3. На данном шаге итерации имеем следующие временные метки вершин:
$$L(х_{3}) = 23, L(х_{4}) = 7, L(х_{5}) = \infty$$,
L(х6) = 17, L(х8) = 6, L(х9) = 12.
Очевидно, что минимальную метку, равную 6, имеет вершина х8
.
Ш А Г 4. За следующую текущую метку принимаем вершину х8
, т. е. p = х8
, а ее метка становится постоянной, L(х8) = 6+
.
Ш А Г 5. Не все вершины графа имеют постоянные метки, поэтому переходим к шагу 2.
Четвертая итерация
Ш А Г 2. Находим Г(х8) = { х1, х5, х6, х9 }. Метки вершин х5, х6
и х9
временные, следовательно, пересчитываем их значения:
$$L(х_{5}) = min [ \infty , 6 + 23 ] = 29$$,
L(х6) = min [ 17, 6 + 15 ] = 17,
L(х9) = min [ 12, 6 + 5 ] = 11.
Ш А Г 3. На данном шаге итерации имеем следующие временные метки вершин:
L(х3) = 23, L(х4) = 7,
L(х5) = 29, L(х6) = 17, L(х9) = 11.
Очевидно, что минимальную метку, равную 7 имеет вершина х4
.
Ш А Г 4. За следующую текущую метку принимаем вершину х4
, т. е. p = х4
, а ее метка становится постоянной, L(х4) = 7+
.
Ш А Г 5. Так как не все вершины графа имеют постоянные метки, переходим к шагу 2.
Пятая итерация
Ш А Г 2. Находим Г(х4) = { х3, х5, х6, х7 }. Метки вершин х3, х5 и х6
временные, следовательно, пересчитываем их значения:
L(х3) = min [ 23, 7 + 25 ] = 23,
L(х5)= min [ 29, 7 + 5 ] = 12,
L(х6)= min [17, 7 + 16] = 17.
Ш А Г 3. На данном шаге итерации имеем следующие временные метки вершин:
L(х3) = 23, L(х5) = 12,
L(х6) = 17, L(х9) = 11.
Очевидно, что минимальную метку, равную 11 имеет вершина х9
.
Ш А Г 4. За следующую текущую метку принимаем вершину х9
, т. е. p = х9
, а ее метка становится постоянной, L(х9) = 11+
.
Ш А Г 5. Так как не все вершины графа имеют постоянные метки, переходим к шагу 2.
Шестая итерация
Ш А Г 2. Находим Г(х9) = {х1, х2, х6, х7, х8}. Метка вершины х6
временная, следовательно пересчитываем ее значение:
L(х6) = min [17, 11 + 9] = 17.
Ш А Г 3. На данном шаге итерации имеем следующие временные метки вершин:
L(х3) = 23, L(х5) = 12, L(х6) = 17.
Очевидно, что минимальную метку, равную 12 имеет вершина х5
.
Ш А Г 4. За следующую текущую метку принимаем вершину х5
, т. е. p = х5
, а ее метка становится постоянной, L(х5) = 12+
.
Ш А Г 5. Так как не все вершины графа имеют постоянные метки, переходим к шагу 2.
Седьмая итерация
Ш А Г 2. Находим Г(х5) = { х4, х6 }. Метка вершины х6
временная, следовательно, пересчитываем ее значение:
L(х6)= min [17, 12 + 10 ] = 17.
Ш А Г 3. На данном шаге итерации имеем следующие временные метки :
L(х3) = 23, L(х6) = 17.
Очевидно, что минимальную метку, равную 17 имеет вершина х6
.
Ш А Г 4. За следующую текущую метку принимаем вершину х6
, т. е. p = х6
, а ее метка становится постоянной, L(х6) = 17+
.
Ш А Г 5. Так как не все вершины графа имеют постоянные метки, переходим к шагу 2.
Восьмая итерация
Ш А Г 2. Находим Г(х6) = { х3, х5, х7, х8, х9 }. Метка вершины х3
временная, следовательно, пересчитываем ее значение:
L(х3) = min [ 23, 17 + 20 ] = 23.
Ш А Г 3. На данном шаге итерации имеем одну временную метку вершины: L(х3) = 23, которая становится постоянной.
Ш А Г 4. Все вершины имеют постоянные метки, поэтому алгоритм окончен.
Для нахождения кратчайшего пути между вершинами, например, х2
и начальной х1
последовательно используем соотношение ( ** ): L(x'2)+c(x'2,x2)=L(x2)=5, где вершина x'2 – это вершина, непосредственно предшествующая х2
в кратчайшем пути от х1
к х2
.
Единственной такой вершиной является вершина х7
. Далее соотношение ( ** ) применяем второй раз:
L(x7')+ с(x7’, x7) = L(x7) = 3
Единственной такой вершиной является вершина х1
. Поэтому кратчайший путь от х1
к х2
есть ( х1, х7, х2). Вершина х1
, называемая базой и дающая все кратчайшие пути от х1 представляет дерево.
(рис 9.5) Окончательные пометки и х1 - база
Для получения официальных документов о завершении программы дополнительного профессионального образования (удостоверения о повышении квалификации, дипломов о профессиональной переподготовке и MBA) необходимо предоставить:
Внимание! Вы можете не заказывать доставку бумажной версии официального документы, а скачать его в электронном виде и распечатать самостоятельно. Информация о выданном документе в течение 1 месяца загружается в Федеральную информационную систему «Федеральный реестр сведений о документах об образовании и (или) о квалификации, документах об обучении» - ФИС ФРДО.
Доступ на новый сайт осуществляется с использованием адреса электронной почты, который был указан вами при регистрации на "старом". Мы постарались перенести все ваши данные с прежнего ресурса, однако не исключена вероятность потери части информации.
При возникновении проблемы со входом, воспользуйтесь функцией сброса пароля
Если вы обнаружите несоответствия, пожалуйста, сообщите нам.