1 Esercizio Supponiamo che il grafo G abbia più alberi di connessione minimi. Mostrare che due...

39
1 Esercizio Supponiamo che il grafo G abbia più alberi di connessione minimi. Mostrare che due alberi di connessione minimi T e T' non solo hanno lo stesso peso totale ma anche i pesi dei singoli archi sono a due a due gli stessi. In altre parole se w 1 w 2 ... w n è la lista ordinata dei pesi degli archi di T e w' 1 w' 2 ... w' n è la lista ordinata dei pesi degli archi di T' allora w i = w' i per ogni i. Esercizio 46

Transcript of 1 Esercizio Supponiamo che il grafo G abbia più alberi di connessione minimi. Mostrare che due...

Page 1: 1 Esercizio Supponiamo che il grafo G abbia più alberi di connessione minimi. Mostrare che due alberi di connessione minimi T e T' non solo hanno lo stesso.

1

Esercizio Supponiamo che il grafo G abbia più alberi di connessione minimi. Mostrare che due alberi di connessione minimiT e T' non solo hanno lo stesso peso totale ma anche i pesi dei singoli archi sono a due a due gli stessi. In altre parole se w1 w2 ... wn è la lista ordinata dei pesi degli archi di T e w'1 w'2 ... w'n è la lista ordinata dei pesi degli archi di T' allora wi = w'i per ogni i.

Esercizio 46

Page 2: 1 Esercizio Supponiamo che il grafo G abbia più alberi di connessione minimi. Mostrare che due alberi di connessione minimi T e T' non solo hanno lo stesso.

2

Soluzione w1 ≤ w2 ≤ ... wi ≤ ... wn

E(T) : a1 a2 ... ai ... an w’1 ≤ w’2 ≤ ... w’i ≤ ... w’n

E(T’) : a1 a2 ... ai ... an

Se ai=a’i per ogni i abbiamo finito.Altrimenti, sia i il primo indice per cui ai≠a’iMostriamo che wi=w’i.Supponiamo w’i>wiai T’∉ non puo’ stare prima di a’i perche sono tutti uguali non puo stare dopo a’i perche wi<w’iAllora T’ {ai} contiene un ciclo∪Questo ciclo contiene almeno un arco a’j non TNon puo’ essere w’j>wi altrimenti w(T’-a’j+ai)<w(T’)Quindi w’j≤wi a’j T. Assurdo∈

Esercizio 46

Page 3: 1 Esercizio Supponiamo che il grafo G abbia più alberi di connessione minimi. Mostrare che due alberi di connessione minimi T e T' non solo hanno lo stesso.

Simmetricamente non puo essere w’i<wi. Quindi wi=w’i

Costruiamo MST T” con

E(T”): a”1 a”2 ... a”i ... a”n tale che

w”j=w’j per ogni j e a”j=aj per ogni j=1..i

Due casi

1) wi=w’i e esiste a’j, con j>i, a’j=ai. Allora scambio a’i e a’j

2) wi=w’i e ai ∉ T’quindi se aggiungo ai a T’ ottengo un ciclo

tale ciclo ha un arck a’j che non e’ in T’

tale arco non puo avere peso <wi perche’ tutti gli archi di peso <wi sono in comune

Non puo’ avere peso >wi altrimenti scambiandoli otterrei un labero di peso inferiore

deve essere w’j=wi=w’i

scambio a’i e a’j e poi rimpiazzo a’i con ai

3

Page 4: 1 Esercizio Supponiamo che il grafo G abbia più alberi di connessione minimi. Mostrare che due alberi di connessione minimi T e T' non solo hanno lo stesso.

4

Cammini minimi

Sia G = (V,E) un grafo orientato ai cui archi è associato un peso w(uv).

Cammini minimi

k

