• Non ci sono risultati.

Corso di Algoritmi e Strutture Dati—Modulo 2 Esercizi su grafi (Spanning Trees) Esercizio 1.

N/A
N/A
Protected

Academic year: 2021

Condividi "Corso di Algoritmi e Strutture Dati—Modulo 2 Esercizi su grafi (Spanning Trees) Esercizio 1."

Copied!
1
0
0

Testo completo

(1)

Corso di Algoritmi e Strutture Dati—Modulo 2

Esercizi su grafi (Spanning Trees)

Esercizio 1. Si consideri un grafo non orientato connesso G = (V, E) i cui archi abbiano tutti lo stesso peso w > 0. Descrivere un algoritmo efficiente che, dato in input il grafo G e il peso w di tutti i suoi archi, determini un Minimum Spanning Tree di G. Determinare il costo computazionale dell'algoritmo proposto.

Soluzione. Dato che G è connesso, un qualunque spanning tree di G ha n nodi e n - 1 archi, e quindi peso w(n - 1). Di conseguenza, ogni spanning tree di G è anche un minimum spanning tree. Un modo efficiente per trovarne uno è di scegliere un qualsiasi nodo e iniziare da lì una visita in ampiezza o profondità. L'albero risultante sarà un MST per G. Il costo dell'algoritmo è O(m + n), nettamente inferiore al costo di calcolare un MST con l'algoritmo di Kruskal o Prim.

Esercizio 2. Proporre un algoritmo efficiente per calcolare un Maximum Spanning Tree di un grafo non orientato pesato G = (V, E, w), in cui ad ogni arco e è associato un peso reale w(e) non necessariamente positivo (un Maximum Spanning Tree è un albero di copertura di peso totale massimo).

Soluzione. Il problema puo' essere risolto moltiplicando tutti i pesi per -1, e calcolando il Minimum Spanning Tree del grafo risultante utilizzando, ad esempio, l'algoritmo di Kruskal oppure quello di Prim. In maniera più diretta, possiamo applicare l'algoritmo di Kruskal considerando però gli archi in ordine decrescente di peso (si inizia dall'arco più pesante per terminare con quello più leggero, anziché il contrario come richiesto per il calcolo di un minimum spanning tree)

Esercizio 3. Consideriamo un grafo non orientato, connesso e pesato G = (V, E, w). Mostrare, fornendo un controesempio, che non è sempre possibile costruire un MST contenente un arco e dato.

Soluzione. E' facile rendersi conto che nel grafo seguente

l'unico MST è quello che contiene gli archi evidenziati aventi peso rispettivamente 1, 2, 3; qualsiasi spanning tree che contenga l'arco (A, D) non sarà di peso minimo.

A

B

D

C

1

2 3 4

Riferimenti

Documenti correlati

All vertices not in the spanning tree form a min Heap Q based on the minimum weight of any edge connecting vertex v and the tree. Value

– Alan Bertossi, Alberto Montresor, Algoritmi e strutture di dati Terza Edizione, 2014, Città Studi,

● Specificate che il vostro messaggio è relativo al corso di Algoritmi e Strutture Dati.. ● Ricordarsi che la posta elettronica è un mezzo di

Scrivere un algoritmo ricorsivo di tipo divide-et-impera che, dato un array A[1..n] di valori reali, restituisce true se e solo se A è ordinato in senso non decrescente, cioè se A[1]

È possibile risolvere il problema con un semplice algoritmo greedy: si inseriscono in ciascuna riga le parole, nell'ordine indicato, finché non si supera la lunghezza

L'algoritmo di visita in ampiezza (BFS) può essere utilizzato per individuare un cammino minimo tra un nodo sorgente s e ciascun nodo raggiungibile da s; possiamo però estenderlo

Mostrare il risultato finale dell'algoritmo di Dijkstra, inserendo all'interno di ogni nodo la distanza minima da s, ed evidenziando opportunamente (ad esempio, cerchiando il

Arrivato al separatore, si sposta ancora a destra e passa nello stato skip-2n skip-2n: la macchina si trova sul primo “1” del numero a destra del separatore (quello che alla fine del