Il existe une implémentation personnalisée de KSPA qui doit être réécrite. L'implémentation actuelle utilise un algorithme de Dijkstra modifié dont le pseudo-code est expliqué ci-dessous. Il est communément appelé KSPA en utilisant la stratégie de suppression de bord je pense. (je suis un novice en théorie des graphes).Suggestions pour KSPA sur un graphe non orienté
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
que je comprends l'algorithme, pour obtenir kième plus court chemin, SPT « k-1 » se trouvent entre chaque paire source-destination et « k-1 » bords chacun d'un SPT doivent être supprimés simultanément pour chaque combinaison. Il est clair que cet algorithme a une complexité combinatoire et obstrue le serveur sur de grands graphiques. Les gens m'ont suggéré l'algorithme d'Eppstein (http://www.ics.uci.edu/~eppstein/pubs/Epp-SJC-98.pdf). Mais ce livre blanc cite un «digramme» et je n'ai pas vu mentionner qu'il ne fonctionne que pour les digrammes. Je voulais juste demander aux gens si quelqu'un a utilisé cet algorithme sur un graphe non orienté? Sinon, y a-t-il de bons algorithmes (en termes de complexité temporelle) pour implémenter KSPA sur un graphe non orienté?
Merci à l'avance,
Les graphes non orientés sont essentiellement des digrammes dont chaque arête est doublée, n'est-ce pas? Il ne devrait pas y avoir de problème avec l'algorithme auquel vous vous êtes connecté. –
Oui. Mais quelqu'un qui a travaillé sur l'algo m'a dit qu'il utilise une technique de distribution spéciale qui peut ne pas fonctionner sur des graphes non orientés. Donc, j'ai pensé à vérifier si quelqu'un l'avait effectivement appliqué à un graphique non orienté. Mais je vais vérifier. La mise en œuvre est en cours ... – Abhay
L'algorithme d'Eppstein ne fonctionne que sur des graphes acycliques. Bien qu'un graphe non orienté soit un graphe orienté avec des arêtes dans les deux directions, la technique de distribution échoue à cause des cycles. – Abhay