Corso di Algoritmi e Strutture Dati—Modulo 2 (M

Corso di Algoritmi e Strutture Dati—Modulo 2 (M. Marzolla)
Esercizi 14/5/2015
Esercizio 1. Ricordiamo che in un grafo non orientato e non pesato, la distanza tra due nodi s e v è il minimo
numero di archi che è necessario attraversare per raggiungere v partendo da s (o viceversa, dato che il grafo è
non orientato). Scrivere un algoritmo efficiente che, dato in input un grafo non orientato G = (V, E) e un
nodo sorgente s, determina per ogni nodo v il numero di cammini distinti di lunghezza minima che
collegano v con s. Due cammini si considerano diversi se differiscono per almeno per un nodo. Si noti che il
numero di cammini minimi distinti che collega s con se stesso è uno (il cammino composto dal nodo s).
Applicare l'algoritmo al grafo seguente (è già indicata la soluzione per alcuni nodi).
s
1
1
2
4
6
1
2
2
2
1
2
4
Esercizio 2. Si consideri un grafo non orientato pesato e connesso G = (V, E, w) in cui tutti gli archi abbiano
esattamente lo stesso peso p > 0. Descrivere un algoritmo efficiente che, dato in input il grafo G e il peso p
di tutti i suoi archi, determini un Minimum Spanning Tree di G. Determinare il costo asintotico
dell'algoritmo proposto.
Esercizio 3. Proporre un algoritmo efficiente per calcolare un Maximum Spanning Tree di un grafo non
orientato pesato connesso G = (V, E, w), in cui ad ogni arco e è associato un peso reale w(e) arbitrario. Un
Maximum Spanning Tree è un albero di copertura di peso totale massimo.
Esercizio 4. Progettare una struttura dati per realizzare una pila (stack) di valori reali che, oltre alle normali
operazioni PUSH() (inserisci un nuovo valore in cima allo stack), POP() (estrai il valore in cima allo stack) e
TOP() (restituisce il valore in cima allo stack senza rimuoverlo), supporti anche una operazione MAX() che
restituisce il valore massimo tra tutti quelli contenuti in quel momento nella pila; invocare l'operazione MAX()
su uno stack vuoto produce un errore. Tutte le operazioni (inclusa MAX() ) devono richiedere tempo O(1).