Algoritmo rápido para contar el número de rutas acíclicas en un gráfico dirigido

n resumen, necesito unrápid algoritmo para contar cuántas rutas acíclicas hay en un gráfico dirigido simple.

Porsencill gráfico me refiero a uno sin auto loop o múltiples aristas. UNAcamin puede comenzar desde cualquier nodo y debe terminar en un nodo que no tenga bordes salientes. Un camino esacíclic si no aparece borde dos veces en él.

Mis gráficos (conjuntos de datos empíricos) solo tienen entre 20 y 160 nodos, sin embargo, algunos de ellos tienen muchos ciclos, por lo que habrá una gran cantidad de rutas, y mi enfoque ingenuo simplemente no es lo suficientemente rápido para algunos de los gráfico que tengo.

Lo que estoy haciendo actualmente es "descender" a lo largo de todos los bordes posibles utilizando una función recursiva, mientras sigo los nodos que ya he visitado (y los evito). La solución más rápida que tengo hasta ahora fue escrita en C ++, y utiliza el argumento std :: bitset en la función recursiva para realizar un seguimiento de los nodos que ya se visitaron (los nodos visitados están marcados por el bit 1). Este programa se ejecuta en el conjunto de datos de muestra en 1-2 minutos (dependiendo de la velocidad de la computadora). Con otros conjuntos de datos, tarda más de un día en ejecutarse, o aparentemente mucho más tiempo.

El conjunto de datos de muestra:http: //pastie.org/176378 (cada línea es un par de bordes)

Solución para el conjunto de datos de muestra (el primer número es el nodo desde el que estoy comenzando, el segundo número es el recuento de ruta a partir de ese nodo, el último número es el recuento total de ruta):http: //pastie.org/176379

Por favor, avíseme si tiene ideas sobre algoritmos con una mejor complejidad. También estoy interesado en soluciones aproximadas (estimar el número de caminos con algún enfoque de Monte Carlo). Eventualmente, también querré medir la longitud promedio de la ruta.

Edit: también publicado en MathOverflow bajo el mismo título, ya que podría ser más relevante allí. Espero que esto no esté en contra de las reglas. No se puede vincular ya que el sitio no permitirá más de 2 enlaces ...

Respuestas a la pregunta(3)

Su respuesta a la pregunta