| 
				   | 
				
| Строка 67: | 
Строка 67: | 
|   |  |   |  | 
|   | [[Файл:Menger-vertex.JPG|300px|left|thumb|Иллюстрация]]  |   | [[Файл:Menger-vertex.JPG|300px|left|thumb|Иллюстрация]]  | 
|   | + | <br clear="all"/>  | 
|   |  |   |  | 
|   | В новом графе запустим алгоритм нахождения реберной связности.  |   | В новом графе запустим алгоритм нахождения реберной связности.  | 
		Версия 17:46, 22 декабря 2012
Определения
| Определение: | 
| Вершинной связностью [math]\varkappa[/math] графа [math]G[/math] называется наименьшее число вершин, удаление которых приводит к несвязному или тривиальному графу. | 
| Определение: | 
| Реберной связностью [math]\lambda[/math] графа [math]G[/math] называется наименьшее количество ребер, удаление которых приводит к несвязному или тривиальному графу. | 
Связь между вершинной, реберной связностью и минимальной степенью вершины
Пускай минимальная степень вершины графа [math]G[/math] обозначается буквой [math]\delta[/math]. Тогда:
| Теорема: | 
Для любого графа [math]G[/math] справедливо следующее неравенство: [math]\varkappa \le\lambda \le \delta [/math]  | 
| Доказательство: | 
| [math]\triangleright[/math] | 
   Полный граф.  [math] \lambda = \delta = \varkappa = 4[/math] 
-  Проверим второе неравенство. Если в графе [math]G[/math] нет ребер, то [math] \lambda = 0 [/math]. Если ребра есть, то несвязный граф получаем из данного, удаляя все ребра, инцидентные вершине с наименьшей степенью. В любом случае [math] \lambda \le \delta [/math]. 
 
-  Чтобы проверить первое неравенство нужно рассмотреть несколько случаев. 
- Если  [math]G[/math]  - несвязный или тривиальный граф, то  [math] \varkappa = \lambda = 0 [/math]. 
 
- Если [math]G[/math] связен и имеет мост [math]x[/math], то [math]\lambda = 1 [/math]. В последнем случае [math] \varkappa = 1 [/math], поскольку или граф [math]G[/math] имеет точку сочленения, инцидентную ребру [math]x[/math], или же [math]G=K_2[/math]. 
 
- Наконец, предположим, что граф [math]G[/math] содержит множество из [math] \lambda \ge 2 [/math] ребер, удаление которых делает его несвязным. Ясно, что удаляя [math]\lambda - 1 [/math] ребер из этого множества получаем граф, имеющий мост [math]x = uv[/math]. Для каждого из этих [math]\lambda - 1 [/math] ребер выберем какую-либо инцидентную с ним вершину отличную от [math]u[/math] и [math]v[/math].  Удаление выбранных вершин приводит к удалению [math]\lambda - 1 [/math] (а возможно, и большего числа) ребер. Если получаемый после такого удаления граф не связен, то [math]\varkappa \lt  \lambda[/math]; если же он связен, то в нем есть мост [math]x[/math], и поэтому удаление вершины [math]u[/math] или [math]v[/math] приводит либо к несвязному, либо к тривиальному графу. В любом случае [math] \varkappa \le \lambda[/math]. 
 
  
  | 
| [math]\triangleleft[/math] | 
| Теорема: | 
Для любых натуральных чисел [math]a, b, c[/math], таких что [math]a \le b \le c[/math], существует граф [math]G[/math], у которого [math]\varkappa  = a, \lambda  = b[/math] и [math]\delta = c [/math]  | 
| Доказательство: | 
| [math]\triangleright[/math] | 
   Граф, в котором  [math] \delta = 4[/math],  [math]\lambda = 3[/math],  [math]\varkappa = 2[/math].  
