Вершинной связностью графа G называется наименьшее число вершин, удаление которых приводит к несвязному, или тривиальному, графу; обозначается: c(G).
c()=n-1; c()=1; c()=2.
Реберной связностью графа G называется наименьшее число ребер, удаление которых приводит к несвязному графу; обозначается: .
l()=n-1; l()=1; l()=2.
Для тривиального графа реберную связность полагают равной 0.
Пример:
Вершина v графа G называется точкой сочленения, или разделяющей вершиной, если граф G\{v} имеет больше компонент связности, чем граф G.
Ребро е графа G называется мостом, если его удаление приводит к нарушению связности графа.
Пример:
Связный непустой граф называется неразделимым, если в нем отсутствуют точки сочленения.
Блок – это максимальный неразделимый подграф исходного графа.
Теорема Уитни. Пусть - минимальная степень вершин графа G, тогда справедливо следующее неравенство: c(G) .
Пример:
Граф не является неразделимым;
блоки графа: {c,d,e},{c,b,f},{a,g,h,i},{a,b}.
КРАТЧАЙШИЕ МАРШРУТЫ В ГРАФАХ
Пусть задан граф G=(V,E), ребрам которого приписаны веса (стоимости), задаваемые матрицей . Задача состоит в нахождении кратчайшего пути от заданной начальной вершины s Î V до заданной конечной вершины t Î V при условии, что такой путь существует. Элементы матрицы весов могут быть положительными, отрицательными или нулевыми. Единственное ограничение состоит в том, чтобы граф не содержал циклов с суммарным отрицательным весом.
Задачи данного типа имеют следующие модификации:
- для заданной начальной вершины s найти кратчайшие пути от нее ко всем другим вершинам графа;
- найти кратчайшие пути между всеми парами вершин графа.
АЛГОРИТМ ДЕЙКСТРЫ
Постановка задачи. Имеется произвольный взвешенный (n,m)-граф (в матрице весов нет отрицательных чисел), т.е.:
Требуется найти кратчайший маршрут от вершины 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’ можно найти как одну из оставшихся вершин.
Пример:
Матрица весов для графа G:
∞ | ∞ | ||||||
∞ | ∞ | ∞ | |||||
∞ | |||||||
∞ | ∞ | ∞ | |||||
∞ | |||||||
∞ | |||||||
∞ |
Найти кратчайшие расстояния от 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 алгоритма пересчет 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) (xi¹s) изменить ее пометку следующим образом:
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 – число вершин графа, - процедура заканчивает работу: существует цикл отрицательной длины.
Пример:
Матрица весов для графа G:
∞ | ∞ | ||||||
∞ | ∞ | ∞ | |||||
∞ | |||||||
∞ | ∞ | ∞ | |||||
∞ | |||||||
∞ | |||||||
∞ |
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.
АЛГОРИТМ ФлойДА
Алгоритм базируется на использовании последовательности из n преобразований (итераций) начальной матрицы весов. При этом на k-той итерации матрица представляет длины кратчайших путей между каждой парой вершин с тем ограничением, что путь между xi и xj (для любых xi и xj) содержит в качестве промежуточных только вершины из множества { x1, x2,…, xn}.
Все циклы в графе G имеют неотрицательный суммарный вес.
Алгоритм.
Шаг 1. Присвоение начальных значений.
Положить k=0.
Шаг 2.
k=k+1.
Шаг 3.
Для всех i ¹ k таких что cik¹¥, и для всех j ¹k таких что ckj ¹¥ введем операцию:
cij=min[cij, (cik+ckj)]. (2)
Шаг 4. Проверка на окончание.
Если cij <0, то в графе существует цикл отрицательного веса, содержащий вершину xi; решения нет. Останов.
Если все cij ³ 0 и k=n, то получено решение и матрица дает длины всех кратчайших путей. Останов.
Если все cij ³ 0, но k<n, то вернуться к шагу 2.
Пример:
Пусть задан граф G следующего вида:
Матрица весов: Матрица путей:
k=0;
k=1;
∞ | ∞ | ||||||
∞ | ∞ | ∞ | |||||
∞ | |||||||
∞ | ∞ | ∞ | |||||
∞ | |||||||
∞ | |||||||
∞ |
k=2;
∞ | ∞ | ||||||
∞ | ∞ | ∞ | |||||
∞ | |||||||
∞ | |||||||
∞ | |||||||
k=3;
∞ | |||||||
∞ | ∞ | ∞ | |||||
∞ | |||||||
∞ | |||||||
k=4;
k=5;
k=6;
k=7;
Матрица q=[qij] – матрица, в которой элемент qij указывает вершину, непосредственно предшествующую вершине хj в кратчайшем пути от хi к хj. Матрице q присваиваются начальные значения qij= хi для всех хi и хj. На шаге 3 алгоритма обновление матрицы происходит следующим образом:
В конце алгоритма кратчайшие пути получаются непосредственно из заключительной матрицы q.
Таким образом, матрица всех кратчайших маршрутов:
Матрица путей:
1,7,2 | 1,3 | 1,3,4 | 1,5 | 1,6 | 1,7 | ||
2,7,1 | 2,4,3 | 2,4 | 2,4,5 | 2,6 | 2,7 | ||
3,1 | 3,4,2 | 3,4 | 3,5 | 3,6 | 3,7 | ||
4,3,1 | 4,2 | 4,3 | 4,5 | 4,2,6 | 4,2,7 | ||
5,1 | 5,4,2 | 5,3 | 5,4 | 5,6 | 5,7 | ||
6,1 | 6,2 | 6,3 | 6,2,4 | 6,5 | 6,7 | ||
7,1 | 7,2 | 7,3 | 7,2,4 | 7,5 | 7,6 |
Кратчайшие маршруты от вершины 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.
Контрольные вопросы
1. Определение маршрута, цепи, цикла.
2. Какой граф называется связным? Что такое компонента связности?
3. Привести примеры графов, которые имеют все периферийные и все центральные вершины.
4. Что такое эксцентриситет?
5. Чем диаметр графа отличается от его радиуса (дайте их определение)?
6. Что такое число вершинной и реберной связности?
7. Дайте определения моста и точки сочленения.
8. Для произвольного графа постройте матрицу расстояний (вес любого ребра равен 1).
9. Привести пример графа, удовлетворяющего строгому неравенству теоремы Уитни.
10. Сформулируйте задачу нахождения кратчайших маршрутов в графе.
ДЕРЕВЬЯ И ОСТОВЫ