- •8. Лекция: Логика предикатов и базы данных
- •Реляционные базы данных
- •Реляционная алгебра
- •Теоретико-множественные операции
- •Специальные реляционные операторы
- •Запросы
- •Ограничения целостности
- •9. Лекция: Графы: представления, достижимость и связность.
- •Основные понятия
- •Представления графов
- •Матрица (таблица) смежности
- •Матрица (таблица) инцидентности
- •Списки смежности
- •Граф достижимости
- •Взаимная достижимость, компоненты сильной связности и базы графа
- •Лекция: Деревья
- •Неориентированные и ориентированные деревья
- •Деревья и формулы (выражения)
- •Обходы деревьев
- •11. Лекция: Три алгоритма на графах
- •Построение минимального остова
- •Поиск в глубину и задача о лабиринте
- •Задача о кратчайших путях из одного источника
Представления графов
Из определения графа следует, что каждый граф G=(V,E) можно задать, непосредственно перечислив его множество вершин V и множество ребер E. Однако такое представление неудобно для решения многих задач о графах. Например, чтобы проверить наличие ребра между двумя вершинами, придется, вообще говоря, просмотреть все множество E. Хорошее представление, по крайней мере, должно позволить легко переходить от вершины к ее соседу и перечислять всех ее соседей.
В этом параграфе мы рассмотрим три разных способа представления графов, которые более эффективны при решении типичных для теории графов задач
Матрица (таблица) смежности
Определение 9.5. Матрицей смежности ориентированного (или неориентированного) графа G=(V,E) с n вершинами V= { v1, … , vn} называется булева матрица AG размера n × n с элементами
Это представление позволяет легко проверять наличие ребер между заданными парами вершин. Для поиска всех соседей, в которые ведут ребра из вершины vi, необходимо просмотреть соответствующую ей i-ю строку матрицы AG, а чтобы найти вершины, из которых ребра идут в vi, необходимо просмотреть ее i-ый столбец. Требуемая для AG память - по порядку n2 битов - не может быть уменьшена для графов, у которых "много" ребер. Но для разреженных графов с числом ребер существенно меньшим по порядку n2 в матрице смежности много "ненужных" нулей. Для таких графов более эффективными могут оказаться другие представления.
Матрица (таблица) инцидентности
Определение 9.6. Матрицей инцидентности ориентированного (или неориентированного) графа G=(V,E) с n вершинами V= { v1, … , vn} и m ребрами E={e1, …, em} называется матрица BG размера n × m с элементами
Таким образом, в матрице инцидентности BG любому ребру ej = (vi,vk) соответствует j-ый столбец, в котором в i-ой строке стоит 1, а в k-ой - -1. Ребра-петли выделяются числом 2. Для проверки наличия ребра между двумя вершинами vi и vk требуется просмотреть i-ю и k-ую строки BG, поиск всех соседей вершины требует просмотра соответствующей строки. Если m >> n, то это требует существенно больше времени, чем при использовании матрицы смежности. Поэтому при практическом решении задач на графах матрица инцидентности почти не используется.
Списки смежности
Определение 9.7. Пусть G=(V,E) - ориентированный граф, v - вершина из V. Список смежности Lv для вершины v включает все смежные с ней вершины, т.е.
Представление графа G=(V,E) c n вершинами V= { v1, … , vn} с помощью списков смежности состоит из списков смежности всех вершин: Lv1, Lv2, … , Lvn.
Размер этого представления сравним с суммой числа вершин и ребер графа. Оно позволяет легко переходить по ребрам от вершины к ее соседям. В программах списки смежности представляются списковыми структурами, которые легко реализуются во всех языках программирования.
Пример 9.1. Рассмотрим следующий граф G=(V,E):
Он показан на рис. 9.2.
Построим для него определенные выше представления.
Матрица смежности.
Матрица инцидентности.
Списки смежности.
Граф достижимости
Один из первых вопросов, возникающих при изучении графов, это вопрос о существовании путей между заданными или всеми парами вершин. Ответом на этот вопроc - введенное выше отношение достижимости на вершинах графа G=(V,E): вершина w достижима из вершины v, если v = w или в G есть путь из v в w. Иначе говоря, отношение достижимости является рефлексивным и транзитивным замыканием отношения E. Для неориентированных графов это отношение также симметрично и, следовательно, является отношением эквивалентности на множестве вершин V. В неориентированном графе классы эквивалентности по отношению достижимости называются связными компонентами. Для ориентированных графов достижимость, вообще говоря, не должна быть симметричным отношением. Симметричной является взаимная достижимость.
Определение 9.8. Вершины v и w ориентированного графа G=(V,E) называются взаимно достижимыми, если в G есть путь из v в w и путь из w в v.
Ясно, что отношение взаимной достижимости является рефлексивным, симметричным и транзитивным и, следовательно, эквивалентностью на на множестве вершин графа. Классы эквивалентности по отношению взаимной достижимости называются компонентами сильной связности или двусвязными компонентами графа.
Рассмотрим вначале вопрос о построении отношения достижимости. Определим для каждого графа его граф достижимости ( называемый иногда также графом транзитивного замыкания), ребра которого соответствуют путям исходного графа.
Определение 9.9. Пусть G=(V,E) - ориентированный граф. Граф достижимости G*=(V,E*) для G имеет то же множество вершин V и следующее множество ребер E* ={ (u, v) | в графе G вершина v достижима из вершины u}.
Пример 9.3. Рассмотрим граф G из примера 9.2.
Рис. 9.2. Граф G
Тогда можно проверить, что граф достижимости G* для G выглядит так (новые ребра-петли при каждой из вершин 1-5 не показаны):
Рис. 9.3. Граф G*
Каким образом по графу G можно построить граф G*? Один способ заключается в том, чтобы для каждой вершины графа G определить множество достижимых из нее вершин, последовательно добавляя в него вершины, достижимые из нее путями длины 0, 1, 2 и т.д.
Мы рассмотрим другой способ, основанный на использовании матрицы смежности AG графа G и булевых операций. Пусть множество вершин V={v1, … , vn}. Тогда матрица AG - это булева матрица размера n × n.
Ниже для сохранения сходства с обычными операциями над матрицами мы будем использовать "арифметические" обозначения для булевых операций: через + будем обозначать дизъюнкцию , а через · - конъюнкцию .
Обозначим
через En
единичную матрицу размера n
× n.
Положим
.
Пусть
Наша
процедура построения G*
основана на следующем утверждении.
Лемма
9.2.
Пусть
.
Тогда
Доказательство проведем индукцией по k.
Базис.
При
k=0
и k=1
утверждение справедливо по определению
и
.
Индукционный
шаг. Пусть
лемма справедлива для k.
Покажем, что она остается справедливой
и для k+1.
По определению
имеем:
Предположим, что в графе G из vi в vj имеется путь длины k+1. Рассмотрим кратчайший из таких путей. Если его длина k, то по предположению индукции a_{ij}^{(k)}=1. Кроме того, ajj(1)=1. Поэтому aij(k) ajj(1)=1 и aij(k+1)=1. Если длина кратчайшего пути из из vi в vj равна k+1, то пусть vr - его предпоследняя вершина. Тогда из vi в vr имеется путь длины k и по предположению индукции air(k)=1. Так как (vr,vj) E, то a_{rj}^{(1)}=1. Поэтому air(k) arj(1)=1 и aij(k+1)=1.
Обратно,
если aij(k+1)=1,
то хотя бы для одного r
слагаемое air(k)
arj(1)
в сумме равно 1. Если это r=j,
то aij(k)=1
и по индуктивному предположению в G
имеется
путь
из vi
в vj
длины
k.
Если же r
j,
то air(k)=1
и arj(1)=1.
Это означает, что в G
имеется
путь
из vi
в vr
длины
k
и ребро
(vr,vj)
E.
Объединив их, получаем путь
из vi
в vj
длины
k+1.
Из лемм 9.1 и 9.2 непосредственно получаем
Следствие
1.
Пусть G=(V,E)
- ориентированный
граф
с n
вершинами,
а G*
- его граф
достижимости.
Тогда A_{G*} =
.
Доказательство.
Из леммы 5.1 следует, что, если в G
имеется путь
из u
в v
u,
то в нем имеется и простой путь
из u
в v
длины
n-1.
А по лемме 5.2 все такие пути
представлены в матрице
.
Таким
образом процедура построения матрицы
смежности
AG*
графа
достижимости
для G
сводится к возведению матрицы
в
степень n-1.
Сделаем несколько замечаний, позволяющих
упростить эту процедуру.
Для возведения матрицы в произвольную степень n достаточно выполнить
возведений
в квадрат:
где k - это наименьшее число такое, что 2k n.
Так как на диагонали в матрице стоят единицы, то для любых i < j все единицы матрицы
сохраняются
в матрице
,
в частности, и в матрице
.Если при вычислении элемента aij(2) матрицы
по
стандартной формуле
обнаруживается такое r, что air = 1 и arj =1, то и вся сумма aij(2) =1. Поэтому остальные слагаемые можно не рассматривать.
Пример 9.3. Рассмотрим в качестве примера вычисление матрицы графа достижимости AG* для графа G, представленного на рис.9.2. В этом случае
Так
как у G
имеется 6 вершин, то
.
Вычислим эту матрицу:
и
(последнее
равенство нетрудно проверить). Таким
образом,
Как
видим, эта матрица действительно задает
граф
,
представленный на рис.9.3.
