🎁 Regístrate ahora y obtén hasta 30 minutos gratis de uso de IA en línea. Sin tarjeta de crédito.

Algoritmo de Kosaraju: Guía de componentes fuertemente conectados

August 22, 2026
Aprenda el algoritmo de Kosaraju para componentes fuertemente conectados con intuición, pasos, complejidad, pseudocódigo, ejemplos, errores comunes y práctica de entrevistas.
Gráfico dirigido descompuesto en componentes fuertemente conectados
Algoritmo de Kosaraju
componentes fuertemente conectados
algoritmo gráfico
preparación de entrevistas de codificación

TL;DR: El algoritmo de Kosaraju encuentra componentes fuertemente conectados en un gráfico dirigido utilizando dos pasos de búsqueda en profundidad. Primero registre los vértices disminuyendo el tiempo de finalización, transponga cada borde y luego explore el gráfico transpuesto en ese orden. El tiempo de ejecución es O(V + E) y el almacenamiento auxiliar es O(V + E) cuando se almacena la transposición.

Algoritmo de Kosaraju: Guía de componentes fuertemente conectados

Aprenda el algoritmo de Kosaraju para componentes fuertemente conectados con intuición, pasos, complejidad, pseudocódigo, ejemplos, errores comunes y práctica de entrevistas.

Pruebe YesToTheOffer

¿Qué es el algoritmo de Kosaraju?

Gráfico dirigido descompuesto en componentes fuertemente conectados

El algoritmo de Kosaraju divide un gráfico dirigido en componentes fuertemente conectados, o SCC. Dentro de un SCC, cada vértice puede alcanzar cualquier otro vértice. La contratación de cada SCC en un nodo produce un gráfico acíclico dirigido, lo que hace que los componentes sean útiles para el análisis de dependencia, gráficos de programas, accesibilidad y condensación de gráficos.

El algoritmo utiliza una propiedad estructural de búsqueda en profundidad. Los tiempos de finalización del gráfico original identifican un orden seguro para explorar el gráfico transpuesto. Invertir cada borde intercambia las relaciones de origen y destino entre componentes, por lo que una búsqueda no puede filtrarse a un componente no asignado cuando los vértices se procesan en el orden correcto.

¿Cómo funciona el algoritmo de dos pasadas?

  1. Cree un conjunto visitado y una lista de pedidos finales vacía.
  2. Ejecute una búsqueda en profundidad desde cada vértice no visitado en el gráfico original.
  3. Agregue cada vértice después de que finalicen todos sus vecinos salientes.
  4. Construya la transpuesta invirtiendo cada borde dirigido.
  5. Borre el conjunto visitado.
  6. Procese los vértices en orden de finalización inverso.
  7. Cada árbol DFS en el gráfico transpuesto es un componente fuertemente conectado.

Puede almacenar vértices en una pila cuando regrese su primera llamada DFS. Al hacer estallar la pila, naturalmente se reduce el tiempo de finalización. El gráfico puede estar desconectado, por lo que ambos bucles externos deben considerar cada vértice en lugar de comenzar únicamente desde el vértice cero.

¿Por qué el orden de acabado inverso encuentra SCC?

Imagine comprimir cada SCC en un solo nodo. El gráfico de condensación resultante no tiene un ciclo dirigido. En el primer DFS, el componente con la última hora de finalización relevante se comporta como una fuente en esta estructura condensada. Después de transponer el gráfico, ese componente se comporta como un sumidero, por lo que un DFS iniciado allí permanece dentro de él.

Eliminar ese componente revela el mismo argumento para el siguiente componente no asignado. Esta es la idea de prueba que los entrevistadores suelen querer: el orden final selecciona los componentes de forma segura y la transposición evita que la segunda pasada cruce el límite de salida incorrecto. No es necesario reproducir una prueba formal larga, pero sí se deben explicar ambas funciones.

¿Cuáles son las complejidades del tiempo y el espacio?

Cada pasada de búsqueda en profundidad visita cada vértice y examina cada borde una vez, y construir la transpuesta también requiere tiempo lineal. Por tanto, el tiempo total es O(V + E). Con listas de adyacencia tanto para el gráfico como para la transposición, el almacenamiento es O(V + E), más O(V) para el estado visitado, el orden final y la recursividad o una pila explícita.

FaseHoraPropósito adicional
Primer DFSO(V + mi)Orden de finalización récord
TransponerO(V + mi)Dirección del borde inverso
Segundo DFSO(V + mi)Recoger componentes
TotalesO(V + mi)Lineal en representación gráfica

Para gráficos muy profundos, DFS recursivo puede exceder el límite de pila de llamadas de un idioma. Mencionar una pila iterativa muestra conciencia de producción sin cambiar el límite asintótico.

Flujo de trabajo de búsqueda en profundidad de dos pasos para el algoritmo de Kosaraju

¿Qué pseudocódigo debes saber para una entrevista?

fin_orden = []
visitado = conjunto()

para vértice en el gráfico:
    si el vértice no está visitado:
        dfs_finish(vértice, gráfico, visitado, fin_orden)

