mirror of
https://github.com/Steffo99/appunti-magistrali.git
synced 2024-11-22 10:44:17 +00:00
22 lines
1.3 KiB
Markdown
22 lines
1.3 KiB
Markdown
|
# Percorso più breve
|
||
|
|
||
|
Trovare il _percorso più breve_ (o _cammino minimo_) tra due nodi di un **grafo pesato** è un problema frequente nell'informatica; per questo, sono stati sviluppati [numerosi algoritmi](https://en.wikipedia.org/wiki/Shortest_path_problem) per risolverlo.
|
||
|
|
||
|
> Ad esempio, il pathfinding dei nemici nei videogiochi, oppure Google Maps!
|
||
|
|
||
|
## Percorso più breve da una sorgente singola
|
||
|
|
||
|
Una sottocategoria del problema del percorso più breve è il caso in cui ci interessa sapere i percorsi più brevi che **partono da uno specifico nodo del grafo**: è detto problema del _percorso più breve da una sorgente singola_, o _single-source shortest path_.
|
||
|
|
||
|
Si può notare che se il grafo contiene **costi negativi** allora è possibile che il percorso più breve non esista, in quanto diventa possibile la comparsa di **cicli di costo infinitamente negativo**.
|
||
|
|
||
|
Possiamo notare che, se il percorso più breve tra `A` e `D` è `A-B-C-D`, allora il cammino minimo tra `B` e `D` passerà obbligatoriamente per `C` (`B-C-D`).
|
||
|
Diremo più avanti che il percorso più breve ha una **sottostruttura ottimale**.
|
||
|
|
||
|
### Esempi
|
||
|
|
||
|
Alcuni algoritmi che trovano il percorso più breve sono:
|
||
|
- L'_Algoritmo di Dijkstra_
|
||
|
- L'_Algoritmo di Bellman-Ford_
|
||
|
- La [_ricerca A*_](https://en.wikipedia.org/wiki/A*_search_algorithm)
|