Está en la página 1de 5

COMPLEJIDAD Y ALGORITMO

En la siguiente figura, el subgrafo {1, 2, 3, 4} es un componente fuertemente


conectado, porque los vértices 1, 2, 3, 4 son alcanzables en pares. {5} y {6}
también son dos componentes fuertemente conectados.

Directamente de acuerdo con la definición, el método de cruce e intersección


de dos vías se usa para encontrar los componentes conectados fuertes, y la
complejidad del tiempo es O (N ^ 2 + M). Un método mejor es el algoritmo de
Kosaraju o el algoritmo de Tarjan, los cuales tienen una complejidad de tiempo
O (N + M).

Algoritmo de Tarjan

El algoritmo de Tarjan se basa en el algoritmo de búsqueda en profundidad del


gráfico, y cada componente fuertemente conectado es un subárbol en el árbol
de búsqueda. Al buscar, los nodos no procesados en el árbol de búsqueda
actual se agregan a una pila y, al retroceder, se puede juzgar si el nodo de la
parte superior de la pila a la pila es un componente fuertemente conectado.

La siguiente es una demostración del flujo del algoritmo.

Inicie DFS desde el nodo 1 y agregue los nodos recorridos a la pila. Cuando se
busca el nodo u = 6, DFN [6] = BAJO [6], y se encuentra un componente
conectado fuerte. Desapile hasta que u = v, {6} sea un componente
fuertemente conectado.
Regrese al nodo 5 y descubra que DFN [5] = BAJO [5]. {5} es un componente
fuertemente conectado después de empujar la pila.

Regrese al nodo 3, continúe buscando al nodo 4 y agregue 4 a la pila. Se


encuentra que el nodo 4 tiene un borde hacia atrás al nodo 1, y el nodo 1
todavía está en la pila, por lo que LOW [4] = 1. El nodo 6 está fuera de la pila,
(4,6) es el borde de bordes cruzados y devuelve 3, (3,4) es el borde de la rama,
por lo que LOW [3] = LOW [4] = 1.
Continúe de regreso al nodo 1 y finalmente visite el nodo 2. Visite edge (2,4), 4
todavía está en la pila, por lo que LOW [2] = DFN [4] = 5. Después de devolver
1, se encuentra que DFN [1] = BAJO [1], y todos los nodos en la pila se sacan
para formar un componente conectado {1,3,4,2}.

En este punto, el algoritmo termina. A través de este algoritmo, se obtienen los


tres componentes fuertemente conectados {1,3,4,2}, {5}, {6} en la figura.
Se puede encontrar que en el proceso de ejecutar el algoritmo de Tarjan, se
accede a cada vértice una vez, y la pila solo se ingresa y sale una vez, y cada
borde también se accede solo una vez, por lo que la complejidad temporal del
algoritmo es O (N + M) .

Algoritmo de Kosaraju

En comparación con el algoritmo de Tarjan, el algoritmo de Kosaraju es más fácil de


entender. El principio es muy simple: realizar dos recorridos DFS en un gráfico dirigido.

Este es un gráfico dirigido.


Para el componente
fuertemente conectado,
podemos verlo de un vistazo, y
la máquina no tiene ojos,
¿cómo identificarlo?

Primero, realizamos DFS en


orden desde el primer nodo
hasta el quinto nodo. Utilizamos la matriz dfn para registrar los registros de
acceso y salida de dfs.

Grabado después del recorrido, registramos las salidas sucesivas como [5] [3]
[2] [4] [1].

Luego invertimos los bordes del gráfico para obtener el gráfico inverso:
Usamos la matriz dfn para atravesar este gráfico inverso nuevamente en orden
inverso. El conjunto de puntos atravesados por el mismo dfs es un componente
fuertemente conectado.

Si aún no comprende esto, continuamos el proceso de simulación:

Dfs el antígrafo en el orden [1] [4] [2] [3] [5].

Recorremos desde 1 para obtener el conjunto {1,4}, que es un componente


fuertemente conectado.

Recorreremos nuevamente con 2 como punto de partida para obtener el


conjunto {2,5,3}, que también es un componente fuertemente conectado. De
esta manera, nuestro algoritmo se implementa.

También podría gustarte