Docsity
Docsity

Prepara i tuoi esami
Prepara i tuoi esami

Studia grazie alle numerose risorse presenti su Docsity


Ottieni i punti per scaricare
Ottieni i punti per scaricare

Guadagna punti aiutando altri studenti oppure acquistali con un piano Premium


Guide e consigli
Guide e consigli


Esercizi Algoritmi 5 parte, Esercizi di Progettazione e analisi di algoritmi

5 parte degli esercizi di algoritmi, anno 2019

Tipologia: Esercizi

2018/2019

Caricato il 02/12/2019

TonyLodos
TonyLodos 🇮🇹

5

(4)

11 documenti

1 / 9

Toggle sidebar

Questa pagina non è visibile nell’anteprima

Non perderti parti importanti!

bg1
Progettazione di Algoritmi Anno Accademico 2018–2019
Esercizi
Ugo Vaccaro
Esercizi su Grafi: Parte Seconda
N.B. Si ricorda che ogni algoritmo v`a accompagnato da una argomentazione sul perch`e calcola
correttamente l’output e da un’analisi della sua complessit`a di tempo. Inoltre, si possono usare algo-
ritmi visti a lezione (come BFS, DFS, etc.) senza necessariamente riportare il relativo pseudocodice,
purch`e lo si menzioni esplicitamente. In generale, di ogni algoritmo `e preferibile presentare il relativo
pseudocodice. Tuttavia, anche una sola descrizione a parole dell’idea dell’algoritmo (purch`e precisa
e corretta) verr`a accettata all’esame.
1. Esercizio: Si presenti l’algoritmo di Dijkstra per il calcolo dei cammini minimi in un grafo, si
argomenti la sua correttezza e se ne valuti la sua complessit`a di tempo.
2. Esercizio: Si esegua l’algoritmo di Dijkstra per il calcolo dei cammini minimi dal nodo s
sul seguente grafo. Si esplicitino in dettaglio i passi che l’algoritmo esegue (ovvero, NON
`e sufficiente riportare semplicemente l’albero dei cammini minimi risultanti dall’esecuzione
dell’algoritmo).
s
t
y
x
z
10
5
2
3
1
9
2
7
4
6
3. Esercizio: Sia G= (V, E ) un grafo diretto, con lunghezze (e)>0 per ogni arco eE. Si
progetti e si analizzi (e si argomenti la correttezza) un algoritmo che presi in input un vertice
sVed un arco (u, v)E, determini: 1. se tra tutti i cammini di lunghezza minima da sa
vne esiste almeno uno che usi l’arco (u, v); 2. se tra tutti i cammini di lunghezza minima da
savne esiste almeno uno che non usi l’arco (u, v).
1
pf3
pf4
pf5
pf8
pf9

Anteprima parziale del testo

Scarica Esercizi Algoritmi 5 parte e più Esercizi in PDF di Progettazione e analisi di algoritmi solo su Docsity!

Progettazione di Algoritmi Anno Accademico 2018–

Esercizi

Ugo Vaccaro

Esercizi su Grafi: Parte Seconda

N.B. Si ricorda che ogni algoritmo va accompagnato da una argomentazione sul perche calcola correttamente l’output e da un’analisi della sua complessita di tempo. Inoltre, si possono usare algo- ritmi visti a lezione (come BFS, DFS, etc.) senza necessariamente riportare il relativo pseudocodice, purche lo si menzioni esplicitamente. In generale, di ogni algoritmo e preferibile presentare il relativo pseudocodice. Tuttavia, anche una sola descrizione a parole dell’idea dell’algoritmo (purche precisa e corretta) verr`a accettata all’esame.

  1. Esercizio: Si presenti l’algoritmo di Dijkstra per il calcolo dei cammini minimi in un grafo, si argomenti la sua correttezza e se ne valuti la sua complessit`a di tempo.
  1. Esercizio: Si esegua l’algoritmo di Dijkstra per il calcolo dei cammini minimi dal nodo s sul seguente grafo. Si esplicitino in dettaglio i passi che l’algoritmo esegue (ovvero, NON `e sufficiente riportare semplicemente l’albero dei cammini minimi risultanti dall’esecuzione dell’algoritmo).

s

t

y

x