Рассмотрим граф [math]G[/math], являющийся объединением двух полных графов [math]G_1[/math] и [math]G_2[/math], содержащих [math]c + 1[/math] вершину. Отметим [math]b[/math] вершин, принадлежащих подграфу [math]G_1[/math] и [math]a[/math] вершин, принадлежащих подграфу [math]G_2[/math]. Добавим в граф [math]G[/math] [math]b[/math] ребер так, чтобы каждое ребро было инцидентно помеченной вершине, лежащей в  подграфе [math]G_1[/math] и помеченной вершине, лежащей в подграфе [math]G_2[/math], причем не осталось ни одной помеченной вершины, у которой не появилось хотя бы одно новое ребро, инцидентное ей.
Тогда:
 
-  Поскольку [math]b \le c[/math], то было как минимум две непомеченные вершины, поэтому [math] \delta = c[/math], так как минимальные степени вершин графов [math]G_1[/math] и [math]G_2[/math] были равны [math]c[/math], а степени их вершин не уменьшались.
 
-  Заметим, что между двумя вершинами графа [math]G[/math] существует не меньше [math]a[/math] вершинно-непересекающихся простых цепей, следовательно по теореме Менгера [math]\varkappa \ge a[/math]. Однако если удалить из графа [math]G[/math] помеченные вершины его подграфа [math]G_2[/math], то граф [math]G[/math] потеряет связность. Значит, [math]\varkappa = a[/math].
 
-  Аналогично рассуждению пункта 2, легко убедится, что [math]\lambda = b[/math]. 
 
  | 
| [math]\triangleleft[/math] | 
Нахождение реберной связности
 Описание 
Для нахождения реберной связности воспользуемся следующей теоремой:
| Теорема (Теорема Менгера для [math]k[/math]-реберной связности): | 
Пусть [math]G[/math] - конечный, неориентированный граф, [math]\lambda(G) = k[/math] [math]\Leftrightarrow[/math]  для всех пар вершин [math]x, y \in G[/math] существует [math]k[/math] реберно непересекающихся путей из [math]x[/math] в [math]y[/math].  | 
Алгоритм следует непосредственно из теоремы. Нужно перебрать все пары вершин [math]s[/math] и [math]t[/math], найти количество непересекающихся путей из [math]s[/math] в [math]t[/math] и выбрать минимум.
Для нахождения количества непересекающихся путей из [math]s[/math] в [math]t[/math] воспользуемся алгоритмом нахождения максимального потока. Сопоставим каждому ребру пропускную способность, равную [math]1[/math] и найдем максимальный поток.
Он и будет равен количеству путей. Действительно, если провести декомпозицию потока, то получим набор реберно непересекающихся путей из [math]s[/math] в [math]t[/math], по которым поток неотрицателен и равен 1 (т.к. пропускная способность всех ребер равна [math]1[/math]). А значит, если поток равен [math]flow[/math], то и количество путей равно [math]flow[/math].
 Псевдокод алгоритма 
 ans = INF
 for [math]s \in V:[/math]
   for [math]t \in V:[/math]
     flow = find_flow(s, t)
     ans = min(ans, flow)
Оценка работы
Время работы равно [math]V^2 \times O(find\_flow)[/math]. При использовании алгоритма Эдмондса-Карпа время равно [math]V^2 \times O(V E^2) = O(V^3 E^2)[/math]
Нахождение вершинной связности
Нахождение вершинной связности сводится к задаче нахождения реберной связности следующим образом.
Разобьем каждую вершину [math]v[/math] графа на две вершины [math]v_1[/math] и [math]v_2[/math]. Все ребра, которые входили в [math]v[/math] будут входить в [math]v_1[/math]. Все ребра, которые выходили из [math]v[/math] будут выходить из [math]v_2[/math]. Так же добавим ребро [math](v_1, v_2)[/math].
В новом графе запустим алгоритм нахождения реберной связности.
Литература
-  Харари Ф. Теория графов: Пер. с англ. / Предисл. В. П. Козырева; Под ред. Г.П.Гаврилова. Изд. 4-е. — М.: Книжный дом "ЛИБРОКОМ", 2009. — 60 с.