i ii vvwpw1 1 )()(

Il peso di un cammino p = v0,v1,...,vk è la somma dei pesi degli archi che lo costituiscono.

Page 5: 1 Esercizio Supponiamo che il grafo G abbia più alberi di connessione minimi. Mostrare che due alberi di connessione minimi T e T' non solo hanno lo stesso.

5

altrimenti

da ileraggiungib se:)(min),(

uvvupwvu

p

Il peso di un cammino minimo da un vertice u ad un vertice v è definito nel seguente modo:

Un cammino minimo da u a v è un cammino p da u a v di peso w(p) = (u,v).

Nel problema dei cammini minimi viene appunto richiesto di calcolare i cammini minimi.

Page 6: 1 Esercizio Supponiamo che il grafo G abbia più alberi di connessione minimi. Mostrare che due alberi di connessione minimi T e T' non solo hanno lo stesso.

6

1) Cammini minimi da un’unica sorgente a tutti gli altri vertici.

2) Cammini minimi da ogni vertice ad un’unica destinazione.

3) Cammini minimi da un’unica sorgente ad un’unica destinazione.

4) Cammini minimi da ogni vertice ad ogni altro vertice.

Vi sono quattro versioni del problema:

Page 7: 1 Esercizio Supponiamo che il grafo G abbia più alberi di connessione minimi. Mostrare che due alberi di connessione minimi T e T' non solo hanno lo stesso.

7

Noi risolveremo la prima istanza.

La seconda istanza si risolve simmetricamente.

La terza si può risolvere usando la soluzione della prima (non si conosce a tuttora alcun algoritmo che risolva la terza istanza in tempo asintoticamente migliore della prima).

La quarta si può risolvere usando la soluzione della prima per ogni vertice del grafo ma in genere si può fare di meglio.

Page 8: 1 Esercizio Supponiamo che il grafo G abbia più alberi di connessione minimi. Mostrare che due alberi di connessione minimi T e T' non solo hanno lo stesso.

8

Archi di peso negativo. In alcuni casi il peso degli archi può anche essere negativo.

Questo non crea problemi nella ricerca dei cammini minimi da una sorgente s a meno che non ci siano cicli di peso negativo raggiungibili da s.

Se u è raggiungibile da s con un cammino che passa per un vertice v di un ciclo negativo allora esistono cammini da s a u di pesi sempre minori e il peso di un cammino minimo (s,u) non è definito.

In questo caso poniamo (s,u) = - .

Page 9: 1 Esercizio Supponiamo che il grafo G abbia più alberi di connessione minimi. Mostrare che due alberi di connessione minimi T e T' non solo hanno lo stesso.

9

5s

3

-

-

11

-1

0

-

-8

3

2

-6

3

-3

6

-4

2

53

Page 10: 1 Esercizio Supponiamo che il grafo G abbia più alberi di connessione minimi. Mostrare che due alberi di connessione minimi T e T' non solo hanno lo stesso.

10

Sottostruttura ottima dei cammini minimi.

Se il cammino p1k = v1,...,vk è minimo sono minimi anche tutti i sottocammini pij = vi,...,vj , 1≤ i ≤ j ≤ k.

Dimostrazione. Se esistesse un cammino qij di peso minore di pij sostituendo in p1k il sottocammino pij con qij si otterrebbe un cammino q1k da v1 a vk di peso minore di p1k. Impossibile se p1k è minimo.

Sottostruttura ottima

Page 11: 1 Esercizio Supponiamo che il grafo G abbia più alberi di connessione minimi. Mostrare che due alberi di connessione minimi T e T' non solo hanno lo stesso.

11

Cicli.

Abbiamo visto che un cammino minimo non può contenere un ciclo negativo.

Non può contenere neppure un ciclo positivo, altrimenti rimuovendo il ciclo otterremmo un cammino di peso inferiore.

Può contenere un ciclo di peso zero ma rimuovendo tale ciclo otteniamo ancora un cammino minimo.Possiamo quindi limitarci a considerare cammini minimi semplici. Quindi lunghezza n-1.

Page 12: 1 Esercizio Supponiamo che il grafo G abbia più alberi di connessione minimi. Mostrare che due alberi di connessione minimi T e T' non solo hanno lo stesso.

12

