Вот несколько стандартных способов представления (направленного) графа:
Для графа из 4 узлов:
Матрица смежности:
0 1 2 3
0 F F T F
1 T F T T
2 T F F F
3 F F F F
Edge List:
((0, 2), (1, 0), (1, 2), (1, 3), (2, 0))
Список смежностей:
(
(0, (2,) ),
(1, (0, 2, 3)),
(2, (0,) ),
(4, (,) ),
)
Матрица смежности является простой и наиболее быстрым представлением, но занимает больше всего памяти (N * N, где N количество строк),кроме случаев, когда у вас очень плотный граф.Вы можете сэкономить память с помощью битовых массивов, если у вас есть только простой невзвешенный граф.
Edge List прост, но медленнее, чем матрица смежности, и эффективен для памяти, если у вас есть разреженный граф(2 * M, где M - количество ребер).
Список смежности немного сложнее (так как вам нужен массив переменного размера), но более эффективен по памяти, чем список краев, если у вас большое количество ребер (2 * N + M, где N - числовершин, M число ребер)
Матрица смежности занимает (N N b) место.Edge List занимает ((2 + b) * N) памяти.А список смежности занимает (2 * N + M * (1 + b)) памяти.
Если вы знаете, что у вас всегда меньше 256 вершин (8 бит), а веса меньше 256 (8 бит), тогда Матрица смежности занимает (N * N * 8) пробел.Edge List занимает (24 * N) памяти.И список смежности занимает (16 * N + M * 16) памяти.