z

  1. Esercizio: Sia G = (V, E) un grafo diretto, con lunghezze ℓ(e) > 0 per ogni arco e ∈ E. Si progetti e si analizzi (e si argomenti la correttezza) un algoritmo che presi in input un vertice s ∈ V ed un arco (u, v) ∈ E, determini: 1. se tra tutti i cammini di lunghezza minima da s a v ne esiste almeno uno che usi l’arco (u, v); 2. se tra tutti i cammini di lunghezza minima da s a v ne esiste almeno uno che non usi l’arco (u, v).
  1. Esercizio: Dato un grafo orientato G = (V, E), con lunghezze ℓ(e) > 0 per per ogni arco e ∈ E, e due nodi v, t ∈ V.

(a) Si proponga un algoritmo che determini, oltre ad un cammino minimo p 1 da v a t che supponiamo essere p 1 = (v, s 1 , ...sn, t), un secondo cammino p 2 che sia il cammino di lunghezza minima tra quelli che congiungono v con t e non contengono l’arco (sn, t). (b) Si provi la correttezza e si valuti la complessit`a dell’algoritmo proposto. (c) Si proponga un algoritmo che determini, oltre ad un cammino minimo p 1 da v a t, un secondo cammino p 2 che sia il cammino di lunghezza minima tra tutti i cammini che congiungono v con t e sono distinti da p 1.

  1. Esercizio: Sia G = (V, E) un grafo diretto in cui ad ogni nodo u ∈ V e associato un peso w(u) > 0. Descrivere un algoritmo per calcolare i cammini di peso minimi da un nodo sorgente s ∈ V a tutti i nodi v ∈ V. In questa situazione, il peso di un camminoe definito come la somma dei pesi dei nodi che appaiono nel cammino. (Sugg.: si riduca il problema a quello di calcolare i cammini di peso minimi in un opportuno grafo con pesi su archi).
  1. Esercizio: Descrivere l’algoritmo di Prim per la costruzione di un MST e provarne con precisione la correttezza.
  1. Esercizio: Descrivere l’algoritmo di Kruskal per la costruzione di un MST e provarne con precisione la correttezza.
  1. Esercizio: Dato il grafo rappresentato in figura, calcolare un MST di esso applicando l’algoritmo di Prim a partire dal nodo I. Si descrivano con precisione le computazioni effettuate dall’algoritmo passo dopo passo.

I

A M

E

F

H

G J

L B

C

D

K

10 8

4

6

5

2

8

20 4 5 4

3

6

7

5

8

(^10 )

4

6

J

K

M

A

B

E

C G

F I

D

H

L

4

2

5

6

5

1

2 5

2

1

3 6 3

(^6 )

4 6

4

5

3

  1. Esercizio: Si proponga un algoritmo che, dato in input un grafo non non orientato G = (V, E), pesi w(e) per ogni arco e ∈ E, ed un arco (u, v) ∈ E, determini l’esistenza o meno di un MST per G non contenente l’arco (u, v). Si motivi la correttezza e si calcoli la complessit‘a dell’ algoritmo proposto. Si riconsiderino i punti precedenti nel caso in cui si voglia determinare l’esistenza di un MST per il grafo G contenente l’arco (u, v).
  1. Esercizio: Sia G = (V, E) un grafo non orientato e pesato, con archi di costo c(e), per ogni e ∈ E.

(a) Si descriva brevemente un algoritmo efficiente (per esempio tra quelli visti a lezione) che determini un Minimum Spanning Tree per G e se ne valuti la complessita. (b) Si provi o si refuti la seguente proprieta: dato un Minimum Spanning Tree per G questo contiene almeno un arco tra quelli aventi peso minimo in G. (c) Si provi o si refuti la seguente propriet`a: dato un Minimum Spanning Tree per G questo contiene un cammino minimo per ogni coppia di nodi in G.

  1. Esercizio: Sia G = (V, E) un grafo non orientato e pesato, con archi di costo c(e), per ogni e ∈ E. Si provi la seguente affermazione: sia ∅ 6 = S ⊂ V un sottoinsieme dei nodi, e sia e = (u, v) l’arco di costo minimo con un estremo in S e l’altro in V − S. Allora ogni MST contiene l’arco e.
  1. Esercizio: Si descriva l’algoritmo di Ford e Fulkerson per il calcolo del massimi flusso in una rete di flusso e si analizzi in dettaglio la relativa complessit`a.
  1. Esercizio: Si consideri il seguente problema:

Input: n persone ed n job da eseguire E dato un grafo direttoG = (V, E) con archi che vanno solo da persone a job, in cui un arco dalla persona p al job j vuol dire che potenzialmente la persona p potrebbe eseguire il job j (se l’arco (p, j) non c’e vuol dire che la persona p non puo eseguire il job j). Sono dati i seguenti vincoli al problema: Ciascuna persona puo essere assegnata ad esattamente un job Ciascun job puo essere assegnato ad esattamente una sola persona Output: Trovare una assegnazione degli n job alle n persone che soddisfi i vincoli al problema (o dichiarare che cio non `e possibile, se una tale assegnazione non esiste). Suggerimento: si proceda in maniera analoga a come fatto per risolvere il problema del Massimo Matching.

  1. Esercizio: Una scuola vuole organizzare un ballo di fine anno. Ogni coppia di studenti composta da un ragazzo ed una ragazza che intendono danzare insieme devono registrarsi (altrimenti non possono danzare insieme). I regolamenti della scuola impongono che ogni data coppia non possa danzare insieme piu di 3 volte. In piu, ogni studente non puo danzare piu di 10 volte in totale. Il problema `e di massimizzare il numero di danze in totale. Formalizzare con precisione il problema come un problema di massimo flusso.

  1. Esercizio: Data la seguente situazione nel campionato di baseball, si determini se la squadra di Detroit pu`o ancora terminare con il maggior numero di vittorie nel girone, usando le tecniche di flusso viste a lezione. w(i) g(i) g(i, j) squadra vinte da giocare NYY BAL BOS TOR DET New York Yankees 75 28 3 8 7 3 Boston Orioles 71 28 3 2 7 4 Boston Red Sox 69 27 8 2 0 0 Toronto Blue Jays 63 27 7 7 0 0 Detroi Lions 49 27 3 4 0 0 ⋄
  2. Esercizio: Si esegua l’algoritmo di Bellman-Ford per il calcolo del cammino minimo da s a t nel grafo di sotto riportato. Si descrivano con precisione le computazioni effettuate dall’algoritmo passo dopo passo.