Rappresentazione dei cammini minimi.

In genere ci interessa calcolare non solo i pesi dei cammini minimi ma anche i cammini minimi stessi.

Siccome i cammini minimi hanno sottostruttura ottima possiamo rappresentarli con un albero dei cammini minimi G' = (V',E') che è un albero radicato in s con V' insieme dei vertici raggiungibili da s e tale che per ogni v V' l’unico cammino da s a v in G' è un cammino minimo in G.

Page 13: 1 Esercizio Supponiamo che il grafo G abbia più alberi di connessione minimi. Mostrare che due alberi di connessione minimi T e T' non solo hanno lo stesso.

13

Grafo dei predecessori.

Gli algoritmi per cammini minimi mantengono un campo π[v] che punta al vertice precedente in un cammino minimo da s a v.

I campi π[v] definiscono il sottografo dei predecessori:

uvEuvE

nilvVvsV

EVG

:

:

),(

alla fine dell’algoritmo Gπ deve essere un albero di cammini minimi.

Page 14: 1 Esercizio Supponiamo che il grafo G abbia più alberi di connessione minimi. Mostrare che due alberi di connessione minimi T e T' non solo hanno lo stesso.

14

Tecnica del rilassamento.

Gli algoritmi che studieremo usano la tecnica del rilassamento.

Aggiungiamo ad ogni vertice v del grafo un campo d[v] che durante tutta l’esecuzione dell’algoritmo è un limite superiore per (s,v) mentre alla fine è uguale a (s,v).

Tecnica del rilassamento

Page 15: 1 Esercizio Supponiamo che il grafo G abbia più alberi di connessione minimi. Mostrare che due alberi di connessione minimi T e T' non solo hanno lo stesso.

15

L’inizializzazione dei campi π[v] e d[v] è la stessa per tutti gli algoritmi.

Inizializza(G, s) G grafo pesato sugli archi

for “ogni v V[G]” do π[v] nil d[v] d[s] 0

Page 16: 1 Esercizio Supponiamo che il grafo G abbia più alberi di connessione minimi. Mostrare che due alberi di connessione minimi T e T' non solo hanno lo stesso.

17

Il rilassamento rispetto ad un arco uv consiste nel controllare se allungando il cammino da s a u con l’arco uv è possibile trovare un cammino da s a v migliore di quello trovato finora.

Rilassa(uv) if d[v] > d[u] + w(uv) then d[v] d[u] + w(uv) π[v] u

Page 17: 1 Esercizio Supponiamo che il grafo G abbia più alberi di connessione minimi. Mostrare che due alberi di connessione minimi T e T' non solo hanno lo stesso.

18

Disuguaglianza triangolare. Per ogni arco uv

Proprietà dei cammini minimi e del rilassamento

Inoltre, dopo l’inizializzazione ed un numero qualsiasi di rilassamenti valgono le seguenti:

)(),(),( uvwusvs

Vertici non raggiungibili. Se v non è raggiungibile da s allora d[v] = (s,v) = .

Limite superiore. d[v] (s,v) e non appena d[v] diventa uguale a (s,u) esso non cambia più.

Page 18: 1 Esercizio Supponiamo che il grafo G abbia più alberi di connessione minimi. Mostrare che due alberi di connessione minimi T e T' non solo hanno lo stesso.

19

Convergenza. Se u precede v in un cammino minimo e d[u] = (s,u) prima del rilassamento dell’arco uv, allora d[v] = (s,v) dopo tale rilassamento.

Rilassamento del cammino. Se p = v0,...,vk è un cammino minimo da s = v0 a vk e si esegue una sequenza di rilassamenti durante la quale vengono rilassati gli archi di p nell’ordine v0v1,...,vk-1vk allora d[vk] = (s,vk).Sottografo dei predecessori. Quando d[v] = (s,v) per ogni vertice v, l’albero dei predecessori è un albero dei cammini minimi.

Page 19: 1 Esercizio Supponiamo che il grafo G abbia più alberi di connessione minimi. Mostrare che due alberi di connessione minimi T e T' non solo hanno lo stesso.

20

Algoritmo di Bellman-Ford

Algoritmo di Bellman-Ford

CammMinimiBellmanFord(G, s) G grafo pesato sugli archi

Inizializza(G, s) for i 1 to n - 1 do for “ogni uv E[G]” do Rilassa(uv) for “ogni uv E[G]” do if d[v] > d[u] + w(uv) then return false return true

true sse non ci sono cicli di peso negativo

Page 20: 1 Esercizio Supponiamo che il grafo G abbia più alberi di connessione minimi. Mostrare che due alberi di connessione minimi T e T' non solo hanno lo stesso.

21

u/

2

5

6

s/0

y/x/

v/

7

8 7

-2

9

-3

-4

u/6

x/7

ordinearchi:

uvuxuyvuxvxyyvyssusx

v/11

y/2

v/4u/2

y/-2

Page 21: 1 Esercizio Supponiamo che il grafo G abbia più alberi di connessione minimi. Mostrare che due alberi di connessione minimi T e T' non solo hanno lo stesso.

22

Complessità. La complessità dell’algoritmo di Bellman-Ford è O(m n).

Correttezza. Supponiamo dapprima che non ci siano cicli negativi raggiungibili da s.

Se v non è raggiungibile da s sappiamo che d[v] = (s,v) = e questo rimane vero anche dopo tutti i rilassamenti effettuati nel primo ciclo for.

Se v è raggiungibile da s esiste un cammino minimo da s a v di lunghezza minore o uguale ad n-1.

Page 22: 1 Esercizio Supponiamo che il grafo G abbia più alberi di connessione minimi. Mostrare che due alberi di connessione minimi T e T' non solo hanno lo stesso.

23

Il primo ciclo for rilassa tutti gli archi per n-1 volte. Quindi la sequenza dei rilassamenti contiene come sottosequenza i rilassamenti degli archi del cammino minimo nell’ordine dal primo all’ultimo. Pertanto alla fine vale d[v] = (s,v).

)()(),(),( uvwuduvwusvsvd per ogni vertive v e quindi il secondo ciclo for termina e l’algoritmo ritorna true.

Per la disuguaglianza triangolare

Page 23: 1 Esercizio Supponiamo che il grafo G abbia più alberi di connessione minimi. Mostrare che due alberi di connessione minimi T e T' non solo hanno lo stesso.

24

Supponiamo ci sia un ciclo negativo v0,...,vk con vk = v0 raggiungibile da s e supponiamo per assurdo che l’algoritmo ritorni true.

Questo è possibile soltanto se per ogni i = 1,…,k )( 11 iiii vvwvdvd

Sommando su tutti gli i si ottiene

k

iii

k

ii

k

ii vvwvdvd

11

11

1

)(

Le prime due sommatorie sono uguali e la terza è il peso del ciclo che è negativo. Assurdo.

Page 24: 1 Esercizio Supponiamo che il grafo G abbia più alberi di connessione minimi. Mostrare che due alberi di connessione minimi T e T' non solo hanno lo stesso.

25

Esercizio Modificare l’algoritmo di Bellman e Ford in modo che esso ponga d[v] = - per ogni vertice v che è raggiungibile da s con un cammino che contiene un ciclo negativo.

esercizio 49

CammMinimiBellmanFord(G, s) G grafo pesato sugli archi

Inizializza(G, s) for i 1 to n - 1 do for “ogni uv E[G]” do Rilassa(uv) for “ogni uv E[G]” do if d[v] > d[u] + w(uv) then d[v]-∞ return true

Page 25: 1 Esercizio Supponiamo che il grafo G abbia più alberi di connessione minimi. Mostrare che due alberi di connessione minimi T e T' non solo hanno lo stesso.

26Cammini minimi in DAG

Cammini minimi in grafi aciclici.

Rilassando gli archi di un grafo aciclico in ordine topologico possiamo calcolare i cammini minimi in tempo O(n + m).L’algoritmo è il seguente:

CammMinimiDAG(G, s) G grafo diretto aciclico pesato sugli archi OrdinamentoTopologico(G, OrdTop) Inizializza(G, s) for i 1 to n - 1 do u OrdTop[i] for “ogni v Adj[u]” do Rilassa(uv)

Page 26: 1 Esercizio Supponiamo che il grafo G abbia più alberi di connessione minimi. Mostrare che due alberi di connessione minimi T e T' non solo hanno lo stesso.

27

r/ 25

3

s/0

4

-2

16

2

-1t/ u/ v/ x/t/2 u/6 v/6 x/4v/5 x/3

Page 27: 1 Esercizio Supponiamo che il grafo G abbia più alberi di connessione minimi. Mostrare che due alberi di connessione minimi T e T' non solo hanno lo stesso.

28

Complessità.

La complessità dell’algoritmo è O(n + m).

Correttezza.

Sia v un vertice qualsiasi raggiungibile da s e sia

s = u0, u1, ..., uk = v

un cammino minimo da s a v.

L’algoritmo rilassa gli archi del cammino nell’ordine u0u1, u1u2, ..., uk-1uk e quindi alla fine d[v] = (s,v).

Page 28: 1 Esercizio Supponiamo che il grafo G abbia più alberi di connessione minimi. Mostrare che due alberi di connessione minimi T e T' non solo hanno lo stesso.

29

Algoritmo di Dijkstra

Grafo orientato pesato con pesi non negativi

L’algoritmo di Dijkstra mette i vertici in una coda con priorità Q ordinata rispetto a d[v].

Algoritmo di Dijkstra

CammMinimiDijkstra(G, s) G grafo pesato sugli archi

Inizializza(G, s) Q V[G] while not Empty(Q) do u ExtractMin(Q) for “ogni v Adj[u]” do Rilassa(uv)

Page 29: 1 Esercizio Supponiamo che il grafo G abbia più alberi di connessione minimi. Mostrare che due alberi di connessione minimi T e T' non solo hanno lo stesso.

30

Il rilassamento può diminuire d[v].

Siccome v è inserito in una coda con priorità per diminuire il valore di d[v] dobbiamo effettuare una chiamata a DecreaseKey.

La procedura Rilassa diventa quindi:

Rilassa(uv) if d[v] > d[u] + w(uv) then DecreaseKey(v, d[u]+w(uv) ) π[v] u

Page 30: 1 Esercizio Supponiamo che il grafo G abbia più alberi di connessione minimi. Mostrare che due alberi di connessione minimi T e T' non solo hanno lo stesso.

31

u/

7

1

10

s/0

y/x/

v/

5

2 6 4

2

93s/0

u/10

x/5x/5

u/8

y/7

v/14

y/7

v/13u/8 v/9v/9

Page 31: 1 Esercizio Supponiamo che il grafo G abbia più alberi di connessione minimi. Mostrare che due alberi di connessione minimi T e T' non solo hanno lo stesso.

32

Complessità. Escludendo le operazioni sulla coda Q l’algoritmo richiede tempo O(n + m).

Sulla coda vengono eseguite n operazioni Insert, n operazioni ExtractMin e al più m operazioni DecreaseKey.

Se implementiamo la coda Q con un mucchio binomiale le operazioni sulla coda richiedono tempo O((n + m) log n).

Se usiamo mucchi di Fibonacci richiedono tempo O(n log n + m).

Page 32: 1 Esercizio Supponiamo che il grafo G abbia più alberi di connessione minimi. Mostrare che due alberi di connessione minimi T e T' non solo hanno lo stesso.

33

Correttezza.

Dobbiamo mostrare che alla fine d[v] = (s,v) per ogni vertice v.

Per far questo ci basta mostrare che d[v] = (s,v) quando il vertice viene estratto dalla coda Q.

Infatti ogni vertice viene prima o poi estratto dalla coda e dal momento in cui d[v] = (s,v) il valore di d[v] non può più cambiare.

Page 33: 1 Esercizio Supponiamo che il grafo G abbia più alberi di connessione minimi. Mostrare che due alberi di connessione minimi T e T' non solo hanno lo stesso.

34

Assumiamo, per assurdo, che u sia il primo vertice estratto dalla coda per cui d[u] (s,u) e sia S l’insieme dei vertici estratti prima di u.

Siccome il primo vertice estratto dalla coda è la sorgente s e d[s] = 0 = (s,s) l’insieme S contiene s e quindi u s.

Per la proprietà del limite superiore d[u] (s,u) e quindi d[u] > (s,u).

Dunque (s,u) < ed esiste un cammino minimo p da s a u.

Page 34: 1 Esercizio Supponiamo che il grafo G abbia più alberi di connessione minimi. Mostrare che due alberi di connessione minimi T e T' non solo hanno lo stesso.

35

Sia y il primo vertice del cammino p che non appartiene ad S, sia x il vertice precedente e suddividiamo il cammino p in un cammino p1 da s a x, l’arco xy e il cammino p2 da y a u.

s

x y

uS

p1

p2

Page 35: 1 Esercizio Supponiamo che il grafo G abbia più alberi di connessione minimi. Mostrare che due alberi di connessione minimi T e T' non solo hanno lo stesso.

36

Quando il vertice x è stato estratto da Q avevamo che d[x] = (s,x) e siccome a quel punto è stato rilassato l’arco xy anche d[y] = (s,y).

Siccome y precede u nel cammino minimo p e non ci sono archi di peso negativo avremo che (s,u) (s,y) e quindi:

d[u] (s,u) (s,y) = d[y]

Ma u è il vertice estratto dalla coda e quindi

d[u] = (s,u) = (s,y) = d[y]

Assurdo.

Page 36: 1 Esercizio Supponiamo che il grafo G abbia più alberi di connessione minimi. Mostrare che due alberi di connessione minimi T e T' non solo hanno lo stesso.

37

Esercizio Descrivere un algoritmo che dato un grafo orientato aciclico pesato sugli archi ed un vertice s calcola i cammini massimi da s ad ogni altro vertice.

esercizio 50

Page 37: 1 Esercizio Supponiamo che il grafo G abbia più alberi di connessione minimi. Mostrare che due alberi di connessione minimi T e T' non solo hanno lo stesso.

38

Esercizio 51 Sono date n task a1,...,an con tempi di esecuzione t1,...,tn. Tali task si possono eseguire in parallelo utilizzando un numero sufficiente di processori.L’esecuzione deve però rispettare dei vincoli di propedeuticità rappresentati mediante coppie aiaj il cui significato è “ai deve essere finita prima di iniziare l’esecuzione di aj”.Descrivere un algoritmo efficiente che calcola il tempo minimo necessario per eseguire tutte le task.

esercizio 51*

Page 38: 1 Esercizio Supponiamo che il grafo G abbia più alberi di connessione minimi. Mostrare che due alberi di connessione minimi T e T' non solo hanno lo stesso.

39

Esercizio Una scatola rettangolare a d dimensioni è definita dalle dimensioni x1, x2, ..., xd dei suoi lati.La scatola X di lati x1, x2, ..., xd puo essere racchiusa nella scatola Y di lati y1, y2, ..., yd se esiste una permutazione degli indici 1,2,...,d tale che x(1) y1, x(2) y2,..., x(d) yd .

esercizio 52

Page 39: 1 Esercizio Supponiamo che il grafo G abbia più alberi di connessione minimi. Mostrare che due alberi di connessione minimi T e T' non solo hanno lo stesso.

40

a) verificare che la relazione “essere racchiudibile” è transitiva.

b) trovare un metodo efficiente per testare se una scatola è racchiudibile in un’altra scatola.

c) trovare un algoritmo efficiente che dato un insieme di n scatole S1, S2, ..., Sn a d dimensioni, calcola la più lunga sequenza Si1

, Si2, ..., Sik

di

scatole racchiudibili una nell’altra.