Recherche du chemin le plus court entre deux nœuds

9

Étant donné un digraphe pondéré et une fonction de pondération, d ( u , v ) , on peut normalement utiliser l'algorithme de Dijkstra pour obtenir le chemin le plus court. Ce que je suis intéressé, est de savoir comment obtenir le 2 n d chemin -shortest, le 3 r d -shortest, et ainsi de suite.G=V,Ed(u,v)2nd3rd

Des questions:

Existe-t-il un algorithme efficace pour obtenir le ième chemin le plus court entre deux nœuds dans un graphique pondéré?

Existe-t-il un algorithme efficace pour obtenir les k chemins les plus courts entre deux nœuds dans un graphe pondéré?

Une réponse à l'une ou l'autre est OK, bien que je me demande si une réponse à la deuxième question peut être faite plus efficacement que appels à une réponse à la première question.k

Realz Slaw
la source
2
Une recherche Google sur "k chemins les plus courts" fait apparaître un certain nombre de références qui décrivent des algorithmes pour ce problème. Il y a aussi un article Wikipedia sur exactement ce sujet: en.wikipedia.org/wiki/K_shortest_path_routing
DW
@DW Faire une réponse, avec un bref résumé?
Raphael

Réponses:

5

kkO(m+nlogn+k)k

Si vous interdisez les cycles, vous voudrez peut-être regarder l'algorithme de Hershberger et al. [2].


[1] Eppstein, David. "Trouver les k chemins les plus courts." SIAM Journal on computing 28.2 (1998): 652-673. [ CiteSeerX ]

[2] Hershberger, John, Matthew Maxel et Subhash Suri. "Trouver les k chemins simples les plus courts: un nouvel algorithme et sa mise en œuvre." Transactions ACM sur algorithmes (TALG) 3.4 (2007): 45. [ CiteSeerX ]

Juho
la source