s

t

y

x

z

  1. Esercizio: Siano f un flusso e (A, B) un taglio in una rete di flusso G con sorgente s e desti- nazione t. Si provi il seguente risultato: Il valore del flusso v(f ) e al piu pari alla capacit`a c(A, B) del taglio
  1. Esercizio: Un gestore di rete deve collegare il nodo s e il nodo t della rete in figura. Per motivi di sicurezza i due nodi devono essere collegati da due cammini disgiunti sugli archi. Formalizzare il problema come problema di flusso e risolverlo, usando le tecniche di flusso, per l’esempio in figura. E’ possibile avere tre cammini disgiunti tra s e t? Motivare la risposta.

s

t

  1. Esercizio: Applicare l’algoritmo di Ford e Fulkerson alla rete di flusso di sotto riportata. Ad ogni passo si riporti il cammino aumentante scelto e si calcoli il valore del massimo flusso ottenuto da s a t. Indicare infine il taglio di capacit`a minima.

s

t

  1. Esercizio: Si consideri la rete di flusso in figura, in cui il primo numero su ogni arco denota la capacita dell’arco, ed il secondo denota una assegnazione di flusso gia su di esso effettuato. Qual e il valore di questo flusso gia assegnato? Di quanto pu`o essere ancora aumentato per

arrivare ad un flusso di valore massimo? Giustificare le risposte.

s

5 t

  1. Esercizio: Applicare l’algoritmo di Ford e Fulkerson alla rete di flusso di sotto riportata. Ad ogni passo si riporti il cammino aumentante scelto e si calcoli il valore del massimo flusso ottenuto da s a t. Indicare infine il taglio di capacit`a minima.

3

2

s

8 9 t

9

  1. Esercizio: Applicare l’algoritmo di Ford e Fulkerson alla rete di flusso di sotto riportata. Ad ogni passo si riporti il cammino aumentante scelto e si calcoli il valore del massimo flusso ottenuto da s a t. Indicare infine il taglio di capacit`a minima. s

t

  1. Esercizio: Si formuli il problema del Massimo Matching in termini di flusso in reti e si presenti la relativa soluzione.