L'algoritmo di Dijkstra: l'algoritmo più famoso di pathfinding
2 min di lettura
Marco Angioni

Introduzione
L'algoritmo di Dijkstra è uno degli algoritmi più importanti nell'informatica teorica e viene utilizzato per trovare il percorso più breve tra due punti all'interno di una rete. È alla base di molti sistemi moderni, dai navigatori GPS ai protocolli di comunicazione.
Il problema dei percorsi minimi
Molti problemi informatici possono essere rappresentati attraverso un grafo, una struttura composta da:
- Nodi (vertici): rappresentano elementi o punti di una rete.
- Archi (collegamenti): rappresentano le connessioni tra i nodi.
- Pesi: indicano il costo di attraversamento di un collegamento, come distanza, tempo o consumo di risorse.
L'obiettivo è trovare il percorso con il costo totale più basso tra un nodo di partenza e uno di destinazione.
Come funziona l'algoritmo
L'algoritmo di Dijkstra, ideato nel 1956 dal matematico olandese Edsger Dijkstra, utilizza un approccio chiamato scelta greedy.
Il funzionamento generale è:
- Assegnare distanza 0 al nodo di partenza e infinito agli altri nodi.
- Selezionare il nodo non ancora visitato con la distanza più piccola.
- Aggiornare le distanze dei nodi collegati verificando se esiste un percorso più conveniente.
- Ripetere il processo fino al raggiungimento della destinazione.
Alla fine dell'elaborazione, l'algoritmo produce il percorso ottimale.
Applicazioni pratiche
L'algoritmo viene utilizzato in numerosi ambiti:
- Sistemi di navigazione stradale.
- Reti informatiche per l'instradamento dei dati.
- Giochi digitali per il movimento dei personaggi.
- Analisi di reti sociali e collegamenti tra utenti.
Complessità e limiti
La velocità dell'algoritmo dipende dalla struttura del grafo e dall'implementazione utilizzata. Con strutture dati efficienti come le code di priorità, può raggiungere una complessità di circa O((V + E) log V), dove V rappresenta il numero di nodi ed E il numero di collegamenti.
Un limite importante è che Dijkstra non funziona correttamente con archi che hanno pesi negativi. In questi casi vengono utilizzati altri algoritmi, come quello di Bellman-Ford.
Curiosità
- Dijkstra sviluppò l'algoritmo in circa venti minuti come dimostrazione delle capacità dei computer dell'epoca.
- Il suo lavoro ha influenzato profondamente la progettazione dei linguaggi di programmazione e dei sistemi informatici moderni.
- Ancora oggi è uno degli argomenti fondamentali nei corsi universitari di informatica.
Dispense: Wikipedia.
