5.1.1 Графы
Ориентированный граф (directed graph) определяется как пара (V,Е), где конечное множество, а Е бинарное отношение на V, т. е. подмножество множества VV. Ориентированный граф иногда для краткости называют ор- графом (digraph). Множество V называют множеством вершин графа (vertex set); его элемент называют вершиной графа (vertex; множественное число ver- tices). Множество Е называют множеством рёбер (edge set) графа; его элемен- ты называют рёбрами (edges). На рис. 5.1(a) показан ориентированный граф с множеством вершин {1,2,3,4,5,6}. Вершины изображены кружками, а рёб- ра стрелками. Заметим, что граф может содержать рёбра-циклы (self-loops), соединяющие вершину с собой.
В неориентированном (undirected) графе G = (V, Е) множество рёбер Е состоит из неупорядоченных (unordered) пар вершин: парами являются множе- ства {и, v}, где u, v V и . Мы будем обозначать неориентированное ребро как (u, v) вместо {u, v}; при этом для неориентированного графа (u, v) и (v, u) обозначают одно и то же ребро. Неориентированный граф не может содержать рёбер-циклов, и каждое ребро состоит из двух различных вершин («соединяя» их). На рисунке 5.1(б) изображён неориентированный граф с множеством вер- шин {1,2,3,4,5,6}.
Многие понятия параллельно определяются для ориентированных и неори- ентированных графов (с соответствующими изменениями). Про ребро (и, v) ориентированного графа говорят, что оно выходит из (incident from, leaves) вершины и и входит (incident to, enters) в вершину v.
Рисунок 5.1 – Ориентированные и неориентированные графы
На рисунке 5.1 изображены: (а) Ориентированный граф (V,Е), где V = {1,2,3,4,5,6} и Е = {(1,2),(2,2),(2,4),(2,5),(4,1),(4,5),(5,4), (6,3)}. Ребро (2,2) является ребром-циклом. (б) Неориентированный граф G = (V, Е), где V = {1,2,3,4,5,6} и Е = {(1,2), (1,5), (2,5), (3,6)}. Вершина 4 является изолированной (не имеет смежных вершин). (в) Подграф графа (а), получающийся его ограничением на мно- жество вершин {1,2,3,6}.
Например, на рис. 5.1(а) имеется три ребра, выходящих из вершины 2 (рёбра (2,2), (2,4), (2,5)) и два ребра, в неё входящих (рёбра (1,2), (2,2)). Про ребро (u, v) неориентированно- го графа говорят, что оно инцидентно вершинам (incident on vertices) и и v. Например, на рис. 5.1(б) есть два ребра, инцидентные вершине 2 (рёбра (1,2) и (2, 5)).
Если в графе G имеется ребро (u, v), говорят, что вершина v смежна с вер- шиной и (is adjacent tо u). Для неориентированных графов отношение смежности является симметричным, но для ориентированных графов это не обязательно. Если вершина v смежна с вершиной и в ориентированном графе, пишут иv. Для обоих рисунков 5.1(а) и 5.1(б) вершина 2 является смежной с вершиной 1, но лишь во втором из них вершина 1 смежна с вершиной 2 (в первом случае ребро (2, 1) отсутствует в графе).
Степенью (degree) вершины в неориентированном графе называется чис- ло инцидентных ей рёбер. Например, для графа на рис. 5.1(б) степень верши- ны 2 равна 2. Для ориентированного графа различают исходящую степень (out- degree), определяемую как число выходящих из неё рёбер, и входящую степень (in-degree), определяемую как число входящих в неё рёбер. Сумма исходящей и входящей степеней называется степенью (degree) вершины. Например, верши- на 2 в графе на рис. 5.1(а) имеет входящую степень 2, исходящую степень 3 и степень 5.
Путь длины k (path of length k) из вершины, u в вершину v определяется как последовательность вершин , в которой , и для всех i = 1,2,...,k. Таким образом, путь длины k состоит из k рёбер. Этот путь содержит (contains) вершины и рёбра . Вершину называютначалом пути, вершину его кон- цом; говорят, что путь ведёт из в (from to ). Если для данных вершин и и и' существует путь р из и в и', то говорят, что вершина и' достижима из и по пути р (u' is reachable from и via р). В этом случае мы пишем (для ориентированных графов) .
Путь называется простым (simple), если все вершины в нём различны. Например, на рис. 5.1(а) есть простой путь длины 3, а также путь той же длины, не являющийся простым.
Подпуть (subpath) пути р = получится, если мы возьмём не- которое количество идущих подряд вершин этого пути, т.е. последовательность принекоторых i, j, для которых 0 i j k.
Циклом (cycle) в ориентированном графе называется путь, в котором на- чальная вершина совпадает с конечной и который содержит хотя бы одно ребро. Циклназывается простым (simple), если в нём нет одинаковых вершин (кроме первой и последней), т.е. если все вершины различны. Ребро-цикл является циклом длины 1. Мы отождествляем циклы, отличающиеся сдвигом вдоль цикла: один и тот же цикл длины k может быть представлен k различными путями (в качестве начала и конца можно взять любую из k вершин). Например, на рис. 5.1(а) пути ,и пред- ставляют один и тот же цикл. Этот цикл является простым, в то время как цикл таковым не является. На том же рисунке есть цикл , образованный единственным ребром-циклом (2,2). Ориентированный граф, не содержащий рёбер-циклов, называется простым (simple).
В неориентированном графе путь называется (простым) цик- лом, если k3, и все вершины различны. Например, на рис. 5.1(б) имеется простой цикл .
Граф, в котором нет циклов, называется ациклическим (acyclic).
Неориентированный граф называется связным (connected), если для любой пары вершин существует путь из одной в другую. Для неориентированного графа отношение «быть достижимым из» является отношением эквивалентности на множестве вершин. Классы эквивалентности называются связными компо- нентами (connected components) графа. Например, на рис. 5.1(б) имеются три связные компоненты: {l, 2, 5}, {3, 6} и {4}. Неориентированный граф связен тогда и только тогда, когда он состоит из единственной связной компоненты.
Ориентированный граф называется сильно связным (strongly connected), ес- ли из любой его вершины достижима (по ориентированным путям) любая другая. Любой ориентированный граф можно разбить на сильно связные компоненты (strongly connected components), которые определяются как классы эквивалент- ности отношения «и достижимо из v и v достижимо из и». Ориентированный граф сильно связен тогда и только тогда, когда состоит из единственной сильно связной компоненты. Граф на рис. 5.1(а) имеет три таких компоненты: {1, 2, 4, 5}, {3} и {6}. Заметим, что вершины {3,6} не входят в одну сильно связную ком- поненту, так как 3 достижима из 6, но не наоборот.
Два графа G = (V, Е) и G' = (V ', Е’) называются изоморфными (isomor- phic), если существует взаимно однозначное соответствие f: между мно- жествами их вершин, при котором рёбрам одного графа соответствуют рёбра другого: (и, v) Е тогда и только тогда, когда (f(u), f(v)) Е'. Можно сказать, что изоморфные графы это один и тот же граф, в котором вершины названы по-разному. На рис. 5.2(а) приведён пример двух изоморфных графов G и G' с множествами вершин V = {1,2,3,4,5,6} и V ' = {u,v,w,х,у,z}. Функция f: , для которой f(1) = и, f(2) = v, f(3) = w, f(4) = х, f(5) = у, f(6) = z, явля- ется изоморфизмом. Напротив, графы на рис. 5.2(б) не изоморфны, хотя оба име- ют по 5 вершин и по 7 рёбер. Чтобы убедиться, что они не изоморфны, достаточно отметить, что в верхнем графе есть вершина степени 4, а в нижнем нет.
Граф G' = (V ', Е') называют подграфом (subgraph) графа G = (V, Е), если Е' Е и V ' V. Если в графе G = (V, Е) выбрать произвольное множество вершин V ', то можно рассмотреть его подграф, состоящий из этих вершин и всех соединяющих их рёбер, т.е. граф G' = (V ', Е '), для которого
Этот подграф можно назвать ограничением графа G на множество вершин V ' (subgraph of G induced by U '). Ограничение графа рис. 5.1(а) на множество вершин {1,2,3,6} показано на рис. 5.1(в) и имеет три ребра (1,2), (2,2), (6,3).
Для любого неориентированного графа G можно рассмотреть его ориенти- рованный вариант (directed version), заменив каждое неориентированное ребро {u, v} на пару ориентированных рёбер (u, v) и (v, и), идущих в противоположных направлениях. С другой стороны, для каждого ориентированного графа можно рассмотреть его неориентированный вариант (undirected version), забыв про ориентацию рёбер, удалив рёбра-циклы и соединив рёбра (u, v) и (v, u) в одно неориентированное ребро {u, v}. В ориентированном графе соседом (neighbor) вершины и называют любую вершину, соединённую с ней ребром (в ту или другую сторону); таким образом, v является соседом и тогда и только тогда, когда v смежно и или и смежно v. Для неориентированного графа выражения «v сосед и» и «v смежна с и» являются синонимами.
Рисунок 5.2 – Примеры изоморфных и неизоморфных графов
(а) Изоморфные графы. (б) Неизоморфные графы: верхний имеет вершину степени 4, а нижний – нет.
Некоторые виды графов имеют специальные названия. Полным (complete) графом называют неориентированный граф, содержащий все возможные рёбра для данного множества вершин (любая вершина смежна любой другой). Не- ориентированный граф (V, E) называют двудольным (bipartite), если множество вершин V можно разбить на две части V1 и V2 таким образом, что концы любого ребра оказываются в разных частях. Ациклический неориентированный граф называют лесом (forest), а связный ациклический неориентированный граф называют деревом без выделенного корня (подробно деревья рассматриваются в следующем разделе). По-английски дерево без выделенного корня называется free tree. Ориентированный ациклический граф (directed acyclic graph) по-английски часто сокращают до «dag» (по первым буквам).
Иногда рассматривают обобщения понятия графа. Например, можно рассма- тривать мультиграф (multigraph), который похож на неориентированный граф, но может содержать много рёбер, соединяющих одну и ту же пару вершин, а также рёбра-циклы. Гиперграф (hypergraph) отличается от неориентирован- ного графа тем, что он содержит гиперрёбра (hyperedges), соединяющие не две вершины, а произвольное множество вершин. Многие алгоритмы обработки обычных графов могут быть обобщены на такие графоподобные структуры.
- Министерство образования Российской Федерации
- Содержание
- 1.2 Скорость роста функций
- 1.3 Анализ алгоритмов; время работы в лучшем, худшем случаях и в среднем
- 1.4 Типы данных, структуры данных и абстрактные типы данных
- 1.5 Динамические множества
- 2 Алгоритмы сортировок
- 2.1 Понятие внутренней и внешней сортировки
- 2.2 Сортировка вставками
- 2.3 Сортировка слиянием
- 2.3.1 Описание алгоритма
- 2.3.2 Анализ времени работы алгоритмов «разделяй и властвуй»
- 2.3.2 Анализ времени работы сортировки слиянием через рекуррентное соотношение
- 2.3.3 Анализ времени работы сортировки слиянием через геометрическую интерпретацию
- 2.4 Пирамидальная сортировка
- 2.4.1 Введение в алгоритм
- 2.4.2 Сохранение основного свойства кучи
- 2.4.3 Построение кучи
- 2.5 Быстрая сортировка
- 2.5.1 Введение в алгоритм
- 2.5.2 Описание
- 2.5.3 Разбиение массива
- 2.5.4 Особенности работы быстрой сортировки
- 2.6 Особенности реализации алгоритмов сортировки; сортировка за линейное время
- 2.6.1 Введение
- 2.6.2 Разрешающее дерево сортировки сравнениями
- 2.7 Цифровая сортировка
- 2.8 Сортировка вычерпыванием
- 2.8.1 Описание алгоритма
- 2.8.2 Вероятностный анализ времени работы сортировки вычерпыванием
- 2.8.3 Анализ времени работы сортировки вычерпыванием через геометрическую интерпретацию
- 2.9 Сортировка подсчетом
- 2.9.1 Описание алгоритма
- 2.9.2 Анализ времени работы
- 3 Элементарные и нелинейные структуры данных
- 3.1 Элементарные структуры: список, стек, очередь, дек
- 3.1.1 Список Линейный однонаправленный список
- Линейный двунаправленный список
- Двунаправленный список с фиктивными элементами
- Циклические списки
- Циклический однонаправленный список
- Циклический двунаправленный список
- 3.1.2 Стек
- 3.1.3 Очередь
- 3.1.3 Дек
- 3.2 Нелинейные структуры данных
- 3.2.1 Представление корневых деревьев в эвм
- Обходы деревьев
- 3.2.2 Двоичные деревья Спецификация двоичных деревьев
- Реализация
- Обходы двоичных деревьев
- 3.2.3 Двоичные деревья поиска Основные операции
- Минимум и максимум
- Следующий и предыдущий элементы
- Добавление и удаление
- Случайные деревья поиска
- Оптимальные деревья поиска
- 4 Хеширование
- 4.1 Введение
- 4.2 Прямая адресация; таблицы с прямой адресацией
- 4.3 Хеш – таблицы; возникновение коллизий и их разрешение
- Разрешение коллизий с помощью цепочек
- Анализ хеширования с цепочками
- 4.4 Способы построения хеш – функций Выбор хорошей хеш-функции
- Ключи как натуральные числа
- Деление с остатком
- Умножение
- Универсальное хеширование
- 4.5 Открытая адресация; способы вычисления последовательности испробованных мест: линейная последовательность проб, квадратичная последовательность проб, двойное хеширование
- Линейная последовательность проб
- 1 / (1 – )
- 5 Основные принципы разработки алгоритмов
- 5.1 Введение в теорию графов
- 5.1.1 Графы
- 5.1.2 Представление графов
- 5.2 Алгоритмы на графах: поиск в ширину, поиск в глубину
- 5.2.1 Поиск в ширину (волновой алгоритм)
- 5.2.2 Анализ поиска в ширину
- 5.2.3 Деревья поиска в ширину
- 5.2.4 Поиск в глубину
- 5.2.5 Анализ поиска в глубину
- 5.2.6 Свойства поиска в глубину
- 5.2.7 Классификация рёбер
- 5.3 Топологическая сортировка, задача о разбиении графа на сильно связанные компоненты
- 5.3.1 Топологическая сортировка
- 5.3.2 Сильно связные компоненты
- 5.4 Алгоритм построения минимального остовного дерева
- 5.4.1 Остовные деревья минимальной стоимости
- 5.4.2 Построение минимального покрывающего дерева
- 5.4.3 Алгоритмы Крускала и Пpимa
- 5.4.4 Алгоритм Крускала
- 5.4.5 Алгоритм Прима
- 5.5 Задача нахождения кратчайших путей на графах; алгоритм Флойда; алгоритм Дейкстры
- 5.5.1 Нахождение кратчайшего пути
- 5.5.2 Алгоритм Дейкстры
- 5.5.3 Алгоритм Флойда
- 5.6 Поиск с возвратом
- 5.6.1 Введение
- 5.6.2 Переборные алгоритмы
- 5.6.3 Метод ветвей и границ
- 5.6.4 Метод альфа-бета отсечения
- 5.6.5 Локальные и глобальные оптимальные решения
- 5.7 Метод декомпозиции ( «Разделяй и властвуй»)
- 5.7.1 «Ханойские башни»
- 5.8 Жадные алгоритмы и динамическое программирование
- 5.8.1 Задача о выборе заявок
- 5.8.2 Дискретная задача о рюкзаке
- 5.8.3 Непрерывная задача о рюкзаке
- 5.8.4 Числа Фибоначчи
- 5.8.5 Задача триангуляции многоугольника
- 5.8.6 Дп, жадный алгоритм или что-то другое?