Это в лекции 3. |
Графы: представления, достижимость и связность
Матрица (таблица) смежности
Определение 9.5. Матрицей смежности ориентированного (или неориентированного ) графа G=(V,E) с n вершинам и V= { v1, ... , vn} называется булева матрица AG размера n x n с элементами
![a_{ij}= \left\{\begin{array}{ll}
1, & \textit{ если}\ \ (v_i,v_j) \in E\\
0 & \textit{ в противном случае}
\end{array}
\right.](/sites/default/files/tex_cache/650476d87ca5f073009f57c366a52d4e.png)
Это представление позволяет легко проверять наличие ребер между заданными парами вершин. Для поиска всех соседей, в которые ведут ребра из вершины 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 с элементами
![b_{ij}= \left\{\begin{array}{rl}
1, & \textit{ если для некоторого}\ k \ \textit{ ребро }\ e_j= (v_i,v_k), \\
-1, & \textit{ если для некоторого}\ k \ \textit{ ребро }\ e_j= (v_k, v_i), \\
2 & \textit{ если ребро }\ \ e_j= (v_i, v_i), \\
0 & \textit{ в противном случае}
\end{array}
\right.](/sites/default/files/tex_cache/e3ec17ac834130a6e4ec09cdc8fd5de6.png)
Таким образом, в матрице инцидентности 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 включает все смежные с ней вершины, т.е.
![L_v = w_1, \ldots , w_k ,\ где \{w_1, \ldots , w_k\} = \{ w\ |\ (v,w) \in E\}](/sites/default/files/tex_cache/77864e05fc210b8dc22b34c7378904ca.png)
Представление графа G=(V,E) c n вершинам и V= { v1, ... , vn} с помощью списков смежности состоит из списков смежности всех вершин: Lv1, Lv2, ... , Lvn.
Размер этого представления сравним с суммой числа вершин и ребер графа. Оно позволяет легко переходить по ребрам от вершины к ее соседям. В программах списки смежности представляются списковыми структурами, которые легко реализуются во всех языках программирования.
Пример 9.1. Рассмотрим следующий граф G=(V,E):
![V= \{ v_1, v_2, v_3, v_4, v_5, v_6\}, \\
E = \{ e_1=(v_1, v_3), e_2= (v_3, v_2), e_3 =(v_4, v_1), e_4= (v_4, v_5), \\e_5 = (v_5, v_3), e_6= (v_6, v_5), e_7=(v_6, v_6) , e_8= (v_2, v_1)\}.](/sites/default/files/tex_cache/0aa7d11cbdf1918756d711ba38deddaa.png)
Он показан на рис. 9.2.
Построим для него определенные выше представления.