Это в лекции 3. |
Графы: представления, достижимость и связность
Матрица (таблица) смежности
Определение 9.5. Матрицей смежности ориентированного (или неориентированного ) графа G=(V,E) с n вершинам и V= { v1, ... , vn} называется булева матрица AG размера n x n с элементами
Это представление позволяет легко проверять наличие ребер между заданными парами вершин. Для поиска всех соседей, в которые ведут ребра из вершины vi, необходимо просмотреть соответствующую ей i -ю строку матрицы AG, а чтобы найти вершины, из которых ребра идут в vi, необходимо просмотреть ее i -ый столбец. Требуемая для AG память - по порядку n2 битов - не может быть уменьшена для графов, у которых "много" ребер. Но для разреженных графов с числом ребер существенно меньшим по порядку n2 в матрице смежности много "ненужных" нулей. Для таких графов более эффективными могут оказаться другие представления.
Матрица (таблица) инцидентности
Определение 9.6. Матрицей инцидентности ориентированного (или неориентированного ) графа G=(V,E) с n вершинам и V= { v1, ... , vn} и m ребрами E={e1, ..., em} называется матрица BG размера n x 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.
Построим для него определенные выше представления.