Algoritmo di Kruskal Parte con tutti i vertici e nessun lato (sottografo aciclico, o foresta, ricoprente) Ordina i lati per costo non decrescente.

Slides:



Advertisements
Presentazioni simili
Algoritmi e Strutture dati Mod B
Advertisements

Algoritmi e Strutture Dati
Strutture dati per insiemi disgiunti
                      Insertion-Sort
Il problema del minimo albero ricoprente in un grafo non cooperativo
Algoritmi e Strutture Dati
Cammini minimi con una sorgente
Breath-first search Visita in ampiezza di un grafo Algoritmo Esempio
Breath-first search Visita in ampiezza di un grafo Algoritmo Esempio
Cammini minimi con sorgente singola
Insiemi disgiunti.
Algoritmi e Strutture Dati
Capitolo 4 Ordinamento Algoritmi e Strutture Dati.
Capitolo 4 Ordinamento Algoritmi e Strutture Dati.
Algoritmi e Strutture Dati
Capitolo 4 Ordinamento Algoritmi e Strutture Dati Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano.
Algoritmi e Strutture Dati
Algoritmi Paralleli e Distribuiti a.a. 2008/09 Lezione del 28/04/2009 Prof. ssa ROSSELLA PETRESCHI a cura del Dott. SAVERIO CAMINITI.
U V U V (a) |cfc|=2 prima e dopo (b) |cfc|=2 prima e |cfc|=1 dopo
Il problema del minimo albero ricoprente in un grafo con archi privati
Algoritmi e strutture Dati - Lezione 7
Capitolo 13 Cammini minimi: Algoritmo di Floyd e Warshall Algoritmi e Strutture Dati.
Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Capitolo 12 Minimo albero ricoprente: Algoritmi di Prim e di Borůvka Algoritmi.
Algoritmi e Strutture Dati
Capitolo 4 Ordinamento Algoritmi e Strutture Dati.
Algoritmi e Strutture Dati
Algoritmi e Strutture Dati (Mod. B)
Algoritmi e Strutture Dati (Mod. B)
Algoritmi e Strutture Dati Valutazione del tempo di esecuzione degli algoritmi.
Algoritmi e Strutture Dati (Mod. B)
Trovare il percorso minimo da b ad ogni altro vertice
Algoritmi e Strutture Dati (Mod. B)
Modelli e Algoritmi per la Logistica
Sottoinsiemi disgiunti
QuickSort Quick-Sort(A,s,d) IF s < d THEN q = Partiziona(A,s,d) Quick-Sort(A,s,q-1) Quick-Sort(A,q + 1,d)
Algoritmi greedy Gli algoritmi greedy in genere non sono esatti, cioè determinano soluzioni non necessariamente ottime Per il problema dell’albero ricoprente.
Alberi ricoprenti minimi Alcune applicazioni Lunedì 17 novembre 2003.
Esempio di esecuzione dellalgoritmo di Prim 1 v1v1 v5v5 v2v2 v3v3 v4v U = {v 1 } X =Ø 1 v1v1 v5v5 v2v2 v3v3 v4v U = {v.
Strutture dati per insiemi disgiunti
Algoritmi e Strutture Dati
Algoritmi su grafi I grafi sono strutture dati che vengono usate estensivamente in informatica. Ci sono migliaia di problemi computazionali che sono importanti.
Grafi.
Prof. Cerulli – Dott.ssa Gentili
Per valutare la complessità ammortizzata scomponiamo ogni Union: nelle due FindSet e nella Link che la costituiscono e valuteremo la complessità in funzione.
Algoritmi e Strutture Dati
Heap Ordinamento e code di priorità Ugo de Liguoro.
2. Grafi.
Usi (meno scontati) della visita DFS
Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Capitolo 12 Minimo albero ricoprente: Algoritmi di Prim e di Borůvka Algoritmi.
Usi (meno scontati) della visita DFS. Informazioni utili: tenere il tempo clock=1 pre(v)=clock clock=clock+1 post(v)=clock; clock=clock+1 pre(v): tempo.
Alberi di copertura minimi. Dato un grafo pesato G = (V,E), si richiede di trovare un albero T = (V,E’), E’  E, tale che la somma dei pesi associati.
Usi (meno scontati) della visita DFS lezione basata sul capito 3 del libro Algorithms, di Dasgupta, Papadimitriou, Vazirani, McGraw-Hill.
Olimpiadi di Informatica 2010 Giornate preparatorie
Capitolo 12 Minimo albero ricoprente: Algoritmo di Kruskal (*) Algoritmi e Strutture Dati.
Redisposizione Genomica Gotzone Ortega Bioinformatica 2008/2009.
Strutture dati per insiemi disgiunti Alberi di copertura minimi
Capitolo 12 Minimo albero ricoprente Algoritmi e Strutture Dati.
Capitolo 10 Tecniche algoritmiche Algoritmi e Strutture Dati.
Capitolo 12 Minimo albero ricoprente: Algoritmo di Kruskal Algoritmi e Strutture Dati.
Master Bioinformatica 2002: Visite di Grafi La struttura dati D è una PILA (STACK) Visita in profondità o Depth-First-Search (DFS)
Master Bioinformatica 2002: Visite di Grafi Algoritmi di visita Scopo: visitare tutti i vertici di un grafo per scoprirne proprietà di vario tipo. Alcune.
Didattica e Fondamenti degli Algoritmi e della Calcolabilità Sesta giornata Risolvere efficientemente un problema in P: Il problema dell’ordinamento: Insertion.
Algoritmi e Strutture Dati
Capitolo 9 Il problema della gestione di insiemi disgiunti (Union-find) Algoritmi e Strutture Dati.
Capitolo 12 Minimo albero ricoprente: Algoritmo di Kruskal Algoritmi e Strutture Dati.
Algoritmi Avanzati a.a.2014/2015 Prof.ssa Rossella Petreschi Lezione n°10.
Algoritmi Avanzati a.a.2014/2015 Prof.ssa Rossella Petreschi Lezione n°9.
Lezioni di Ricerca Operativa Corso di Laurea in Informatica
Algoritmi Avanzati a.a.2012/2013 Prof.ssa Rossella Petreschi Albero Ricoprente Lezione n°9.
Algoritmi e Strutture Dati
Transcript della presentazione:

Algoritmo di Kruskal Parte con tutti i vertici e nessun lato (sottografo aciclico, o foresta, ricoprente) Ordina i lati per costo non decrescente Li aggiunge via via alla foresta, purché non creino cicli Kruskal(G,c) U = V; X =  For v = 1 to n do MakeSet(v) SortEdges(E) For each e = (u,v)  |X| do r = FindSet(u) s = FindSet(v) If r  s then X = X  {e*} Union(r,s) Un lato crea un ciclo quando i suoi estremi sono nella stessa componente connessa

Algoritmo di Kruskal: esecuzione Kruskal(G,c) U = V; X =  For v = 1 to n do MakeSet(v) SortEdges(E) ... 1 v1 v5 v2 v3 v4 2 6 5 3 4 E = { [v1,v2], [v1,v5], [v2,v5], [v3,v5], [v2,v3], [v1,v3], [v4,v5], [v3,v4], [v1,v4] } p = [1 2 3 4 5] rank = [0 0 0 0 0]

Algoritmo di Kruskal: esecuzione Kruskal(G,c) ... For each e = (u,v)  |X| do r = FindSet(u) s = FindSet(v) If r  s then X = X  {e*} Union(r,s) r = FindSet(v1) = v1 s = FindSet(v2) = v2 1 v1 v5 v2 v3 v4 2 6 5 3 4 E = { [v1,v2], [v1,v5], [v2,v5], [v3,v5], [v2,v3], [v1,v3], [v4,v5], [v3,v4], [v1,v4] } p = [1 1 3 4 5] rank = [1 0 0 0 0]

Algoritmo di Kruskal: esecuzione Kruskal(G,c) ... For each e = (u,v)  |X| do r = FindSet(u) s = FindSet(v) If r  s then X = X  {e*} Union(r,s) r = FindSet(v1) = v1 s = FindSet(v5) = v5 1 v1 v5 v2 v3 v4 2 6 5 3 4 E = { [v1,v2], [v1,v5], [v2,v5], [v3,v5], [v2,v3], [v1,v3], [v4,v5], [v3,v4], [v1,v4] } p = [1 1 3 4 1] rank = [1 0 0 0 0]

Algoritmo di Kruskal: esecuzione Kruskal(G,c) ... For each e = (u,v)  |X| do r = FindSet(u) s = FindSet(v) If r  s then X = X  {e*} Union(r,s) r = FindSet(v2) = v1 s = FindSet(v5) = v1 1 v1 v5 v2 v3 v4 2 6 5 3 4 E = { [v1,v2], [v1,v5], [v2,v5], [v3,v5], [v2,v3], [v1,v3], [v4,v5], [v3,v4], [v1,v4] } p = [1 1 3 4 1] rank = [1 0 0 0 0]

Algoritmo di Kruskal: esecuzione Kruskal(G,c) ... For each e = (u,v)  |X| do r = FindSet(u) s = FindSet(v) If r  s then X = X  {e*} Union(r,s) r = FindSet(v3) = v3 s = FindSet(v5) = v1 1 v1 v5 v2 v3 v4 2 6 5 3 4 E = { [v1,v2], [v1,v5], [v2,v5], [v3,v5], [v2,v3], [v1,v3], [v4,v5], [v3,v4], [v1,v4] } p = [1 1 1 4 1] rank = [1 0 0 0 0]

Algoritmo di Kruskal: esecuzione Kruskal(G,c) ... For each e = (u,v)  |X| do r = FindSet(u) s = FindSet(v) If r  s then X = X  {e*} Union(r,s) r = FindSet(v2) = v1 s = FindSet(v3) = v1 1 v1 v5 v2 v3 v4 2 6 5 3 4 E = { [v1,v2], [v1,v5], [v2,v5], [v3,v5], [v2,v3], [v1,v3], [v4,v5], [v3,v4], [v1,v4] } p = [1 1 1 4 1] rank = [1 0 0 0 0]

Algoritmo di Kruskal: esecuzione Kruskal(G,c) ... For each e = (u,v)  |X| do r = FindSet(u) s = FindSet(v) If r  s then X = X  {e*} Union(r,s) r = FindSet(v1) = v1 s = FindSet(v3) = v1 1 v1 v5 v2 v3 v4 2 6 5 3 4 E = { [v1,v2], [v1,v5], [v2,v5], [v3,v5], [v2,v3], [v1,v3], [v4,v5], [v3,v4], [v1,v4] } p = [1 1 1 4 1] rank = [1 0 0 0 0]

Algoritmo di Kruskal: esecuzione Kruskal(G,c) ... For each e = (u,v)  |X| do r = FindSet(u) s = FindSet(v) If r  s then X = X  {e*} Union(r,s) r = FindSet(v4) = v4 s = FindSet(v5) = v1 1 v1 v5 v2 v3 v4 2 6 5 3 4 E = { [v1,v2], [v1,v5], [v2,v5], [v3,v5], [v2,v3], [v1,v3], [v4,v5], [v3,v4], [v1,v4] } p = [1 1 1 1 1] rank = [1 0 0 0 0] |X| = n-1

Correttezza dell’algoritmo di Kruskal Per assurdo, sia T(V,X) l’albero costruito dall’algoritmo di Kruskal e T*(V,X*) un albero ottimo Consideriamo il primo lato e  X, ma  X* Se e  X, significa che è stato scartato perché creava un ciclo con i lati già inseriti In tal caso, non può appartenere a X*, che contiene tutti i lati già inseriti, ma non contiene cicli

Complessità dell’algoritmo di Kruskal ordinamento degli m lati: O(m log m)  O(m log n2) == O(m log n) verifica di aciclicità: O(log n) per ogni lato  complessità totale: O(m log n) Questa seconda operazione si può migliorare usando la compressione dei cammini, cioè sfruttando le chiamate a FindSet per far sì che tutti gli elementi della catena puntino direttamente quello rappresentativo La singola FindSet rallenta, la lunghezza d delle catene diventa quasi sempre 1: O(log n) diventa O(a(n))  O(1)