Dado un gráfico acíclico dirigido con nodos, ¿cómo se puede determinar si hay una ruta entre alguno de los siguientes n pares de nodos ? Hay un algoritmo simple en (donde m es el número de aristas) haciendo una búsqueda desde cada nodo , pero ¿se puede hacer mejor?O ( n ⋅ ( n + m ) ) 1 … n
EDITAR: Estoy buscando existencia, no caminos completos.
Respuestas:
Como Chandra Chekuri señaló en un comentario, podría calcular el cierre transitivo a través de una multiplicación de matriz rápida, resolviendo el problema en tiempo O ( ) (use su método favorito, O ( n 2.376 ) a través de Coppersmith y Winograd, o más prácticamente usando Strassen's O ( n 2.81 )), y esto sería bueno para gráficos densos.norteω norte2.376 norte2,81
Ahora, afirmo que si puede superar este tiempo de ejecución para su problema de gráficos densos, obtendría un algoritmo para la detección de triángulos que es más eficiente que calcular el producto de dos matrices booleanas. La existencia de tal algoritmo es un gran problema abierto.
Reduciré el problema del triángulo al problema de n-pares-DAG-accesibilidad. Supongamos que se nos da un gráfico G en n nodos y queremos determinar si G contiene un triángulo.
Ahora, desde G cree un DAG G 'de la siguiente manera. Cree cuatro copias del conjunto de vértices, , V 2 , V 3 , V 4 . Para copias u i ∈ V i , v i + 1 ∈ V i + 1 para i = 1 , 2 , 3 , agregue un borde ( u i , v i + 1 ) iff ( u , v )V1 V2 V3 V4 4 tuyo∈ Vyo vi + 1∈ Vi + 1 i = 1 , 2 , 3 ( uyo, vi + 1) ( u , v ) estaba en G. Ahora bien, si nos preguntamos si existe un camino entre cualquiera de los pares para todos u ∈ G, entonces esto exactamente se pregunta si hay un triángulo en G . El gráfico actual tiene 4 n nodos y estamos preguntando acerca de n pares. Sin embargo, podemos agregar 2 n nodos ficticios aislados y tener 3 n consultas en su lugar (agregando una consulta para 2 n pares distintos ( y , d ) donde y ∈ V 2(u1,u4) u∈ G 4n n 2n 3n 2n (y,d) y d un maniquí), obteniendo así un 6 n ejemplo -node de exactamente su problema.y∈V2∪V3 d 6n
fuente
La clasificación topológica ( ) luego se trabaja propagando un conjunto de bits de nodos desde el cual se puede alcanzar cada nodo ( O ( m n ) ).O(m+n) O(mn)
Después del ordenamiento topológico, puede hacer un rechazo rápido de (si el nodo n + x precede al nodo x en el ordenamiento, entonces no hay una ruta de x a n + x ).O(n) n+x x x n+x
fuente
Se pueden agregar otras heurísticas, pero su eficiencia (y la eficiencia de las tres propuestas) depende en gran medida de la estructura del gráfico.
fuente