Metodichka_TG
.pdfРасстоянием между двумя вершинами u и v графа G называется длина кратчайшей простой цепи, соединяющей эти вершины; обозначается: d(u,v).
Если вершины u и v графа G не связаны, расстояние считается равным бесконечности: d(u,v)= .
В связном графе расстояние является метрикой, т.е. удовлетворяет следующим аксиомам.
u,v,w V:
1)d(u,v) 0 (d(u,v)=0 <=> u=v);
2)d(u,v)=d(v,u);
3)d(u,v)+d(v,w)= d(u,w).
Кратчайшая простая цепь, соединяющая вершины u и v, называется геодезической и обозначается: (u,v).
Алгоритм нахождения кратчайших маршрутов (волновой).
Пусть задан неориентированный граф G=(V,E). Необходимо найти расстояние от одной заданной вершины до другой, или от одной заданной ко всем остальным вершинам графа G.
Идея алгоритма:
–выбирается некоторая вершина графа G и определяются все “соседи” выбранной вершины (“соседями” называются вершины, смежные с данной);
–эти вершины помечаются;
–определяются “соседи соседей” и также помечаются и т. д.
Алгоритм заканчивает работу, если:
–все вершины помечены (граф связен);
–построены все геодезические, связывающие данную вершину со всеми остальными;
–найдены расстояния от данной вершины ко всем остальным.
Если не все вершины в результате работы алгоритма помечены, это означает что граф G не связен.
Пример:
v1 |
v2 |
v4 |
v6 |
v3 |
v5 |
v9 |
v10 |
v7 |
v8 |
0 |
1 |
1 |
1 |
2 |
2 |
2 |
2 |
3 |
3 |
Эксцентриситетом, или отклоненностью, вершины v графа G называется длина максимальной геодезической, исходящей из этой вершины; обозначает-
ся: e(v) max d(v,u) , v V, u V .
Диаметром графа G называется максимальный среди всех эксцентриситетов вершин графа; обозначается: d(G) max e(u), u V .
Периферией графа G называется множество вершин графа G, для которых эксцентриситет равен диаметру, т.е.: e(v) d(G) .
Радиусом графа G называется минимальный из эксцентриситетов вершин графа G; обозначается: r(G)=min e(u), u V.
Центром графа G называется множество вершин, для которых эксцентриситет равен радиусу графа. т.е.: e(v) = r(G).
Примеры: |
|
|
|||||
P4: |
|
|
P3: |
|
C3: |
||
|
|
|
центр |
центр |
все вершины - |
||
|
|
|
центральные |
||||
|
|
|
|
|
|
|
|
Определим матрицу расстояний: |
|
||||||
|
|
|
|
|
|
|
|
D |
dij |
|
i, j 1, p, где p - количество вершин, |
|
|||
|
d (i, j), i и j связны; |
|
|
||||
|
|
i j; |
|
|
|||
dij 0, |
|
|
|||||
|
|
i и j не связны. |
|
|
|||
|
, |
|
|
||||
|
|
|
|
|
|
|
Матрица расстояний несвязного графа может состоять из нескольких матриц (для каждой компоненты) или иметь блочный вид.
Пример: найти e(v) в заданном графе
b
a
g h
d
c
f e
Используем волновой алгоритм. |
|
|
|
|
|
|||||||||||||
Первая компонента связности графа G: |
|
|
||||||||||||||||
|
|
v |
|
j |
|
u |
|
|
(v,u) |
d(u,v) |
|
|||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
a |
|
0 |
|
|
a |
|
|
a |
|
|
0 |
|
|
|
|
|
|
|
|
|
1 |
|
|
b |
|
|
ab |
|
|
1 |
|
|
|
|
|
|
|
|
|
2 |
|
|
d |
|
|
abd |
|
|
2 |
|
|
|
|
|
|
|
|
|
2 |
|
|
f |
|
|
abf |
|
|
2 |
|
|
|
|
|
|
|
|
|
3 |
|
|
c |
|
|
abdc |
3 |
|
|
|
|
|||
|
|
|
|
|
|
|
e |
|
|
abfe |
3 |
|
|
|
|
|||
Вторая компонента связности графа G: |
|
|
||||||||||||||||
|
|
v |
|
j |
|
u |
|
|
(v,u) |
d(u,v) |
|
|||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
g |
|
0 |
|
|
g |
|
|
g |
|
|
0 |
|
|
|
|
|
|
|
|
|
1 |
|
|
h |
|
|
gh |
|
|
1 |
|
|
|
|
|
Построим матрицу расстояний: |
|
|
|
|
|
|||||||||||||
|
|
|
|
|
|
|
|
|
h |
|
e(v) |
|||||||
a |
b |
c |
d |
e |
f |
g |
|
|
||||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||||
a |
0 |
1 |
3 |
2 |
3 |
|
2 |
|
|
|
|
3 |
||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|||
b |
1 |
0 |
2 |
1 |
2 |
|
1 |
|
|
|
|
2 |
|
|||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
c |
3 |
2 |
0 |
1 |
2 |
|
3 |
|
|
|
|
3 |
||||||
|
|
|
|
|
||||||||||||||
D d |
2 |
1 |
1 |
0 |
1 |
|
2 |
|
|
|
|
2 |
|
|||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|||
e |
3 |
2 |
2 |
1 |
0 |
|
1 |
|
|
3 |
|
|||||||
|
f |
2 |
1 |
3 |
2 |
1 |
|
0 |
|
|
|
|
3 |
|
||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||||||
g |
0 |
|
1 |
|
|
1 |
|
|||||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
|
0 |
|
|
1 |
||||||
h |
|
|
|
|
d(G)=3; r(G)=2; периферия: {a,c,e,f}; центр: {b,d} - для первой компоненты связности.
d(G)=1; r(G)=1; периферия: {g,h}; центр: {g,h} - для первой компоненты связности.
2.4 ВЕРШИННАЯ И РЕБЕРНАЯ СВЯЗНОСТЬ
Вершинной связностью графа G называется наименьшее число вершин, удаление которых приводит к несвязному, или тривиальному, графу; обозначается: (G).
( K n )=n-1; ( Pn )=1; ( Cn )=2.
Реберной связностью графа G называется наименьшее число ребер, удаление которых приводит к несвязному графу; обозначается: (G) .
( K n )=n-1; ( Pn )=1; ( Cn )=2.
Для тривиального графа реберную связность полагают равной 0.
Пример:
(G)=1,(G)=2.
Вершина v графа G называется точкой сочленения, или разделяющей вершиной, если граф G\{v} имеет больше компонент связности, чем граф G.
Ребро е графа G называется мостом, если его удаление приводит к нарушению связности графа.
Пример: |
|
|
|
G: |
|
|
v5 |
|
v2 |
|
|
|
|
|
|
|
|
|
(G)=1; |
v1 |
v3 |
v4 |
(G)=1; |
|
точки сочленения: v3, v4; |
||
|
|
|
мост: (v3,v4).
v6
v8 v7
|
G1: |
v4 |
|
|
|
|
v3 |
v5 |
v1 |
v2 |
v6 |
|
|
|
|
|
(G)=1; |
|
|
(G)=2; |
v8 |
v7 |
точки сочленения: v2, v3. |
|
Связный непустой граф называется неразделимым, если в нем отсутствуют точки сочленения.
Блок – это максимальный неразделимый подграф исходного графа. Теорема Уитни. Пусть (G) - минимальная степень вершин графа G, то-
гда справедливо следующее неравенство: (G) (G) (G) .
Пример: |
|
d |
|
|
|
h |
i |
|
|
c |
e |
|
|
g |
|
f |
|
a |
b |
||
|
Граф не является неразделимым;
блоки графа: {c,d,e},{c,b,f},{a,g,h,i},{a,b}.
2.5 КРАТЧАЙШИЕ МАРШРУТЫ В ГРАФАХ
Пусть задан граф G=(V,E), ребрам которого приписаны веса (стоимости), задаваемые матрицей C Cij i, j 1, p . Задача состоит в нахождении
кратчайшего пути от заданной начальной вершины s V до заданной конечной вершины t V при условии, что такой путь существует. Элементы матрицы весов могут быть положительными, отрицательными или нулевыми. Единственное ограничение состоит в том, чтобы граф не содержал циклов с суммарным отрицательным весом.
Задачи данного типа имеют следующие модификации:
-для заданной начальной вершины s найти кратчайшие пути от нее ко всем другим вершинам графа;
-найти кратчайшие пути между всеми парами вершин графа.
2.5.1 АЛГОРИТМ ДЕЙКСТРЫ
Постановка задачи. Имеется произвольный взвешенный (n,m)-граф (в матрице весов нет отрицательных чисел), т.е.:
|
|
|
|
, |
если (i, j) E, |
i j; |
|
|
если i j; |
|
|
Ci, j 0, |
|
|
|
const 0, если (i, j) E, |
i j. |
||
|
|
|
|
Требуется найти кратчайший маршрут от вершины s ко всем остальным вершинам графа.
Алгоритм основан на приписывании вершинам временных пометок, причем пометка вершины дает верхнюю границу длины пути от s к данной вершине. Эти пометки постепенно уменьшаются с помощью итерационной процедуры, и на каждом шаге итерации одна из временных пометок становится постоянной. Последнее указывает на то, что пометка уже не является верхней границей, а дает точную длину кратчайшего пути от s к рассматриваемой вершине.
Алгоритм.
Пусть l(xi) – пометка вершины xi, Г(р) – множество вершин графа, смежных с вершиной р.
Шаг 1. Присвоение начальных значений.
Положить l(s)=0 и считать эту пометку постоянной. Положить l(xi)= для всех xi ≠s и считать эти пометки временными. Положить p=s.
Шаг 2. Обновление пометок.
Для всех xi Г(р), пометки которых временные, заменить пометки в соот-
ветствии со следующим выражением: |
|
l(xi)=min[l(xi),l(p)+c(p,xi)] . |
(1) |
Шаг 3. Превращение пометки в постоянную.
Среди всех вершин с временными пометками найти такую, для которой l(xi*)=min[l(xi)].
Шаг 4. Считать пометку вершины xi* постоянной; положить р= xi*. Шаг 5. Если р=t, то l(p) является длиной кратчайшего пути. Останов.
Если рt, то перейти к шагу 2.
Замечание. Как только длины кратчайших путей будут найдены, сами пути можно получить при помощи рекурсивной процедуры с использованием соотношения
L(xi’)+c(xi’, xi)=L( xi);
т.к. вершина xi’ непосредственно предшествует вершине xi в кратчайшем пути от s к xi, то для любой вершины xi соответствующую вершину xi’ можно найти как одну из оставшихся вершин.
Пример:
|
|
2 |
|
3 |
|
|
|
9 |
|
2 |
|
|
|
|
|
|
|
|
||
1 |
4 |
|
2 |
|
9 |
|
3 |
|
10 |
|
|
||
|
|
|
|
4 |
||
|
|
|
|
|
|
|
2 |
|
|
|
16 |
12 |
3 |
|
14 |
|
|
|
5 |
|
|
|
|
|
|
|
7 |
2 |
|
12 |
||
|
6
Матрица весов для графа G:
|
1 |
2 |
3 |
4 |
5 |
6 |
7 |
1 |
0 |
∞ |
4 |
∞ |
16 |
14 |
2 |
2 |
∞ |
0 |
∞ |
2 |
∞ |
3 |
9 |
3 |
4 |
∞ |
0 |
9 |
12 |
10 |
2 |
4 |
∞ |
2 |
9 |
0 |
3 |
∞ |
∞ |
5 |
16 |
∞ |
12 |
3 |
0 |
2 |
14 |
6 |
14 |
3 |
10 |
∞ |
2 |
0 |
12 |
7 |
2 |
9 |
2 |
∞ |
14 |
12 |
0 |
Найти кратчайшие расстояния от 1 вершины ко всем остальным.
1)l(1) = 0;
l(2) = l(3) = … = l(7) =∞; p = 1.
2)Г(1) = {3,5,6,7};
l(3) = min(l(3), l(1)+C(1,3)) = min(∞,0+4)=4;
l(5) = min(l(5), l(1)+C(1,5)) = 16;
l(6) = min(l(2), l(1)+C(1,2)) = 14;
l(7) = min(l(2), l(1)+C(1,2)) = 2.
3)min(4,16,14,2) = 2; min = l(7) = 2;
p = 7.
4)Г(7) ={1,2,3,5,6};
l(2) = min(l(2), l(7)+C(2,7)) = min(∞, 2+9)=11;
l(3) = min(l(3), l(7)+C(3,7)) = 4;
l(5) = min(l(5), l(7)+C(5,7)) =16;
l(6) = min(l(6), l(7)+C(6,7)) = 14.
5)min(11,4,16,14) = 4; min = l(3) = 4;
p = 3.
6)Г(3) = {1,4,5,6,7};
l(4) = min(l(4), l(3)+C(4,3)) = 13;
l(5) = min(l(5), l(3)+C(5,3)) = 16;
l(6) = min(l(6), l(3)+C(6,3)) = 14.
7)min(13,16, 14) = 13; min = l(4) = 13; p=4.
8)Г(4) = {2,3,5};
l(5) = min(l(5), l(4)+C(5,4)) = 16;
l(2) = min(l(6), l(3)+C(6,3)) = 11.
9)min(11,16) = 11; min = l(2) =11;
p = 2.
10) Г(2) = {4,6,7};
l(6) = min(l(6), l(2)+C(2,6)) = 14.
11)min = l(6) =14; p = 6.
12)l(5) = min(l(5), l(6)+C(5,6)) = 16; p=5.
Таким образом, найдены следующие кратчайшие маршруты от вершины 1:
(1-2): (1,7,2)=11; (1-3): (1,3)=4;
(1-4): (1,3,4)=(1,7,3,4)=(1,7,2,4)=13; (1-5): (1,5)=16; (1-6): (1,6)=14; (1-7): (1,7)=2.
2.5.2 АЛГОРИТМ ФОРДА
Алгоритм Форда – обобщение алгоритма Дейкстры для случая, когда некоторые ребра имеют отрицательные веса.
На шаге 2 алгоритма пересчет l(x) с помощью соотношения (1) производится для любых вершин, а не только для непомеченных. Значения l(x) могут уменьшаться как для помеченных, так и для непомеченных вершин, т.к. существуют ребра с отрицательным весом.
Если для некоторой помеченной вершины х происходит уменьшение величины l(x), то с этой вершины пометка снимается.
Процедура заканчивается, когда все вершины помечены, и после выполнения шага 2 ни одна из величин l(x) не изменяется.
Алгоритм.
Пусть lk(xi) – пометка вершины хi в конце (k+1)-й итерации, Г(s) – множество вершин, смежных с вершиной s.
Шаг 1. Присвоение начальных значений.
Положить S= Г(s), k=1, l1(s)=0, l1(xi)=c(s, xi) для всех xi Г(s). Положить l1(xi)= для всех остальных xi.
Шаг 2. Обновление пометок.
Для каждой вершины xi Г(s) (xis) изменить ее пометку следующим образом:
lk+1(xi)=min[lk(xi),min{ lk(xi)+c(xj, xi)}] для xj Ti, где Ti=Г(xi)S.
Шаг 3. Проверка на окончание.
Если k n-1 и lk+1(xi)= lk(xi) для всех xi, то пометки равны длинам кратчайших путей. Останов.
Если k<n-1 и lk+1(xi) lk(xi) для некоторой вершины xi, то перейти к шагу 4.
Если k=n-1 и lk+1(xi) lk(xi) для некоторой вершины xi, то в графе существует цикл отрицательного веса и задача не имеет решения. Останов.
Шаг 4. Подготовка к следующей итерации.
Обновить множество следующим образом:
S={xi | lk+1(xi) lk(xi)}.
Шаг 5. Положить k=k+1 и перейти к шагу 2.
Замечание. Алгоритм Форда не решает задачу при наличии цикла отрицательной длины. Для его обнаружения в процессе работы алгоритма просчитывается, сколько раз помечается каждая вершина: если вершина помечается ровно n раз, где n – число вершин графа, - процедура заканчивает работу: существует цикл отрицательной длины.
Пример:
|
|
2 |
|
3 |
|
|
|
9 |
|
2 |
|
|
|
|
|
|
|
|
||
1 |
4 |
|
2 |
|
9 |
|
3 |
|
10 |
|
|
||
|
|
|
|
4 |
||
|
|
|
|
|
|
|
2 |
|
|
|
16 |
12 |
3 |
|
14 |
|
|
|
5 |
|
|
|
|
|
|
|
2
7 12
6
Матрица весов для графа G:
|
1 |
2 |
3 |
4 |
5 |
6 |
7 |
1 |
0 |
∞ |
4 |
∞ |
16 |
14 |
2 |
2 |
∞ |
0 |
∞ |
2 |
∞ |
3 |
9 |
3 |
4 |
∞ |
0 |
9 |
12 |
10 |
2 |
4 |
∞ |
2 |
9 |
0 |
3 |
∞ |
∞ |
5 |
16 |
∞ |
12 |
3 |
0 |
2 |
14 |
6 |
14 |
3 |
10 |
∞ |
2 |
0 |
12 |
7 |
2 |
9 |
2 |
∞ |
14 |
12 |
0 |
1) s=1; вершины, смежные вершине 1: S= Г(s)={3,5,6,7}, k=1; l1(1)=0,
l1(3)=4, l1(5)=16, l1(6)=14, l1(7)=2, l1(2)= l1(4)= ;
2) Г(s)={2,3,4,5,6,7} - вершины, смежные вершинам 3,5,6,7;
для 2: Т2={7,6,4} {3,5,6,7}={7,6}, где {7,6,4} - вершины, смежные вершине 2; l2(2)=min( , min(2+9,14+3))=11;
для 3: Т3={1,4,5,6,7} {3,5,6,7}={5,6,7}, где {1,4,5,6,7} - вершины, смежные вершине 3;
l2(3)=min(4, min(16+12,14+10,2+2))=4;
для 4: Т4={2,3,5} {3,5,6,7}={3,5}, где {2,3,5} - вершины, смежные вершине 4; l2(4)=13;
для 5: Т5={1,3,4,6,7} {3,5,6,7}={3,6,7}, где {1,3,4,6,7} - вершины, смежные вершине 5;
l2(5)= 16;
для 6: Т2={1,2,3,5,7} {3,5,6,7}={3,5,7}, где {1,2,3,5,7} - вершины, смежные вершине 6;
l2(6)= 14;
для 7: Т2={1,2,3,5,6} {3,5,6,7}={3,5,6}, где {1,2,3,5,6} - вершины, смежные вершине 7;
l2(7)=2;
3)переходим к шагу 4, обновляем множество S;
4)S={2,4};
5)k=2; переходим к шагу 2;
6)Г(S)={2,3,4,5,6,7} - вершины, смежные вершинам 2,4;
для 2: Т2={7,6,4} {2,4}={4}; l3(2)=min(11, 13+2))=11;
для 3: Т3={1,4,5,6,7} {2,4}={4}; l3(3)=min(4, 13+9)=4;
для 4: Т4={2,3,5} {2,4}={2}; l3(4)= min(13, 11+2)=13;
для 5: Т5={1,3,4,6,7} {2,4}={4}; l3(5)= 16;
для 6: Т2={1,2,3,5,7} {2,4}={2}; l3(6)= 14;
для 7: Т2={1,2,3,5,6} {2,4}={2} l3(7)=2.
7) k n-1 и lk+1(xi)= lk(xi) для всех xi, следовательно, пометки равны длинам кратчайших путей.
Кратчайшие маршруты от вершины 1:
(1-2):(1,7,2)=11; (1-3): (1,3)=4;
(1-4): (1,3,4)=(1,7,3,4)=(1,7,2,4)=13; (1-5): (1,5)=16; (1-6): (1,6)=14; (1-7): (1,7)=2.