A A -- B / \ | | B - C D -- C
Выше два являются визуальным представлением графика. Но как мы можем представить эти графы в памяти, чтобы получить нашу структуру данных графа. В основном есть два способа представления.
- Матрица смежности
- Список смежности
Матрица смежности
Матрица смежности — это не что иное, как двумерный массив. где количество строк и столбцов равно количеству узлов в графе. Каждая строка и столбец являются соответствующими узлами в графе. Каждое значение матрицы зависит от того, существует ли путь между двумя узлами (строка и столбец). Если путь существует, значение равно 1, иначе 0. Ниже приведен пример графа из трех узлов.
A / \ B - C A B C A 0 1 1 B 1 0 1 C 1 1 0 Adjacency matrix
Для строки A нет пути к A, поэтому значение равно 0. Есть путь к B и C поэтому значение в столбцах B и C для строки A равно 1. То же самое для остальных узлов.
Нет пути между узлом и самим собой. Таким образом, значение равно 0. Такой путь возможен, если есть петля от узла к самому себе. В этом случае значение для строки A и столбца B будет равно 1.
Список смежности
В списке смежности мы поддерживаем список соседей (где существует путь от этого узла) для каждого узла в графе.
A -- B A : [B,D] | | B : [C,D] D -- C C : [B,D] D : [A,C] Adjacency list
Последнее представление называется списком смежности. Это как пара ключ-значение. Чтобы собрать все узлы вместе со списками, мы можем использовать Hash Map.
graph = { A : [B,C,D] B : [A,C,D] C : [A,B,D] D : [A,B,C] }
Пространственный анализ матрицы смежности
Пространство, занимаемое матрицей, равно размеру двумерного массива размером v строк и v столбцов.
количество строк * количество столбцов
или O(V * V) v = количество вершин
Это много места всегда будет занято, даже если граф не плотнее. Таким образом, использование этой матрицы смежности неэффективно для меньшего количества ребер по сравнению с количеством вершин.
Пространственный анализ списка смежности
В худшем случае могут быть ребра от каждого узла к другому узлу, где пространство будет O (V * V-1) или O (v ^ 2). Но в среднем это занимает меньше места по сравнению с этой матрицей смежности. что равно O(V + E). V - нет вершин, а E - нет ребер.