transponer = invertir_todos_los_edges(gráfico)
visitado.clear()
componentes = []

para vértice en reversa (finish_order):
    si el vértice no está visitado:
        componente = []
        dfs_collect(vértice, transposición, visitado, componente)
        componentes.append(componente)

En dfs_finish, agregue el vértice después de visitar a los vecinos. En dfs_collect, agregue el vértice cuando se descubra. Mantenga esas dos responsabilidades separadas; utilizar el pedido anticipado en la primera pasada es un error común.

¿Qué errores comúnmente interrumpen una implementación de Kosaraju?

Los errores más comunes son registrar el orden de descubrimiento en lugar del orden de finalización, olvidarse de invertir el orden para la segunda pasada, invertir solo algunos bordes, reutilizar el estado visitado sin borrarlo y omitir vértices aislados o desconectados. Otro error es tratar un gráfico no dirigido como si los SCC tuvieran significado de la misma manera; Los componentes conectados son el concepto más simple allí.

Pruebe un solo vértice, un vértice aislado, un ciclo dirigido, una cadena unidireccional, dos ciclos unidos por un borde, bucles automáticos y un gráfico desconectado. Verifique la partición en lugar de depender del orden de salida de los componentes, porque diferentes órdenes transversales DFS válidos pueden enumerar componentes o vértices de manera diferente.

¿Cómo se compara Kosaraju con el algoritmo de Tarjan?

Ambos algoritmos encuentran SCC en O (V + E). Kosaraju utiliza dos pases DFS y generalmente almacena un gráfico transpuesto, lo que puede simplificar el razonamiento y la implementación. Tarjan usa un DFS con índices de descubrimiento, valores de enlace bajos y una pila; evita una transposición explícita pero tiene más estado que mantener correctamente.

En una entrevista, elija el algoritmo que pueda explicar e implementar de manera confiable, a menos que las limitaciones lo favorezcan. Si el entrevistador pide una pasada o ninguna transposición, Tarjan puede encajar mejor. Si la claridad y la prueba directa son prioridades, Kosaraju suele ser una excelente opción.

¿Cómo puede la IA respaldar la práctica responsable de algoritmos gráficos?

AI puede generar pequeños contraejemplos, rastrear el estado DFS, comparar implementaciones y desafiar una explicación compleja. La asistencia con la codificación puede ayudar a localizar un error en el pedido o en el estado visitado, mientras que la revisión de la transcripción puede mostrar si explicó claramente la idea de la prueba.

Siempre dibuje y trace usted mismo al menos un gráfico, ejecute pruebas y verifique las afirmaciones generadas. Siga las reglas de evaluación y no utilice asistencia prohibida. YesToTheOffer admite la preparación de codificación, razonamiento permitido en tiempo real, notas privadas y revisión posterior a la entrevista.

Preguntas frecuentes

FAQ

¿Para qué se utiliza el algoritmo de Kosaraju?

El algoritmo de Kosaraju encuentra componentes fuertemente conectados en un gráfico dirigido. Los SCC ayudan a simplificar las estructuras de accesibilidad y dependencia porque cada componente se puede contraer en un nodo, lo que produce un gráfico de condensación acíclico dirigido.

¿Por qué el algoritmo de Kosaraju necesita dos pases DFS?

La primera pasada calcula un orden de tiempo de finalización que identifica qué componente es seguro explorar a continuación. La segunda pasada se ejecuta en el gráfico transpuesto, donde los bordes invertidos evitan que la búsqueda escape a un componente diferente no asignado.

¿Cuál es la complejidad del algoritmo de Kosaraju?

La complejidad del tiempo es O (V + E): dos pases DFS y una inversión de borde son lineales en un gráfico de lista de adyacencia. Las listas de adyacencia almacenadas para los gráficos originales y transpuestos utilizan el espacio O(V + E), con un estado transversal O(V) adicional.

¿Importa el orden de salida de los componentes?

Generalmente no. Un orden de adyacencia diferente puede cambiar el recorrido DFS y el orden de los vértices o componentes mientras se produce la misma partición válida. Las pruebas deben comparar la membresía de los componentes como conjuntos, a menos que un problema requiera explícitamente un orden particular.

¿Es el algoritmo de Tarjan mejor que el algoritmo de Kosaraju?

Ninguno de los dos es universalmente mejor. Ambos corren en O(V + E). Tarjan usa un DFS y ninguna transposición explícita, pero mantiene un estado de enlace bajo; Kosaraju utiliza dos pases conceptualmente simples y comúnmente almacena el gráfico invertido. Elija en función de las limitaciones y la confiabilidad de la implementación.

Convierta la práctica en un sistema repetible

Cree un plan de práctica basado en evidencia, utilice apoyo responsable cuando esté permitido y revise la conversación mientras esté fresca.

Convierta la práctica en un sistema repetible

Prepárese con su propia evidencia y revise cada respuesta con un contexto más claro.

Pruebe YesToTheOffer
Algoritmo de Kosaraju: Guía de entrevistas SCC | yestotheoffer