Graph Condensation

Выполнил студент 8 института МАИ - Синькин Андрей, группа - М8О-115БВ-24

Репозиторий проекта

Граф конденсации для графа заданного матрицей смежности


Определения

Компонентой сильной связности называется такое подмножество вершин CC, что любые две вершины этого подмножества достижимы друг из друга, т.е. для u,vC\forall u, v \in C существует путь из uu в vv и из vv в uu.

Орграфом конденсации для ориентированного графа D=(V,X)D=(V,X) называется ориентированный графD0=(V0,X0)D_0=(V_0,X_0), в котором каждая вершина представляет собой компоненту сильной связности графа DD, а множество его дуг X0X_0 определяется условием: x0=(v0,w0)X0x_0=(v_0,w_0) \in X_0 тогда и только тогда, когда в компонентах сильной связности v0v_0 и w0w_0 существуют вершины vv0v \in v_0 и ww0w \in w_0, для которых x=(v,w)Xx=(v,w) \in X.

Более формально, если GG - ориентированный граф, то его граф конденсации C(G)C(G) - это ориентированный граф полученный из GG путём сжатия всех вершин, принадлежащих одной компоненте сильной связности, в одну вершину. Ребро между двумя вершинами uu и vv в графе конденсации существует тогда и только тогда, когда в графе GG существует хотя бы одно ребро из вершины uu в вершину vv.

Алгоритм нахождения графа конденсации

Для нахождения графа конденсации ориентированного графа GG в данной работе будем использовать алгоритм Косарайю. Алгоритм имеет алгоритмическую сложность O(V+E)O(V + E), где VV - количество вершин, а EE - количество рёбер в исходном графе GG.

Алгоритм состоит из следующих шагов:

  1. Выполнить обход в глубину (далее, DFS) по графу GG и сохранить порядок завершения вершин;
  2. Транспонировать граф GG (развернуть все рёбра);
  3. Выполнить DFS по транспонированному графу, начиная с вершин в порядке, полученном на первом шаге. Каждая итерация DFS будет находить одну компоненту сильной связности;
  4. Построить граф конденсации, где каждая компонента сильной связности становится вершиной, а рёбра определяются по исходному графу.

Где это используется?

Графы конденсации полезны для:

  • Анализа структуры больших графов.
  • Выявления циклов и зависимостей в системах.
  • Упрощения графа перед применением других алгоритмов, которые эффективны на ациклических графах.
  • И другие...