La presentazione è in caricamento. Aspetta per favore

La presentazione è in caricamento. Aspetta per favore

1 Esercizio Come si modifica il numero di cfc aggiungendo un arco? Trovare un (a) esempio in cui il numero di cfc non cambia, un (b) esempio in cui il.

Presentazioni simili


Presentazione sul tema: "1 Esercizio Come si modifica il numero di cfc aggiungendo un arco? Trovare un (a) esempio in cui il numero di cfc non cambia, un (b) esempio in cui il."— Transcript della presentazione:

1 1 Esercizio Come si modifica il numero di cfc aggiungendo un arco? Trovare un (a) esempio in cui il numero di cfc non cambia, un (b) esempio in cui il numero di cfc diminuisce di 1 ed un (c) esempio in cui il numero di cfc da 10 diventa 1. Soluzione Esercizio 44 arco aggiunto (a) |cfc|=2 prima e dopo (b) |cfc|=2 prima e |cfc|=1 dopo (b) |cfc|=10 prima e |cfc|=1 dopo

2 2 Esercizio Dimostrare che il grafo delle cfc è aciclico (un DAG). Dimostrazione Supponiamo per assurdo che dato un grafo G il suo grafo delle cfc sia ciclico. Supponiamo (per semplicita) che il ciclo coinvolga tre vertici, cioe sia: C 1 C 2 C 3 C 1. Larco tra C 1 e C 2 nel grafo delle cfc implica u C 1 e v C 2 con uv E(G). Similmente, larco da C 2 a C 3 nel grafo delle cfc implica x C 2 e y C 3 con xy E(G). Infine, larco da C 3 a C 1 nel grafo delle cfc implica r C 3 e s C 1 con rs E(G). Ma allora avrei i cammini: u v x y y r s u che contraddice il fatto che C 1 e C 3 sono cfc distinte.

3 3 Albero di connessione minimo Dato un grafo non orientato G = (V,E) connesso, un albero di connessione è costituito da un insieme aciclico T E di archi che connette tutti i vertici del grafo. Un grafo connesso G = (V,E) può avere molti alberi di connessione ma tutti hanno esattamente n - 1 archi. Albero di conn. minimo.

4 ae hgf dcb i ae hgf dcb i Due alberi di connessione dello stesso grafo: a b c dif g h e a b c d i f g h e

5 5 Se associamo un peso w(uv) ad ogni arco uv allora gli alberi di connessione possono avere pesi diversi. ae hgf dcb i ae hgf dcb i peso = 37 peso = 42

6 6 Un albero di connessione minimo è un albero di connessione di peso minimo. Vi sono due algoritmi golosi per calcolare un albero di connessione minimo, dovuti rispettivamente a Kruskal e a Prim.

7 7 Entrambi gli algoritmi sono istanze di uno stesso algoritmo generale che costruisce linsieme A degli archi di un albero di connessione minimo partendo dallinsieme vuoto e aggiungendo di volta in volta un arco sicuro per A ossia un arco uv tale che A uv sia sottoinsieme degli archi di qualche albero di connessione minimo.

8 8 AlbConnMinGenerico(G) G grafo pesato sugli archi A while A non forma un albero di connessione do cerca un arco sicuro uv aggiungi uv allinsieme A return A Gli algoritmi di Kruskal e di Prim differiscono per il modo in cui viene cercato un arco sicuro (oltre che per la struttura dati usata per mantenere linsieme A). Per capire questi algoritmi ci serve qualche altra definizione sui grafi.

9 9 Un taglio in un grafo non orientato G = (V,E) è una partizione dellinsieme di vertici V in due sottoinsiemi non vuoti (S,V \ S). Diciamo che un arco interseca il taglio (S,V \ S) se uno dei suoi estremi è in S e laltro è in V \ S. Diciamo che il taglio (S,V \ S) rispetta un insieme di archi A se nessun arco in A interseca il taglio. Un arco leggero per un taglio è un arco di peso minimo tra tutti quelli che intersecano il taglio.

10 10 Vediamo queste definizioni su di un esempio. ae hgf dcb i S V \ S Arco leggero per il taglio Un insieme rispettato dal taglio

11 11 Caratterizzazione degli archi sicuri. Sia A un insieme di archi contenuto in qualche albero di connessione minimo, sia (S,V \ S) un taglio che rispetta A e sia uv un arco leggero per il taglio (S,V \ S). Allora larco uv è sicuro. Dimostrazione. Sia A un insieme di archi contenuto in un albero di connessione minimo T. Se T contiene anche larco uv siamo a posto.

