Комбинаторные алгоритмы для программистов

          

Представления


Наиболее известный способ представления графа на бумаге состоит в геометрическом изображении точек и линий. В ЭВМ граф должен быть представлен дискретным способом, причем возможно много различных представлений. Простота использования, так же как и эффективность алгоритмов на графе, зависит от подходящего выбора представления графа. Рассмотрим различные структуры данных для представления графов.

Матрица смежностей. Одним из наиболее распространенных машинных представлений простого графа является матрица смежностей или соединений. Матрица смежностей графа

Представления
есть
Представления
-матрица
Представления
, в которой
Представления
, если в
Представления
существует ребро, идущее из
Представления
-й вершины в
Представления
-ю, и
Представления
в противном случае. Орграф и его матрица смежностей представлены на рис. 12.1.

Представления

Рис. 12.1.  Ориентированный граф и его матрица смежностей

Представления

Заметим, что в матрице смежностей петля может быть представлена соответствующим единичным диагональным элементом. Кратные ребра можно представить, позволив элементу матрицы быть больше 1, но это не принято, так как обычно удобно представлять каждый элемент матрицы одним двоичным разрядом.

Для задания матрицы смежностей требуется

Представления
двоичных разрядов. У неориентированного графа матрица смежностей симметрична, и для ее представления достаточно хранить только верхний треугольник. В результате экономится почти 50% памяти, но время вычислений может при этом немного увеличиться, потому что каждое обращение к
Представления
должно быть заменено следующим: if
Представления
then
Представления
else
Представления
. В случае представления графа его матрицей смежностей для большинства алгоритмов требуется время вычисления, по крайней мере пропорциональное
Представления
.

Матрица весов. Граф, в котором ребру

Представления
сопоставлено число
Представления
, называется взвешенным графом, а число
Представления
называется весом ребра
Представления
. В сетях связи или транспортных сетях эти веса представляют некоторые физические величины, такие как стоимость, расстояние, эффективность, емкость или надежность соответствующего ребра. Простой взвешенный граф может быть представлен своей матрицей весов
Представления
, где
Представления
есть вес ребра, соединяющего вершины
Представления
и
Представления
.
Веса несуществующих ребер обычно полагают равными
Представления
или 0 в зависимости от приложений. Когда вес несуществующего ребра равен 0, матрица весов является простым обобщением матрицы смежностей.

Список ребер. Если граф является разреженным, то возможно, что более эффектно представлять ребра графа парами вершин. Это представление можно реализовать двумя массивами
Представления
и
Представления
. Каждый элемент в массиве есть метка вершины, а
Представления
-е ребро графа выходит из вершины
Представления
и входит в вершину
Представления
. Например, орграф, изображенный на рис. 12.1, будет представляться следующим образом:
Представления
Представления
Ясно, что при этом легко представимы петли и кратные ребра.

Структура смежности. В ориентированном графе вершина
Представления
называется последователем другой вершины
Представления
, если существует ребро, направленное из
Представления
в
Представления
. Вершина
Представления
называется тогда предшественником
Представления
. В случае неориентированного графа две вершины называются соседями, если между ними есть ребро. Граф может быть описан его структурой смежности, то есть списком всех последователей (соседей) каждой вершины; для каждой вершины
Представления
задается
Представления
- список всех последователей (соседей) вершины
Представления
. В большинстве алгоритмов на графах относительный порядок вершин, смежных с вершиной
Представления
в
Представления
, не важен, и в таком случае удобно считать
Представления
мультимножеством (или множеством, если граф является простым) вершин, смежных с
Представления
. Структура смежности орграфа, представленного на рис. 12.1, такова:

Adj(v) 1: 6 2: 1, 3, 4, 6 3: 4, 5 4: 5 5: 3, 6, 7 6: 7: 1, 6

Если для хранения метки вершины используется одно машинное слово, то структура смежности ориентированного графа требует
Представления
слов. Если граф неориентированный, нужно
Представления
слов, так как каждое ребро встречается дважды.

Структуры смежности могут быть удобно реализованы массивом из
Представления
линейно связанных списков, где каждый список содержит последователей некоторой вершины. Поле данных содержит метку одного из последователей, и поле указателей указывает следующего последователя. Хранение списков смежности в виде связанного списка желательно для алгоритмов, в которых в графе добавляются или удаляются вершины.



Матрица инцидентности -
Представления
задает граф :
Представления
если ребро
Представления
выходит из вершины
Представления
,
Представления
, если ребро
Представления
входит в вершину
Представления
, и
Представления
в остальных случаях.


Содержание раздела