Devo aiutare a convalidare se capisco quando usare Dijkstra e quando BFS sono corretti.
Il mio modo di intendere BFS e Dijkstra, quando usare cosa, sono corretto?
Come la vedo io. Dato un grafico, che può essere immaginato come albero N-ary, dove i bordi non hanno un valore speciale (tutti sono della stessa lunghezza) e vogliamo solo passare dal nodo A al nodo B.
- Per risolvere questo problema, è possibile utilizzare un BFS
- Anche Dijkstra può essere usato, ma sta sprecando memoria, spazio e OP
Tuttavia, viene fornito un grafico, in cui i bordi hanno valori diversi:
Immagina tre nodi: A, B, C. La lunghezza da A a B è 1 La lunghezza da A a B è 5 La lunghezza da A a C è 100 La lunghezza da B a C è 1
Quindi, sì, puoi avere più percorsi dal nodo A al B. Siamo interessati al percorso più breve da A a C.
C'è un metodo NO per risolvere questo problema usando un semplice BFS, ho ragione ...? Devo usare Dijkstra ...
Dal lato dell'implementazione, Dijskstra può essere inteso come BFS, ma con una differenza che stiamo avendo un contenitore BIANCO da cui prendiamo sempre il nodo con il percorso tmp più corto ... (coda di priorità)? Considerando che in BFS normale possiamo usare WHITE una coda o un deque ..? Quindi l'unica differenza di Dijsktra è la coda di priorità ... (e forse alcune piccole cose in algo, ho scritto sia BFS che Dijkstra, non posso richiamare dalla testa)
Riguardo alle complessità, su wiki non ne sono sicuro. Per BFS dovrebbe essere O (a) + O (b)
- a = Numero di nodi
- b = numero di bordi
Ma c'è anche il backtrack ...? Su wiki è proprio quello che viene mostrato ... quindi è incompleto ...? anche il backtracking fa parte dell'algoritmo ... fondamentale. Posso tornare indietro a n * log (n), n è il numero di elementi che ho salvato durante l'attraversamento ...
Per Dijkstra .... O (a * a) + O (b * b) ...? Perché posso visitarne due volte ...? più O (a) per impostare le distanze di ciascun nodo, più O (n * lungo (n)) per il backtrack ...?