Представление графов: матрицы смежности и списки смежности

Графы являются важной структурой данных, используемой для моделирования отношений между объектами. Для работы с графами необходимо выбрать подходящий способ их представления. Наиболее распространенными методами являются матрицы смежности и списки смежности.


Матрицы смежностиOpen in new tab

Определение

Матрица смежности — это двумерный массив, который используется для представления графа. Если граф содержит VV вершин, то матрица смежности будет иметь размер V×VV \times V.

Формат

  • Для неориентированного графа:

    • Если между вершинами ii и jj существует ребро, то элемент матрицы A[i][j]=1A[i][j] = 1 (или вес ребра, если он задан).
    • Если ребра нет, то A[i][j]=0A[i][j] = 0.
  • Для ориентированного графа:

    • Если существует ребро из вершины ii в вершину jj, то A[i][j]=1A[i][j] = 1 (или вес).
    • Если ребра нет, то A[i][j]=0A[i][j] = 0.

Преимущества

  • Простота реализации.
  • Быстрый доступ к информации о наличии ребра между любыми двумя вершинами. Проверка наличия ребра выполняется за O(1)O(1).

Недостатки

  • Занимает много памяти, особенно для разреженных графов (где количество рёбер значительно меньше, чем V2V^2).
  • Неэффективен для графов с большим количеством вершин и малым количеством рёбер.

Списки смежностиOpen in new tab

Определение

Список смежности — это набор списков, где каждый список соответствует одной вершине графа и содержит все соседние вершины (т.е. вершины, с которыми она соединена рёбрами).

Формат

  • Для неориентированного графа:

    • Если существует ребро между вершинами ii и jj, то вершина jj будет добавлена в список для вершины ii и наоборот.
  • Для ориентированного графа:

    • Если существует ребро из вершины ii в вершину jj, то вершина jj будет добавлена только в список для вершины ii.

Преимущества

  • Более экономное использование памяти для разреженных графов.
  • Удобно для итерации по всем соседям вершины. Обход соседей выполняется за O(k)O(k), где kk — количество соседей.

Недостатки

  • Проверка наличия ребра между двумя вершинами может быть менее эффективной (в среднем O(k)O(k), где kk — количество соседей).
  • Более сложная реализация по сравнению с матрицей смежности.

Сравнение матриц и списков смежности

Характеристика Матрицы смежности Списки смежности
Память O(V2)O(V^2) O(V+E)O(V + E)
Проверка наличия ребра O(1)O(1) O(k)O(k)
Итерация по соседям O(V)O(V) O(k)O(k)
Простота реализации Простая Сложнее
Подходит для Плотных графов Разреженных графов

Заключение

Выбор между матрицей смежности и списком смежности зависит от характера графа и задач, которые необходимо решить. Матрицы смежности лучше подходят для плотных графов, где количество рёбер близко к V2V^2, в то время как списки смежности более эффективны для разреженных графов. Понимание этих представлений позволяет эффективно реализовывать алгоритмы работы с графами и оптимизировать использование ресурсов.