Русская Википедия:Граф (математика)
Граф — математическая абстракция реальной системы любой природы, объекты которой обладают парными связями. Граф как математический объект есть совокупность двух множеств — множества самих объектов, называемого множеством вершин, и множества их парных связей, называемого множеством рёбер. Элемент множества рёбер есть пара элементов множества вершин.
Графы находят широкое применение в современной науке и технике. Они используются и в естественных науках (физике и химии) и в социальных науках (например, социологии), но наибольших масштабов применение графов получило в информатике и сетевых технологиях.
В качестве простейшего примера из жизни можно привести схему перелётов определённой авиакомпании, которая моделируется графом, где вершинами графа являются города, а рёбрами — рейсы, соединяющие пары городов. Дерево каталогов в компьютере также является графом: диски, папки и файлы являются вершинами, а рёбра показывают вложенность файлов и папок в папки и дискиШаблон:Sfn. Строение Википедии моделируется ориентированным графом, в котором статьи — вершины графа, а гиперссылки — дуги (тематическая карта).
Графы являются основным объектом изучения теории графов.
Определения
Моделируемые графами системы реальной природы обладают большим разнообразием, поэтому существуют графы различных типов. Простейшей абстракцией систем с элементами, обладающими парными связями, является простой граф.
Простой граф
Определение. Простой граф <math>G(V,E)</math> есть совокупность двух множеств – непустого множества <math>V</math> и множества <math>E</math> неупорядоченных пар различных элементов множества <math>V</math> . Множество <math>V</math> называется множеством вершин, множество <math>E</math> называется множеством рёбер
- <math>G(V,E) = \left \langle V,E \right \rangle, \quad V \ne \varnothing , \quad E \subseteq V \times V , \quad \left \{ v,v \right \} \notin E, \quad v \in V </math>,
то есть множество <math>E</math> состоит из 2-элементных подмножеств множества <math>V</math>.
Сопутствующие термины
Теория графов не обладает устоявшейся терминологией. Поэтому в некоторых публикациях могут использоваться термины, отличные от приведенных ниже.
- Вершина (узел, точка) (Шаблон:Lang-en) графа <math>G</math> есть элемент множества вершин <math>v \in V(G)</math>;
- Ребро (линия) (Шаблон:Lang-en) графа <math>G</math> есть элемент множества ребер <math>e \in E(G)</math>, или <math>e = \left \{ v_1, v_2 \right \}</math>, где <math>v_1 \in V(G), \quad v_2 \in V(G)</math>;
- Элементами графа <math>G</math> называются его вершины <math>v \in V(G)</math> и рёбра <math>e \in E(G)</math> графа;
- Порядок (Шаблон:Lang-en) графа <math>G</math> есть кардинальное число множества вершин <math> n = |V(G)|</math> или, другими словами, количество вершин;
- Размер (Шаблон:Lang-en) графа <math>G</math> есть кардинальное число множества ребер <math> m = |E(G)|</math> или, другими словами, количество ребер;
- Вершина <math>v</math> инцидентна (Шаблон:Lang-en) ребру <math>e</math>, если <math>v \in e</math>; тогда еще говорят, что <math>e</math> есть ребро при <math>v</math>;
- Концевые вершины (концы) (Шаблон:Lang-en) есть две вершины, инцидентные ребру. Ребро соединяет (Шаблон:Lang-en) свои концевые вершины;
- Соседние (смежные) вершины (Шаблон:Lang-en) есть такие вершины <math>v_1</math> и <math>v_2</math> что <math>\left \{v_1, v_2 \right \} \in E(G)</math> или, другими, словами обе вершины являются концевыми для одного ребра;
- Смежные ребра (Шаблон:Lang-en) это ребра, инцидентные одной вершине или <math>e_1=\left \{ v,v_1 \right \} </math> и <math>e_2=\left \{ v,v_2 \right \} </math> - смежные;
- Степень (валентность) вершины (Шаблон:Lang-en) <math>\operatorname\mathit{d}\left(v\right)</math> есть количество инцидентных ей рёбер.
- Изолированной вершиной (Шаблон:Lang-en) называется вершина со степенью <math>d(v)=0</math> , то есть не является концом ни для одного ребра;
- Висячей вершиной (листом) (Шаблон:Lang-en) называется вершина со степенью <math>d(v)=1</math>, то есть которая является концом ровно одного ребра.
Обычно граф изображают диаграммой: вершины – точками, ребра – линиями.
Псевдограф
Псевдограф <math>G(V,E)</math> есть совокупность двух множеств – непустого множества <math>V</math> и множества <math>E</math> неупорядоченных пар элементов множества <math>V</math>.
- <math>G(V,E) = \left \langle V,E \right \rangle, \quad V \ne \varnothing , \quad E \subseteq V \times V </math>
В множестве ребер псевдографа разрешен элемент <math>\left \{ v,v \right \} \in E(G)</math>.
- Петлёй (Шаблон:Lang-en) называется элемент <math>e=\left\{v,v \right \}</math>, являющийся ребром, у которого концевые вершины совпадают.
Другими словами, если элементами множества E могут быть петли, то граф называется псевдографом Шаблон:Sfn.
Мультиграф
Мультиграф <math>G(V,\mathbf E)</math> есть совокупность двух множеств – непустого множества <math>V</math> и мультимножества <math>\mathbf E</math> неупорядоченных пар различных элементов множества <math>V</math>.
- <math>G(V,\mathbf E) = \left \langle V, \mathbf E \right \rangle, \quad V \ne \varnothing , \quad \mathbf E \subseteq V \times V \quad \left \{ v,v \right \} \notin \mathbf E, \quad v \in V </math>
- Кратными рёбрами называются одинаковые элементы мультимножества <math>\left \{e,e, \dots ,e \right \} \in \mathbf E</math>, то есть ребра, чьи концевые вершины совпадают.
Другими словами Если <math>E</math> не множество, а семейство, то есть если <math>\mathbf E</math> содержит одинаковые элементы, то такие элементы называются кратными рёбрами, а граф называется мультиграфом Шаблон:Sfn.
Псевдомультиграф
Псевдомультиграф <math>G(V,\mathbf E)</math> есть совокупность двух множеств – непустого множества <math>V</math> и мультимножества <math>\mathbf E</math> неупорядоченных пар элементов множества <math>V</math>.
- <math>G(V,\mathbf E) = \left \langle V, \mathbf E \right \rangle, \quad V \ne \varnothing , \quad \mathbf E \subseteq V \times V </math>
Другими словами, если <math>\mathbf E</math> – семейство, содержащее одинаковые элементы (кратные ребра), и <math>\mathbf E</math> может содержать петли, то граф называется псевдомультиграфомШаблон:Sfn.
Ориентированный граф
Ориентированный граф (орграф) (Шаблон:Lang-en) <math>G(V,E)</math> есть совокупность двух множеств – непустого множества <math>V</math> и множества <math>E</math> дуг или упорядоченных пар различных элементов множества <math>V</math>
- <math>G(V,E) = \left \langle V,E \right \rangle, \quad V \ne \varnothing , \quad \left \langle \left \{ v_1,v_2 \right \}, \prec \right \rangle \in E, \quad v \in V </math>.
совместно с двумя отображениями
- <math> init: E \rightarrow V, \quad ter: E \rightarrow V</math>,
где отображение <math> init: E \rightarrow V </math> ставит в соответствие каждой дуге ее начальную вершину (начало дуги) <math> init(e) </math>, а отображение <math> ter: E \rightarrow V </math> ставит в соответствие каждой дуге ее конечную вершину (конец дуги) <math> ter(e) </math>. Говорят что дуга <math>e </math> ведет из <math> init(e) </math> в <math> ter(e) </math>
Смешанный граф
Шаблон:Main Смешанный граф (Шаблон:Lang-en) <math>G(V,E,U)</math> — это совокупность трех множеств – непустого множества вершин <math>V</math>, и множества дуг <math>E</math> или упорядоченных пар различных элементов множества <math>V</math> и множества ребер <math>U</math> неупорядоченных пар различных элементов множества <math>V</math>
- <math>G(V,E,U) = \left \langle V,E,U \right \rangle, \quad V \ne \varnothing , \quad \left \langle \left \{ v_1,v_2 \right \}, \prec \right \rangle \in E, \quad \left \{ v_3 , v_4 \right \} \in U , \quad v \in V</math>.
совместно с двумя отображениями
- <math> init: E \rightarrow V, \quad ter: E \rightarrow V</math>
Ориентированный и неориентированный графы являются частными случаями смешанного.
Изоморфные графы
Граф <math>G</math> называется изоморфным графу <math>H</math>, если существует биекция <math>f</math> из множества вершин графа <math>G</math> в множество вершин графа <math>H</math>, обладающая следующим свойством: если в графе <math>G</math> есть ребро из вершины <math>A</math> в вершину <math>B</math>, то в графе <math>H</math> должно быть ребро из вершины <math>f(A)</math> в вершину <math>f(B)</math> и наоборот — если в графе <math>H</math> есть ребро из вершины <math>A</math> в вершину <math>B</math>, то в графе <math>G</math> должно быть ребро из вершины <math>f^{-1}(A)</math> в вершину <math>f^{-1}(B)</math>. В случае ориентированного графа эта биекция также должна сохранять ориентацию ребра. В случае взвешенного графа биекция также должна сохранять вес ребра.
Прочие связанные определения
Маршрутом в графе называют конечную последовательность вершин, в которой каждая вершина (кроме последней) соединена со следующей в последовательности вершиной ребром. Цепью называется маршрут без повторяющихся рёбер. Простой цепью называется маршрут без повторяющихся вершин (откуда следует, что в простой цепи нет повторяющихся рёбер).
Ориентированным маршрутом (или путём) в орграфе называют конечную последовательность вершин и дуг, в которой каждый элемент инцидентен предыдущему и последующему.
Циклом называют цепь, в которой первая и последняя вершины совпадают. При этом длиной пути (или цикла) называют число составляющих его рёбер. Заметим, что если вершины <math>u</math> и <math>v</math> являются концами некоторого ребра, то согласно данному определению, последовательность <math>(u,v,u)</math> является циклом. Чтобы избежать таких «вырожденных» случаев, вводят следующие понятия.
Путь (или цикл) называют простым, если рёбра в нём не повторяются; элементарным, если он простой и вершины в нём не повторяются (за исключением начальной и конечной в случае цикла).
Простейшие свойства путей и циклов:
- всякий путь, соединяющий две вершины, содержит элементарный путь, соединяющий те же две вершины;
- всякий простой неэлементарный путь содержит элементарный цикл;
- всякий простой цикл, проходящий через некоторую вершину (или ребро), содержит элементарный (под-)цикл, проходящий через ту же вершину (или ребро);
- петля — элементарный цикл.
Бинарное отношение на множестве вершин графа, заданное как «существует путь из <math>u</math> в <math>v</math>», является отношением эквивалентности и, следовательно, разбивает это множество на классы эквивалентности, называемые компонентами связности графа. Если у графа ровно одна компонента связности, то граф связный. На компоненте связности можно ввести понятие расстояния между вершинами как минимальную длину пути, соединяющего эти вершины.
Всякий максимальный связный подграф графа <math>G</math> называется связной компонентой (или просто компонентой) графа <math>G</math>. Слово «максимальный» означает максимальный относительно включения, то есть не содержащийся в связном подграфе с большим числом элементов.
Ребро графа называется мостом, если его удаление увеличивает число компонент.
Дополнительные характеристики графов
Граф называется:
- связным, если для любых вершин <math>u</math>,<math>v</math> есть путь из <math>u</math> в <math>v</math>.
- сильно связным или ориентированно связным, если он ориентированный, и из любой вершины в любую другую имеется ориентированный путь.
- деревом, если он связный и не содержит нетривиальных циклов.
- полным, если любые его две (различные, если не допускаются петли) вершины соединены ребром.
- двудольным, если его вершины можно разбить на два непересекающихся подмножества <math>V_1</math> и <math>V_2</math> так, что всякое ребро соединяет вершину из <math>V_1</math> с вершиной из <math>V_2</math>.
- k-дольным, если его вершины можно разбить на <math>k</math> непересекающихся подмножеств <math>V_1</math>, <math>V_2</math>, …, <math>V_k</math> так, что не будет рёбер, соединяющих вершины одного и того же подмножества.
- полным двудольным, если каждая вершина одного подмножества соединена ребром с каждой вершиной другого подмножества.
- планарным, если граф можно изобразить диаграммой на плоскости без пересечений рёбер.
- взвешенным, если каждому ребру графа поставлено в соответствие некоторое число, называемое весом ребра.
- хордальным, если граф не содержит индуцированных циклов с длиной больше трёх.
Также бывает:
Обобщение понятия графа
Простой граф является одномерным симплициальным комплексом.
Более абстрактно, граф можно задать как тройку <math>(V, E, \varphi)</math>, где <math>V</math> и <math>E</math> — некоторые множества (вершин и рёбер, соотв.), а <math>\varphi</math> — функция инцидентности (или инцидентор), сопоставляющая каждому ребру <math>e\in E</math> (упорядоченную или неупорядоченную) пару вершин <math>u</math> и <math>v</math> из <math>V</math> (его концов). Частными случаями этого понятия являются:
- эйлеровы графы — граф, в котором существует циклический эйлеров путь (эйлеров цикл);
Способы представления графа в информатике
Матрица смежности
Шаблон:Main Таблица, где как столбцы, так и строки соответствуют вершинам графа. В каждой ячейке этой матрицы записывается число, определяющее наличие связи от вершины-строки к вершине-столбцу (либо наоборот).
Это наиболее удобный способ представления плотных графов.
Недостатком являются требования к памяти, прямо пропорциональные квадрату количества вершин.
- Двумерный массив;
- Матрица с пропусками;
- Неявное задание (при помощи функции).
Матрица инцидентности
Шаблон:Main Таблица, где строки соответствуют вершинам графа, а столбцы соответствуют связям (рёбрам) графа. В ячейку матрицы на пересечении строки <math>i</math> со столбцом <math>j</math> записывается:
- 1
- в случае, если связь <math>j</math> «выходит» из вершины <math>i</math>,
- −1,
- если связь «входит» в вершину,
- 0
- во всех остальных случаях (то есть если связь является петлёй или связь не инцидентна вершине)
Данный способ является довольно ёмким (размер пропорционален <math>|V| |E|</math>) для хранения, поэтому применяется очень редко, в особых случаях (например, для быстрого нахождения циклов в графе).
Список смежности
Шаблон:Main Список, где каждой вершине графа соответствует строка, в которой хранится список смежных вершин. Такая структура данных не является таблицей в обычном понимании, а представляет собой «список списков».
Размер занимаемой памяти: <math>O(|V|+|E|)</math>.
Это наиболее удобный способ для представления разреженных графов, а также при реализации базовых алгоритмов обхода графа в ширину или глубину, где нужно быстро получать «соседей» текущей просматриваемой вершины.
Список рёбер
Список, где каждому ребру графа соответствует строка, в которой хранятся две вершины, инцидентные ребру.
Размер занимаемой памяти: <math>O(|E|)</math>.
Это наиболее компактный способ представления графов, поэтому часто применяется для внешнего хранения или обмена данными.
Языки описания и программы построения графов
Языки описания
Для описания графов, пригодного для машинной обработки и одновременно удобного для человеческого восприятия, используется несколько стандартизированных языков, среди которых:
Программы для построения
Разработана серия коммерческих программ для построения графов, так, построение графов лежит в основе прикладных программных пакетов фирмы ILOG (с 2009 года принадлежит корпорации IBM), среди других программ — GoView, Lassalle AddFlow, LEDA (есть бесплатная редакция).
Также существует свободная программа для построения графов igraph и свободная библиотека Boost.
Программы для визуализации
Для визуализации графов применяются следующие программные средства:
- Graphviz (Eclipse Public License)
- LION Graph Visualizer.
- Графоанализатор — русскоязычная программа, с простым пользовательским интерфейсом (GNU LGPL; только для Windows).
- Gephi — графическая оболочка для представления и изучения графов (GNU GPL, CDDL).
- GRIN — русскоязычная программа для представления и изучения графов (freeware)
- Библиотека GraphX — свободная библиотека для .NET для расчёта и отрисовки графов, использует WPF 4.0.
- Библиотека MSAGL — свободная библиотека для .NET[1].
См. также
Примечания
Литература
- Шаблон:Книга
- Шаблон:Книга
- Емеличев В. А., Мельников О. И., Сарванов В. И., Тышкевич Р. И. Лекции по теории графов. М.: Наука, 1990. 384с. (Изд.2, испр. М.: УРСС, 2009. 392 с.)
- Шаблон:Книга
- Шаблон:Книга
- Шаблон:Книга
- Шаблон:Книга
- Шаблон:Книга
- Шаблон:Книга
- Шаблон:Книга
- Шаблон:Книга