Вершинная, рёберная связность, связь между ними и минимальной степенью вершины — различия между версиями
Free0u (обсуждение | вклад) м (→Нахождение реберной связности) |
Free0u (обсуждение | вклад) м |
||
| Строка 35: | Строка 35: | ||
}} | }} | ||
| + | == Нахождение реберной связности == | ||
| + | Для нахождения реберной связности воспользуемся [[Теорема Менгера, альтернативное доказательство|следующей теоремой:]] | ||
| + | {{Теорема | ||
| + | |about= | ||
| + | Теорема Менгера для <tex>k</tex>-реберной связности | ||
| + | |statement= | ||
| + | Пусть <tex>G</tex> - конечный, неориентированный граф, <tex>\lambda(G) = k</tex> <tex>\Leftrightarrow</tex> для всех пар вершин <tex>x, y \in G</tex> существует <tex>k</tex> реберно непересекающихся путей из <tex>x</tex> в <tex>y</tex>. | ||
| + | }} | ||
| + | Алгоритм следует непосредственно из теоремы. Нужно перебрать все пары вершин <tex>s</tex> и <tex>t</tex>, найти количество непересекающихся путей из <tex>s</tex> в <tex>t</tex> и выбрать минимум. | ||
| + | |||
| + | Для нахождения количества непересекающихся путей из <tex>s</tex> в <tex>t</tex> воспользуемся алгоритмом нахождения максимального потока. Сопоставим каждому ребру пропускную способность, равную <tex>1</tex> и найдем максимальный поток. | ||
| + | Он и будет равен количеству путей. Действительно, если провести декомпозицию потока, то получим набор реберно непересекающихся путей из <tex>s</tex> в <tex>t</tex>, по которым поток неотрицателен и равен <tex>1</tex> (т.к. пропускная способность всех ребер равна <tex>1</tex>). А значит, если поток равен <tex>flow</tex>, то и количество путей равно <tex>flow</tex>. | ||
| + | |||
| + | ''' Псевдокод алгоритма ''' | ||
| + | ans = INF | ||
| + | for <tex>s \in V:</tex> | ||
| + | for <tex>t \in V:</tex> | ||
| + | flow = find_flow(s, t) | ||
| + | ans = min(ans, flow) | ||
| + | |||
| + | '''Оценка работы''' | ||
| + | |||
| + | Время работы равно <tex>V^2 \times O(find\_flow)</tex>. При использовании [[Алоритм Эдмондса-Карпа|алгоритма Эдмондса-Карпа]] время равно <tex>V^2 \times O(V E^2)</tex> или <tex>O(V^3 E^2)</tex> | ||
| + | |||
| + | == Нахождение вершинной связности == | ||
| + | Нахождение вершинной связности сводится к задаче нахождения реберной связности следующим образом. | ||
| + | |||
| + | Разобьем каждую вершину <tex>v</tex> графа на две вершины <tex>v_1</tex> и <tex>v_2</tex>. Все ребра, которые входили в <tex>v</tex> будут входить в <tex>v_1</tex>. Все ребра, которые выходили из <tex>v</tex> будут выходить из <tex>v_2</tex>. Так же добавим ребро <tex>(v_1, v_2)</tex>. | ||
| + | |||
| + | [[Файл:Vertex-2vertex.png|300px|left|thumb|Иллюстрация]] | ||
| + | <br clear="all"/> | ||
| + | В новом графе запустим алгоритм нахождения реберной связности. | ||
== Нахождение реберной связности == | == Нахождение реберной связности == | ||
Для нахождения реберной связности воспользуемся [[Теорема Менгера, альтернативное доказательство|следующей теоремой:]] | Для нахождения реберной связности воспользуемся [[Теорема Менгера, альтернативное доказательство|следующей теоремой:]] | ||
Версия 14:45, 29 декабря 2012
Содержание
Определения
| Определение: |
| Вершинной связностью графа называется наименьшее число вершин, удаление которых приводит к несвязному или тривиальному графу. |
| Определение: |
| Реберной связностью графа называется наименьшее количество ребер, удаление которых приводит к несвязному или тривиальному графу. |
Связь между вершинной, реберной связностью и минимальной степенью вершины
Пускай минимальная степень вершины графа обозначается буквой . Тогда:
| Теорема: |
Для любого графа справедливо следующее неравенство: |
| Доказательство: |
|
| Теорема: |
Для любых натуральных чисел , таких что , существует граф , у которого и |
| Доказательство: |
|
Рассмотрим граф , являющийся объединением двух полных графов и , содержащих вершину. Отметим вершин, принадлежащих подграфу и вершин, принадлежащих подграфу . Добавим в граф ребер так, чтобы каждое ребро было инцидентно помеченной вершине, лежащей в подграфе и помеченной вершине, лежащей в подграфе , причем не осталось ни одной помеченной вершины, у которой не появилось хотя бы одно новое ребро, инцидентное ей. Тогда:
|
Нахождение реберной связности
Для нахождения реберной связности воспользуемся следующей теоремой:
| Теорема (Теорема Менгера для -реберной связности): |
Пусть - конечный, неориентированный граф, для всех пар вершин существует реберно непересекающихся путей из в . |
Алгоритм следует непосредственно из теоремы. Нужно перебрать все пары вершин и , найти количество непересекающихся путей из в и выбрать минимум.
Для нахождения количества непересекающихся путей из в воспользуемся алгоритмом нахождения максимального потока. Сопоставим каждому ребру пропускную способность, равную и найдем максимальный поток. Он и будет равен количеству путей. Действительно, если провести декомпозицию потока, то получим набор реберно непересекающихся путей из в , по которым поток неотрицателен и равен (т.к. пропускная способность всех ребер равна ). А значит, если поток равен , то и количество путей равно .
Псевдокод алгоритма
ans = INF for for flow = find_flow(s, t) ans = min(ans, flow)
Оценка работы
Время работы равно . При использовании алгоритма Эдмондса-Карпа время равно или
Нахождение вершинной связности
Нахождение вершинной связности сводится к задаче нахождения реберной связности следующим образом.
Разобьем каждую вершину графа на две вершины и . Все ребра, которые входили в будут входить в . Все ребра, которые выходили из будут выходить из . Так же добавим ребро .
В новом графе запустим алгоритм нахождения реберной связности.
Нахождение реберной связности
Для нахождения реберной связности воспользуемся следующей теоремой:
| Теорема (Теорема Менгера для -реберной связности): |
Пусть - конечный, неориентированный граф, для всех пар вершин существует реберно непересекающихся путей из в . |
Алгоритм следует непосредственно из теоремы. Нужно перебрать все пары вершин и , найти количество непересекающихся путей из в и выбрать минимум.
Для нахождения количества непересекающихся путей из в воспользуемся алгоритмом нахождения максимального потока. Сопоставим каждому ребру пропускную способность, равную и найдем максимальный поток. Он и будет равен количеству путей. Действительно, если провести декомпозицию потока, то получим набор реберно непересекающихся путей из в , по которым поток неотрицателен и равен (т.к. пропускная способность всех ребер равна ). А значит, если поток равен , то и количество путей равно .
Псевдокод алгоритма
ans = INF for for flow = find_flow(s, t) ans = min(ans, flow)
Оценка работы
Время работы равно . При использовании алгоритма Эдмондса-Карпа время равно или
Нахождение вершинной связности
Нахождение вершинной связности сводится к задаче нахождения реберной связности следующим образом.
Разобьем каждую вершину графа на две вершины и . Все ребра, которые входили в будут входить в . Все ребра, которые выходили из будут выходить из . Так же добавим ребро .
В новом графе запустим алгоритм нахождения реберной связности.
Литература
- Харари Ф. Теория графов: Пер. с англ. / Предисл. В. П. Козырева; Под ред. Г.П.Гаврилова. Изд. 4-е. — М.: Книжный дом "ЛИБРОКОМ", 2009. — 60 с.