Hay una implementación personalizada de KSPA que necesita ser reescrita. La implementación actual usa un algoritmo de Dijkstra modificado cuyo pseudocódigo se explica más o menos a continuación. Se lo conoce comúnmente como KSPA usando una estrategia de eliminación de bordes, creo que sí. (soy un novato en la teoría de grafos).Sugerencias para KSPA en el gráfico no dirigido
Step:-1. Calculate the shortest path between any given pair of nodes using the Dijkstra algorithm. k = 0 here.
Step:-2. Set k = 1
Step:-3. Extract all the edges from all the ‘k-1’ shortest path trees. Add the same to a linked list Edge_List.
Step:-4. Create a combination of ‘k’ edges from Edge_List to be deleted at once such that each edge belongs to a different SPT (Shortest Path Tree). This can be done by inspecting the ‘k’ value for each edge of the combination considered. The ‘k’ value has to be different for each of the edge of the chosen combination.
Step:-5. Delete the combination of edges chosen in the above step temporarily from the graph in memory.
Step:-6. Re-run Dijkstra for the same pair of nodes as in Step:-1.
Step:-7. Add the resulting path into a temporary list of paths. Paths_List.
Step:-8. Restore the deleted edges back into the graph.
Step:-9. Go to Step:-4 to get another combination of edges for deletion until all unique combinations are exhausted. This is nothing but choosing ‘r’ edges at a time among ‘n’ edges => nCr.
Step:-10. The ‘k+1’ th shortest path is = Minimum(Paths_List).
Step:-11. k = k + 1 Go to Step:-3, until k < N.
Step:-12. STOP
como entiendo el algoritmo, para obtener k-ésima trayectoria más corta, SPT 'k-1' se encuentran entre cada par fuente-destino y 'k-1' bordes de cada uno de uno SPT se van a eliminar al mismo tiempo para cada combinación. Claramente, este algoritmo tiene complejidad combinatoria y obstruye el servidor en gráficos grandes. La gente me sugirió el algoritmo de Eppstein (http://www.ics.uci.edu/~eppstein/pubs/Epp-SJC-98.pdf). Pero este documento blanco cita un "dígrafo" y no vi una mención que funcione solo para los dígrafos. Solo quería preguntarle a la gente si alguien ha usado este algoritmo en un gráfico no dirigido.
Si no, ¿hay buenos algoritmos (en términos de complejidad de tiempo) para implementar KSPA en un gráfico no dirigido?
Gracias de antemano,
grafos no dirigidos son básicamente dígrafos con cada borde doble, ¿verdad? No debería haber un problema con el algoritmo al que vinculó. –
Sí. Pero alguien que trabajó en el algo me dijo que usa una técnica de distribución especial que puede no funcionar en gráficos no dirigidos. Entonces, pensé en verificar si alguien realmente lo había aplicado a un gráfico no dirigido. Pero voy a echar un vistazo. La implementación está en curso ... – Abhay
El algoritmo de Eppstein solo funciona en gráficos acíclicos. Aunque un gráfico no dirigido es un gráfico dirigido con bordes en ambas direcciones, la técnica de distribución falla debido a los ciclos. – Abhay