¿Cómo funciona el algoritmo SCC de Tarjan?

No estoy seguro de qué código hace referencia específicamente, pero deduzco de él, y probablemente sea muy similar a esto de todos modos. Debido a que Disc[v] es el tiempo de descubrimiento del nodo v (dado el nombre “Disco”, pero podría usar solo la profundidad de depth[v] del nodo v ) y low[v] es el tiempo de descubrimiento mínimo (profundidad) de Todos los nodos a los que existe un borde directo desde algún nodo del subárbol de v (incluido v ). Si usa la fórmula low[u] = min(low[u], Disc[v]) , entonces está calculando exactamente eso, y esto es lo que necesita (el criterio es que si low[u]==Disc[u] , entonces u y su padre en el árbol DFS están en diferentes SCC). Sin embargo, si usa la fórmula low[u] = min(low[u], low[v]) , estaría calculando “el tiempo mínimo de descubrimiento (profundidad) de todos los nodos accesibles desde v “, pero esto ya no no funciona, porque puede encontrar de esta manera un camino que primero desciende de v , luego sube a la “raíz” de su SCC, luego baja de allí a otro SCC, luego sube de allí a la raíz de ese otro SCC, y así sucesivamente, porque esta definición de low[v] es totalmente recursiva.

También puede ver este video y el siguiente para otro algoritmo para calcular SCC.

More Interesting

¿Cuál es la solución eficiente para SPOJ CCROSSX?

¿Te gusta la categoría de algoritmos de 'programación dinámica'?

¿Podría dar un algoritmo que calcule la puntuación máxima de la mejor alineación de secuencia (S ', T') de S y T?

Es un método de retroceso para imprimir permutaciones de cadena. No entiendo de qué manera se produce el flujo de control, como después de encontrar el intercambio, el intercambio se llama luego permutar y luego nuevamente. ¿Esto no se me viene a la cabeza?

¿Qué métodos matemáticos se utilizan para rastrear el efecto de mercado de los algoritmos comerciales de alta frecuencia?

¿Qué plataforma / herramienta / idioma debería ser bueno para la minería de texto?

¿Cuál es la complejidad temporal del algoritmo de búsqueda binaria?

¿Cuál es la relación entre el análisis probabilístico y el algoritmo aleatorio?

¿Por qué la notación Big-O es una forma muy útil de analizar la complejidad del algoritmo?

¿Cuál es la mejor manera de fusionar datos mal estructurados de grandes bases de datos?

¿Qué es mejor, resolver menos problemas por su cuenta o más problemas usando sugerencias?

Algoritmos: ¿Cómo encuentro un elemento en una secuencia que sea más pequeño que mi número en la secuencia, a la izquierda de mi número y a la derecha de todos esos elementos?

El tiempo supuestamente imaginario puede modelarse significativamente en física. Entonces, ¿puede existir una complejidad de tiempo imaginaria para un algoritmo?

¿Debería centrarme en aprender más idiomas o algoritmos y estructuras de datos?

¿Cuáles son las diferencias entre DFS y BFS?