Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лекц_ИТ_2.doc
Скачиваний:
58
Добавлен:
29.03.2015
Размер:
1.21 Mб
Скачать
  1. Алгоритмы на графах

    1. Графы. Представления графов. Связность и расстояние

Конечный граф G = (V, E) состоит из конечного множества вершин V = {V1, V2Vm} и конечного множества ребер E = {e1, e2en}. Каждому ребру соответствует пара вершин. Если ребро определяется = (v, w), то говорят, что оно инцидентно вершинам v и w. Графы бывают ориентированными, если ребра — дуги и не ориентированными в противном случае [4].

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

Граф называется простым, если он не имеет ни петель, ни параллельных ребер.

Представление графа матрицей смежности

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

У неориентированного графа матрица смежности симметричная, и для ее представления достаточно хранить только верхний треугольник, что экономит память.

Матрица весов

Граф, в котором ребру (i, j) сопоставлено число wij, называется взвешенным графом, а число wij называется весом ребра (i, j). В сетях связи или транспортных сетях эти веса представляют некоторые физические величины, такие как стоимость, расстояние, эффективность, емкость, надежность и т.д. Простой взвешенный граф может быть представлен своей матрицей весов = [wij], где wij есть все ребра, соединяющие вершины i и j. Веса несуществующих ребер обычно полагают равными  или 0 в зависимости от приложений.

Список ребер

Иногда более эффективно представлять ребра графа парами вершин. Это представление можно реализовать двумя массивами g = (g1, g2, …, gm) и h = (h1, h2, …, hm).

Каждый элемент в массиве есть метка вершины, а i-е ребро графа выходит из вершины gi и входит в вершину hi. Например, ориентированный граф (рис. 3.1) будет представляться следующим образом:

g = (1, 2, 2, 2, 2, 3, 3, 4, 5, 5, 5, 7, 7)

h = (6, 1, 3, 4, 6, 4, 5, 5, 3, 6, 7, 1, 6)

При этом легко представимы петли и параллельные ребра.

Структуры смежности

В ориентированном графе вершина J называется последователем другой вершины Х, если существует ребро, направленное из Х в J. Вершина Х называется предшественником J. В случае неориентированного графа две вершины называются соседями, если между ними есть ребро. Граф может быть описан структурой смежности, т.е. списком всех последователей (соседей) каждой вершины. Для каждой вершины задается список всех ее последователей (соседей).

Структура ориентированного графа (рис. 3.1) такова:

1: 6

2: 1, 3, 4, 6

3: 4, 5

4: 5

5: 3, 6, 7

6:

7: 1, 6

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

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

Связность и расстояние

Говорят, что вершины x и y в графе смежны, если существует ребро, соединяющее их. Говорят, что два ребра смежны, если они имеют общую вершину. Путь — это последовательность смежных ребер (v1, v2), (v2, v3) …, в которой все вершины v1,v2, …, vk — различны, исключая возможно, случай v1 = vk. Записывается путь из v1 в vk как (v1v2v3, …, vk). Число ребер в пути называется длиной пути. Расстояние от вершины a до вершины b определяется как длина кратчайшего пути (т.е. пути наименьшей длины) из a в b.

Цикл — это путь, в котором первая и последняя вершины совпадают.

Подграф графа G = (V, E) есть граф, вершины и ребра которого принадлежат G.

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

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