Sto cercando di capire esattamente come funzionano questi algoritmi, ma non sono riuscito a trovare una spiegazione semplice. Apprezzerei molto se qualcuno potesse fornire o indicarmi una descrizione di questi algoritmi che è più facile da capire rispetto alla descrizione nei documenti originali. Grazie.Algoritmo di Eppstein e algoritmo di Yen per k percorsi più corti
risposta
Prima di tutto lascia che ti fornisca i link ai documenti di cui stavi parlando. carta
di Eppstein: D. Eppstein, “Finding the k shortest paths,” SIAM J. Comput., vol. 28, no. 2, pp.652–673, Feb. 1999
carta di Yen: J. Y. Yen, “Finding the K Shortest Loopless Paths in a Network,” Management Science, vol. 17, no. 11, pp. 712–716, 1971.
Ecco la mia spiegazione dell'algoritmo di Yen:
algoritmo di Yen utilizza due liste, vale a dire la lista A (percorsi più brevi permanente dalla sorgente alla destinazione - ordinati cronologicamente) e lista B (tentativi/percorsi candidati più brevi). Per prima cosa devi trovare il 1 ° percorso più breve dalla sorgente alla destinazione usando un algoritmo con il percorso più breve adatto (ad esempio Dijkstra). Quindi Yen sfrutta l'idea che i cammini più brevi di k-es possono condividere bordi e sotto-percorsi (percorso dalla sorgente a qualsiasi nodo intermedio all'interno della rotta) da (k-1) -th percorso più breve. Quindi devi prendere (k-1) il percorso più breve e rendere a turno ogni nodo nella rotta irraggiungibile, cioè rimuovere il bordo particolare che va al nodo all'interno della rotta. Una volta che il nodo è irraggiungibile, trova il percorso più breve dal nodo precedente alla destinazione. Quindi si ha una nuova rotta che viene creata aggiungendo il percorso secondario comune (dall'origine al nodo precedente del nodo irraggiungibile) e aggiunge il nuovo percorso più breve dal nodo precedente alla destinazione. Questo percorso viene quindi aggiunto all'elenco B, a condizione che non sia mai apparso nell'elenco A o nell'elenco B prima. Dopo averlo ripetuto per tutti i nodi del percorso, devi trovare il percorso più breve nell'elenco B e spostarlo nell'elenco A. Devi solo ripetere questo processo per il numero di K che hai.
Questo algoritmo ha una complessità computazionale di O (kn^3). Si prega di leggere la carta per maggiori dettagli.
L'algoritmo è il seguente:
G = Adjacent Matrix of the Network
Initialize:
A_1 = shortest-path from source to destination
Glocal ← Local copy of G
for k = 2 → K do
for i = 1 → [len(A_(k−1)) − 1] do
Current Node ← A_(k−1) [i]
Ri ← Sub-path (root) from source till current node in A_(k−1)
for j = 1 → k − 1 do
Rj ← Sub-path (root) from source till current node in A_j
if Ri == Rj then
Next Node ← Aj [i+1]
Glocal(Current Node, Next Node) ← infinity
Current Node ← unreachable
end if
end for
Si ← Shortest-path from current node till destination
Bi ← Ri + Si
end for
A_k ← Shortest-path amongst all paths in B
Restore original graph: Glocal ← Local copy of G
end for
Purtroppo, non ho usato la propria Eppstein come algoritmo di Yen era ottimale per il mio problema.
Spero che questo aiuti. Saluti.
=====
Edit:
prega di dare un'occhiata al wikipedia entry pure. Ha un bell'esempio.
=====
Edit:
ho trovato alcune implementazioni in C. I collegamenti sono i seguenti:
Eppstein implementation e Loading Graph for Eppstein.
Se siete interessati, c'è un lazy version di Eppstein.Il link è il seguente:
Lazy Eppstein by Jimenez and Marzal
=====
Edit:
Solo un altro link. Questo contiene diverse implementazioni (C/C++).
=====
Edit:
ho trovato un good explanation dell'algoritmo di Eppstein.
- 1. Algoritmo per trovare i percorsi K in alto nel grafico, senza vertici comuni, pesi negativi?
- 2. K-means ++ algoritmo
- 3. algoritmo incrementale k-core
- 4. Algoritmo per la k-Fibonacci
- 5. Un algoritmo avido per risorse limitate K
- 6. Trovare i k-percorsi più brevi?
- 7. algoritmo per enumerare tutti i possibili percorsi
- 8. dinamica programmazione algoritmo N, K problema
- 9. Algoritmo di individuazione dei percorsi per i treni
- 10. Rilevamento anomalie con algoritmo k-means
- 11. k-shortest (alternativa) algoritmo del percorso, implementazioni java
- 12. problema algoritmo di selezione
- 13. Algoritmo di riempimento poligono
- 14. Algoritmo molto veloce per tutti i percorsi tra due nodi
- 15. Efficiente algoritmo di individuazione dei percorsi che evita gli zigzag
- 16. Modifica algoritmo di distanza
- 17. Algoritmo di trasporto pubblico bus
- 18. Algoritmo per l'attraversamento di alberi
- 19. Algoritmo per trovare tutti i percorsi in una griglia NxN
- 20. Algoritmo di disegno della linea subpixel preciso (algoritmo di rasterizzazione)
- 21. Algoritmo: trasformazione della distanza - qualsiasi algoritmo più veloce?
- 22. Algoritmo di triangolazione più veloce con fori?
- 23. più vicino coppia di punti algoritmo
- 24. Algoritmo PCA e KNN
- 25. Algoritmo di programmazione parallela più utile?
- 26. zaino algoritmo di variazione
- 27. Algoritmo di antialiasing Mathematica
- 28. Algoritmo intervista di puzzle
- 29. Algoritmo di distribuzione bilanciato
- 30. algoritmo di oggetti circostanti
di quali documenti originali? cosa hai già provato? qual è il tuo vero problema? – Karussell
Risolvono problemi leggermente diversi: l'algoritmo di Eppstein consente ai percorsi di avere vertici ripetuti (loop), mentre quelli di Yen no, vedere http://11011110.livejournal.com/342826.html. – Valentas