Cómo encontrar un puente en un gráfico

De Wikipedia:

Algoritmo de búsqueda de puente de Tarjan

Robert Tarjan describió el primer algoritmo de tiempo lineal para encontrar los puentes en un gráfico en 1974. [5] Realiza los siguientes pasos:

  • Encuentra un bosque de
  • Crea un bosque enraizado del árbol de expansión
  • Atravesar el bosque en preordenar y numerar los nodos. Los nodos principales en el bosque ahora tienen números más bajos que los nodos secundarios.
  • Para cada nodo en preorden, hacer:
    • Calcule la cantidad de descendientes del bosque para este nodo, agregando uno a la suma de los descendientes de sus hijos.
    • Calcular , la etiqueta de pedido más bajo accesible desde por una ruta para la cual todos menos el último borde permanecen dentro del subárbol enraizado en . Este es el mínimo del conjunto que consiste en los valores de en los nodos hijos de y de las etiquetas de preorden de nodos accesibles desde por bordes que no pertenecen a .
    • Del mismo modo, calcular , la etiqueta de preorden más alta alcanzable por una ruta para la cual todos menos el último borde permanecen dentro del subárbol enraizado en . Este es el máximo del conjunto que consiste en los valores de en los nodos hijos de y de las etiquetas de preorden de nodos accesibles desde por bordes que no pertenecen a .
    • Para cada nodo con nodo padre , Si y entonces el borde de a Es un puente.

Suponiendo que está usando “puente” como sinónimo de “borde de corte”, hay un par de algoritmos en el artículo de Wikipedia sobre puentes.

Puede que esta no sea la mejor solución, pero esta es una solución que funciona.

Paso 1: Ejecute BFS y cuente el número total de nodos presentes en el gráfico.

Paso 2: elimine uno de los bordes del gráfico.

Paso 3: ejecute BFS una vez más y cuente el número total de nodos presentes en
la gráfica.

Paso 4: Compare el resultado encontrado en el paso 3 con el encontrado en el paso 1, si son iguales, vaya al paso 2 y continúe con otro borde (agregue el borde eliminado en la iteración actual) de lo contrario, este borde es el puente que estábamos buscando para.

More Interesting

Si el lenguaje en cuestión es Java, ¿cómo funciona el ciclo fetch-execute-cycle en una computadora con arquitectura von Neumann?

¿Cuál es más confiable? ¿HFS de Apple o EXT4 de Linux? ¿Cuáles son las fortalezas y debilidades de cada sistema de archivos?

En la teoría de la computación, ¿cómo puede probar que todos los NFA no son DFA?

¿Qué es un algoritmo genético?

¿Cuál es la necesidad de memoria virtual en las computadoras?

¿Qué tiene de anisotrópico el filtrado anisotrópico?

Stephen Hawking dice que existe la posibilidad de que la inteligencia artificial reemplace y reemplace a la inteligencia humana. Según los ateos, ¿deberían o pueden los humanos hacer algo al respecto? Esta pregunta no pretende demostrar lo que no se puede probar.

¿Cuál es la mejor manera para que un programador autodidacta complete el conocimiento de que un título en informática podría haberle ganado?

¿Qué es el spooling en la computadora?

¿Por qué muchos graduados de Carnegie Mellon CS tienen un complejo de inferioridad? ¿Los hace mejores ingenieros?

¿Por qué algunos procesadores más baratos tienen una frecuencia de reloj más alta (número de GHz) a veces?

¿Qué se necesitaría para construir una máquina virtual que registre continuamente el estado del sistema, desde la CPU hasta la E / S y el almacenamiento?

¿Cómo fue usar teclados de computadora antiguos?

Cómo encontrar las especificaciones de una computadora

¿Cuál es la medida y la terminología correctas para evaluar la eficiencia del algoritmo en las GPU?