Prova di Algoritmi e Strutture Dati II
Non si possono consultare né appunti né testi
I appello
13 Giugno 2006
Esercizio 1. (punti 12) Si consideri il problema dello Zaino intero senza ripetizioni, con uno
zaino di capacità K, n oggetti con profitti {p1 , p2 , . . . , pn } e con volumi {v1 , v2 , . . . , vn }, ove
pi , vi ∈ R+ for 1 ≤ i ≤ n. Si progettino per risolvere questo problema:
1. una procedura polinomiale non deterministica,
2. una procedura deterministica enumerativa.
Esercizio 2. (punti 12) Sia G = (V, E) un grafo orientato pesato con funzione peso w : E →
{0, . . . , W }, ove W è un intero non negativo. Modificare l’algoritmo di Dijkstra per calcolare
in tempo O(W V + E) i cammini minimi da una data sorgente s. Precisamente:
1. Descrivere a parole la struttura dell’algoritmo di risoluzione e spiegare le strutture dati
utilizzate
2. Dare una realizzazione dell’algoritmo in pseudocodice
3. Valutare la complessità in tempo dell’algoritmo motivando il risultato indicato.
Esercizio 3. (punti 8) Data la rete di flusso G = (V, E), con V = {s, 1, 2, 3, t}, E = {(s, 1; 1), (1, t; 2),
(s, 2; 2), (s, 3; 1), (2, 3; 3), (3, t; 2)} ove la terna (u, v; i) rappresenta l’arco da u a v con capacità
i, si calcoli il flusso massimo. Spiegare come si è giunti al risultato e quale osservazione garantisce di aver trovato un flusso massimo.