Saltar a contenido

Componentes fuertemente conexos (SCC)

Un componente fuertemente conexo (Strongly Connected Component, SCC) de un grafo dirigido es un subconjunto de vértices tal que, para todo par de vértices \(u\) y \(v\) dentro del componente, existe un camino dirigido de \(u\) a \(v\) y también de \(v\) a \(u\).

Un SCC es maximal: si se agrega cualquier vértice adicional, se pierde la propiedad de alcanzabilidad mutua entre todos los vértices.

Grafo transpuesto (\(G^T\)): Es el grafo obtenido al invertir la dirección de todas las aristas de \(G\). Se cumple que \(G^T\) tiene los mismos SCC que \(G\), solo que las aristas están en dirección contraria.

Sea \(G^{SCC}\) el grafo de componentes, donde cada nodo representa un SCC y existe una arista entre dos componentes si hay al menos una arista en \(G\) desde algún vértice del primer componente hacia algún vértice del segundo. \(G^{SCC}\) es siempre un DAG (grafo acíclico dirigido), es decir, no contiene ciclos.

graph TD
    A --> B
    B --> F
    B --> E
    B --> C
    C --> D
    D --> C
    E --> A
    E --> F
    F --> G
    G --> F
    G --> H
    H --> G

Este grafo tiene tres componentes fuertemente conexas: \(\{A,B,E\}\), \(\{C,D\}\), \(\{F,G,H\}\). El grafo de componentes correspondiente es:

graph TD
    A["{A,B,E}"] --> B["{C,D}"]
    A --> C["{F,G,H}"]

Nótese que este es un DAG, por lo tanto admite un ordenamiento topológico.

Notación de tiempos en DFS: - \(v.d\): tiempo de descubrimiento del vértice \(v\). - \(v.f\): tiempo de finalización del vértice \(v\).

Para un componente \(C\), definimos: - \(d(C) = \min_{v \in C}(v.d)\): tiempo de descubrimiento del componente. - \(f(C) = \max_{v \in C}(v.f)\): tiempo de finalización del componente.

Dado que \(G^{SCC}\) es un DAG, se cumple que si existe una arista de \(C\) a \(C'\) en \(G^{SCC}\), entonces \(f(C) > f(C')\) en una búsqueda en profundidad (DFS) sobre \(G\). Esta propiedad es clave para algoritmos como el de Kosaraju o Tarjan, que identifican SCCs utilizando DFS y el grafo transpuesto.


Tabla de resumen

Concepto Definición Observaciones
Componente fuertemente conexo (SCC) Subconjunto maximal de vértices donde cada par tiene caminos mutuos en un grafo dirigido. Propiedad de equivalencia: reflexiva, simétrica y transitiva.
Grafo transpuesto (\(G^T\)) Grafo con las mismas aristas que \(G\) pero con direcciones invertidas. Conserva los SCCs originales.
Grafo de componentes (\(G^{SCC}\)) Grafo donde cada nodo es un SCC y las aristas conectan componentes si hay al menos una arista entre ellos en \(G\). Siempre es un DAG (grafo acíclico dirigido).
Ordenamiento topológico Orden lineal de los vértices/nodos tal que toda arista va de un nodo anterior a uno posterior. Existe en \(G^{SCC}\) porque es un DAG.
Tiempos en DFS \(v.d\): descubrimiento; \(v.f\): finalización. Usados en algoritmos para detectar SCCs (Kosaraju, Tarjan).
Propiedad de finalización Si hay arista de \(C\) a \(C'\) en \(G^{SCC}\), entonces \(f(C) > f(C')\) en DFS sobre \(G\). Base del algoritmo de Kosaraju: DFS en \(G\), luego en \(G^T\) en orden decreciente de \(f\).

Comentarios adicionales: - Los SCCs son fundamentales en análisis de redes, sistemas de control, compiladores (análisis de flujo) y bases de datos. - El algoritmo de Tarjan encuentra todos los SCCs en tiempo lineal \(O(V+E)\) usando una sola DFS y una pila, sin necesidad del grafo transpuesto. - En un grafo no dirigido, los componentes conexos son análogos a los SCCs, pero en grafos dirigidos la conectividad es más restrictiva. - La condensación de un grafo en su \(G^{SCC}\) permite simplificar problemas, como detección de ciclos o cálculo de caminos mínimos en DAGs.