Algoritmi
Ricerca in ampiezza
Basato su FIFO
Ricerca in profondità
Basato su LIFO
Ordinamento topologico
Utile per verificare l'aciclicità
Algoritmi per determinare l'albero dei cammini minimi
- Algoritmo per reti acicliche (se non si associa) O(cm)
- Algoritmo di Dijkstra (se si associa) O(n2)
- Algoritmo di Bellman-Ford (o reti con archi negativi) O(mn)
Algoritmo per determinare il massimo flusso / minimo taglio
- Algoritmo di Ford e Fulkerson (su rete originaria)
- Algoritmo di cammini aumentanti (su rete residuale)
Algoritmo per determinare il minimo albero ricoprente
- Algoritmo di Prim-Dijkstra
- Algoritmo di Kruskal [se ci viene fornita la lista degli archi in ordine crescente]
Condizioni di ottimalità
- n-1 sui bagli fondamentali
- m-(n-1) sui cicli fondamentali
Soluzione del grafo pesato
Per il grafo G = (V, E) pesato sugli spigoli riportato nella seguente figura determinare un albero ricoprente di peso minimo con l'algoritmo di Prim. Certificare l'ottimalità della soluzione.
Tabella dell'algoritmo
| JEV | 1o ITER | 2o ITER | 3o ITER | 4o ITER | 5o ITER | 6o ITER | 7o ITER |
|---|---|---|---|---|---|---|---|
| a | x | * | |||||
| b | 23; a | 8; e | * | ||||
| c | 22; e | * | |||||
| d | 15; e | 14; g | * | ||||
| e | 20; a | x | * | ||||
| f | 36; b | 24; e | * | ||||
| g | 10; e | * | |||||
| h | 18; e | * |
Per risolvere l'albero ricoprente, verifichiamo la tabella da destra a sinistra, vedendo il predecessore di ogni vertice selezionato z(Ta*) = 116
Condizioni di ottimalità
Per le condizioni di ottimalità abbiamo 2 possibilità:
- Usare la condizione di ottimalità sui tagli: n-1 condizioni
- Usare la condizione di ottimalità sui cicli: m-(n-1) condizioni
Applichiamo quindi la condizione di ottimalità sui cicli:
- Spigolo (a,b) Cab ≥ umax (Cae, Cbe) -> 23 ≥ umax(20,13) OK
- Spigolo (b,c) Cbc ≥ umax (Cbe, Cc) -> 29 ≥ um