12 12 Se T non contiene larco uv aggiungendo tale arco a T si forma un ciclo. Siccome u e v stanno da parti opposte rispetto al taglio deve esserci almeno un arco xy nel cammino da u a v in T che interseca il taglio. v y x u p uv xy

13 13 Sia T' lalbero di connessione ottenuto da T togliendo larco xy e aggiungendo larco uv. Siccome sia uv che xy intersecano il taglio ed uv è leggero, il peso di T' è minore o uguale del peso di T. Ma T è albero di connessione minimo e quindi anche T' lo è. Siccome il taglio rispetta linsieme A larco tolto non stava in A e quindi T' contiene sia larco uv che gli archi in A. Pertanto uv è un arco sicuro.

14 14 Caso particolare. Sia A un insieme di archi contenuto in qualche albero di connessione minimo, sia C V una componente connessa del sottografo G A = (V,A) e sia uv un arco di peso minimo tra tutti quelli aventi un estremo in C e laltro V \ C. Allora larco uv è sicuro. Dimostrazione. (C, V \ C) è un taglio che rispetta A e larco uv è un arco leggero rispetto al taglio.

15 15 Dimostrazione Ricordiamo che un grafo non orientato si dice connesso se esiste almeno un cammino tra ogni coppia di vertici. Le componenti connesse di un grafo sono le classi di equivalenza dei suoi vertici rispetto alla relazione di accessibilità. Notiamo che non ci puo essere nessun arco tra vertici di componenti connesse distinte ( C, V \ C) è un taglio che rispetta A e larco uv è un arco leggero rispetto al taglio.

16 16 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

17 17 Algoritmo di Kruskal. Usa una struttura dati per insiemi disgiunti. AlbConnMinKruskal(G) G grafo pesato sugli archi A insieme vuoto for ogni u V[G] do MakeSet(u) ordina gli archi in ordine di peso crescente for ogni arco uv E[G] in ordine di peso do if FindSet(u) FindSet(v) then Union(u,v) aggiungi uv allinsieme A return A

18 18 ae hgf dcb i

19 19 Complessità. Il primo ciclo for richiede O(n). Lordinamento degli archi richiede O(m log m). Lultimo ciclo for richiede O(m (m,n)). Pertanto la complessità è O(m log m) e siccome log m = O(log n 2 ) = O(log n) essa è anche uguale a O(m log n). Corettezza. Larco uv scelto è quello di peso minimo tra quelli che hanno estremi in componenti connesse distinte di G A = (V,A).

20 20 Algoritmo di Prim. Costruisce lalbero di connessione minimo partendo da un vertice prescelto come radice ed estendendolo finchè non connette tutti i vertici. Usa una coda con priorità Q in cui memorizza i vertici non ancora raggiunti dallalbero in costruzione.

21 21 I vertici sono aumentati con: a)un puntatore π al padre nellalbero in costruzione, b)un campo color che è bianco inizialmente e diventa nero quando il vertice viene aggiunto allalbero in costruzione c)un campo key che contiene il peso minimo di un arco che connette il vertice ad uno dei vertici già raggiunti dallalbero in costruzione.

22 22 AlbConnMinPrim(G) G grafo pesato sugli archi for ogni u V[G] do key[u] color[u] bianco scegli un vertice r come radice key[r] 0 inserisci tutti i vertici in Q Q coda con priorità while not Empty(Q) do u ExtractMin(Q) color [u] nero for ogni v Adj[u] do if color[v] = bianco and w(uv) < key[v] then π[v] u key[v] w(uv) Decrease-Key(Q,v,w(uv))

23 23 a e hgf dcb i

24 24 Complessità. Il primo ciclo for richiede tempo O(n). Usando un mucchio di Fibonacci per implementare la coda Q anche linserimento di tutti i vertici nella coda richiede tempo O(n). Il ciclo while viene eseguito n volte. Siccome ExtractMin richiede tempo O(log n), se escludiamo lesecuzione dei cicli for interni esso richiede tempo O(n log n). complessità

25 25 I cicli for interni visitano tutte le liste delle adiacenze dei vertici. Siccome DecreaseKey richiede tempo O(1), essi richiedono tempo O(m). Pertanto la complessità è O(m + n log n).

26 26 Correttezza. Quando il vertice u viene estratto dalla coda Q esso è connesso al vertice v = π[u] dallarco uv di peso minimo tra tutti quelli che collegano un vertice dellalbero ad un vertice esterno allalbero. Quindi uv è un arco sicuro. correttezza


Scaricare ppt "1 Esercizio Come si modifica il numero di cfc aggiungendo un arco? Trovare un (a) esempio in cui il numero di cfc non cambia, un (b) esempio in cui il."

Presentazioni simili


Annunci Google