Tengo un DAG de dependencias que contiene muchos bordes redundantes (ver ejemplo a continuación). Quiero un algoritmo "rápido" (es decir, puede manejar un gráfico con varios miles de nodos / bordes) que encuentre un gráfico secundario mínimo.
Por ejemplo:
A -> B -> C
A -> C
en palabras, A es prerrequisito para B, y B es prerrequisito para C, y también A es prerrequisito para C. En este caso, A -> C es redundante (ya que B ya es necesario para llegar a C y A es necesario para llegar a B) .
Ha pasado un tiempo desde que estudié algoritmos, y no estoy seguro de por dónde empezar.
Por cierto, no es crítico que el algoritmo encuentre el mínimo global, el mínimo local está bien (la reducción del borde es solo una optimización del tiempo de ejecución para la próxima etapa del procesamiento).
Además, me doy cuenta de que se trata de un control de calidad de CS y no de programación, pero mi programa está escrito en Python, por lo que me encantaría conocer un módulo de Python o código abierto para hacer esta reducción, en caso de que lo sepas.
¡gracias por adelantado!