Algoritmo di Dijkstra: differenze tra le versioni

Contenuto cancellato Contenuto aggiunto
Soulbot (discussione | contributi)
m robot Aggiungo: no:Dijkstras algoritme
ZeroBot (discussione | contributi)
m fix vari
Riga 1:
L<nowiki>'</nowiki>'''algoritmo di Dijkstra''' deve il suo nome all'informatico [[Edsger Dijkstra]] e permette di trovare i [[cammino minimo|cammini minimi]] (o Shortest Paths, SP) in un [[grafo]] ciclico orientato con pesi non negativi sugli archi: in particolare l'algoritmo può essere utilizzato parzialmente per trovare il cammino minimo che unisce due nodi del grafo, totalmente per trovare quelli che uniscono un nodo d'origine a tutti gli altri nodi o più volte per trovare tutti i cammini minimi da ogni nodo ad ogni altro nodo. Tale algoritmo trova applicazione in molteplici contesti. Per esempio permette, dato un grafo che rappresenta un'ipotetica "mappa" di condotte di approvvigionamento idrico di una città, di calcolare qual è il cammino minimo, e quindi ottimizzare la realizzazione della rete idrica. Esempio analogo può essere fatto considerando il "problema" di trovare il collegamento meno dispendioso, in termini di potenza dissipata, nella realizzazione di un circuito elettrico.
Nell'applicare tale algoritmo ai vari campi dello scibile umano, e'è sicuramente utile affidarsi ad un calcolatore opportunamente istruito con l'algoritmo stesso.
 
==Algoritmo matematico==
Riga 23:
Alla base di questi problemi c’è lo scopo di trovare il percorso minimo (più corto, più veloce, più economico…) tra due punti, uno di partenza e uno di arrivo.
Con il metodo che vedremo è possibile ottenere non solo il percorso minimo tra un punto di partenza e uno di arrivo ma il percorso minimo tra un punto di partenza e tutti gli altri punti della rete.
Come per praticamente tutti i problemi riguardanti le reti la cosa migliore è fare una schematizzazione della situazione in cui ci troviamo per risolvere l’eserciziol'esercizio più agevolmente ed avere sempre a disposizione i dati necessari.
Una buona schematizzazione per i problemi di percorso minimo deve includere tutti i possibili collegamenti tra i nodi (ed i relativi costi) e deve essere fissato un nodo di partenza.
 
Riga 30:
Dobbiamo ora assegnare ad ogni nodo un valore, che chiameremo “potenziale”, seguendo alcune regole:
<div style="float:center; width:80%; padding:15px; background: #f5f8ff; border: 1px solid blue; margin-left:8px; margin-right:8px;margin-bottom:15px; text-align:left">
*Ogni nodo ha, all’inizioall'inizio potenziale <math>+ \infty </math> (che indichiamo con “inf”);
*Il nodo di partenza (in questo caso “casa”) ha potenziale 0 (ovvero dista zero da se stesso);
*Ogni volta si sceglie il nodo con potenziale minore e lo si rende definitivo (colorando il potenziale di rosso) e si aggiornano i nodi adiacenti;
Riga 40:
Vediamo in pratica come si risolve questo esercizio. Questa è la rete in cui sono indicati anche i potenziali:
[[Immagine: Ricerca_operativa_percorso_minimo_02.gif|center]]
Seguendo le regole appena fissate consideriamo il nodo con potenziale minore (“casa”) e lo rendiamo definitivo (colorandolo di rosso) ed aggiorniamo tutti i nodi adiacenti sommando l’attualel'attuale valore del potenziale (ovvero zero) al costo del percorso. Aggiorniamo i potenziali perché avevamo, nel caso di A, potenziale infinito mentre ora abbiamo potenziale 2. Ricordando che il potenziale minore è sempre preferibile. Vediamo come si è aggiornata la rete:
[[Immagine: Ricerca_operativa_percorso_minimo_03.gif|center]]
Bisogna ora considerare il nodo non definitivo (ovvero quelli scritti in nero) con potenziale minore (il nodo A). Lo si rende definitivo e si aggiornano i potenziali dei nodi adiacenti B e C. Indichiamo con una freccia da dove proviene il potenziale dei nodi resi definitivi.
Riga 53:
Resta da considerare il nodo E ed aggiornare “ufficio”.
[[Immagine: Ricerca_operativa_percorso_minimo_08.gif|center]]
Seguendo all’indietroall'indietro le frecce si ottiene il percorso minimo che dista casa da ufficio che dista (come indicato dal potenziale) “10”.
[[Immagine: Ricerca_operativa_percorso_minimo_09.gif|center]]
Bisogna notare come questo algoritmo ci dia non solo la distanza minima tra il punto di partenza e quello di arrivo ma la distanza minima di tutti nodi da quello di partenza.