Sea un gráfico dirigido acíclico, de modo que el grado de salida de cualquier vértice sea O ( log | V | ) . Para cada vértice de G podemos contar el número de vértices alcanzables, simplemente ejecutando dfs desde cada vértice y esto llevará tiempo O ( | V | | E | ) . ¿Hay una mejor manera de resolver este problema?
11
Respuestas:
El mejor algoritmo exacto se ejecutará en el tiempo O (min {mn, n ^ 2.38}) usando la multiplicación de matriz binaria rápida. Sin embargo, existe un algoritmo aleatorio, que se ejecuta en el tiempo O (m + n) y estima el número de nodos alcanzables desde cada nodo con un pequeño error relativo, consulte el " Marco de estimación de tamaño con aplicaciones para el cierre transitivo y la accesibilidad "por Edith Cohen.
fuente
No soy un experto aquí, lo intentaré.
1) Dado que es DAG, debe tener un vértice de sumidero, es decir, un vértice con un grado inferior 0. Busque un vértice de sumidero que diga x y agregue {x} como vértice accesible al vecino (x). elimine xy repita el proceso hasta que el gráfico quede vacío
fuente
(Similar a la solución de Prabu ... pero más detallada)
fuente