
Тема 5. Графы
Во многих задачах часто необходимо наглядно представить отношения между какими-то объектами. В качестве математической модели представления отношений между объектами часто используют графы. Графы широко используются как в самой математике, так и в ее приложениях. Они применяются при построении различных математических моделей: линий электропередачи, сетей автодорог, линий воздушных сообщений и пр.
Граф – это пара G=(V,E), где V – множество вершин, E – множество ребер(дуг). Ориентированным (орграфом) называется граф, в котором EV×V - множество ребер - упорядоченных пар вершин вида (x,y), где x называют началом, а y – концом дуги. Дугу (x,y) записывают как xy и изображают
Говорят так же,
что дуга xy
ведет
от вершины x
вершине y,
а вершина y
смежная с вершиной x.
Дуги называются кратными, если они не
только имеют общие вершины, но и
совпадают по направлению.
Н
еориентированным
называют граф, в котором - E{(x,y):
x,
yV,
x≠y}
- множество ребер - неупорядоченных
пар вершин. Если (x,y)
– ребро, то (y,x)
– это же ребро. Ребра изображаются в
виде
Вершины, соединенные ребрами, называют смежными. Ребра, имеющие общую вершину, также называют смежными. Ребро и любая из его двух вершин называются инцидентными.
Иногда нужно рассматривать не весь граф, а его часть (часть вершин и часть ребер). Часть вершин и все инцидентные им ребра называются подграфом; все вершины и часть инцидентных им ребер называются суграфом. Циклом называется замкнутая цепь вершин. Деревом называется граф без циклов.
Граф однозначно задан, если заданы множество его вершин, множество ребер и указаны все инцидентности (т.е. указано, какие вершины какими ребрами соединены). Наиболее наглядно граф задается рисунком; однако не все детали рисунка одинаково важны; в частности, несущественны геометрические свойства ребер (длинна, кривизна и т.д.) и взаимное расположение вершин на плоскости.
Для неориентированного ребра порядок, в котором указанны соединяемые им вершины, не важен. Для ориентированного ребра важно: первой указывается вершина, из которой выходит ребро.
Маршрут, или путь - это последовательность ребер в неориентированном графе, в котором конец каждого ребра совпадает с началом следующего ребра. Число ребер маршрута называется его длинной.
Сильно связной компонентой графа называют максимальное множество вершин, в котором существуют из любой вершины графа в любую другую.
Будем использовать также обозначения | V | = n, | E | = m (мощность множества).
Выбор соответствующей структуры данных для представления графов имеет принципиальное влияние на эффективность алгоритмов. Поэтому для начала посмотрим несколько способов представления и кратко разберем их достоинства и недостатки.
В теории графов классическим способом представления графа является матрица инциденций. Это матрица А с n строками, соответствующими вершинам, и m столбцами, соответствующими ребрам. Для ориентированного графа столбец, соответствующий дуге (x, y)ÎE, содержит +1 в строке, соответствующей вершине x, -1 в строке, соответствующей вершине y и нули во всех остальных строках. Петлю, т.е. дугу вида (x, x), удобно представлять другим значением, например 2, в строке x.
Для неориентированного графа столбец, соответствующий ребру {x, y}, содержит 1 в строках, соответствующих x и y, и 0 - во всех остальных строках (рис. 1, рис. 2).
Рис. 1 Матрица инциденций для ориентированного графа
Рис. 2 Матрица инциденций для неориентированного графа
С алгоритмической точки зрения матрица инциденций является одним из самых худших способов представления графа, так как:
требуется n x m ячеек памяти, причем большинство ячеек занято нулями;
неудобен доступ к информации, т.к. ответ на вопросы: существует ли дуга (x, y) и к каким вершинам ведут ребра из x – требует в худшем случае перебора всех столбцов, т.е. m шагов.
Немного лучше способ представления графа с помощью матрицы смежности B=[bij] размера n x m, где bij =1, если существует ребро, ведущее из x в y, и bij=0 – противном случае. При этом подразумевается, что ребро {x, y} неориентированного графа идет как от x к y, так и от y к x. Поэтому матрица смежности для неориентированного графа всегда симметрична. Для наших графов матрицы смежности имеют вид:
Основное преимущество матрицы смежности состоит в том, что за один шаг можно ответить на вопрос – существует ли ребро из x в y.
Недостатком является тот факт, что независимо от числа ребер объем занимаемой памяти составляет n2. На практике это неудобство иногда можно исправить, храня целую строку или столбец в одном машинном слове (для малых n).
Более экономным в отношении памяти (особенно для неплотных графов, когда m гораздо меньше n2) является способ представления графа с помощью списка пар, соответствующих его ребрам. Пара (x, y) соответствует дуге (x, y), если граф ориентированный, и ребру {x, y}, если граф неориентированный. В нашем случае списки пар:
.
Очевидно, что в этом случае объем памяти составляет 2m. Неудобством является большое число шагов (порядка m в худшем случае) для нахождения множества вершин, к которым ведут ребра из данной вершины.
Ситуацию можно значительно улучшить, если упорядочить множество пар лексикографически. Тогда можно применить двоичный поиск.