1 / 12

Algoritmi per il calcolo di MST: uso di code unificabili

Algoritmi per il calcolo di MST: uso di code unificabili. Laboratorio di Algoritmi 02/03 Prof. Ugo de’ Liguoro. Alberi di copertura minima (MST). G = ( V , E ) sia un grafo non orientato, con archi pesati w : E ! ;

ankti
Download Presentation

Algoritmi per il calcolo di MST: uso di code unificabili

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Algoritmi per il calcolo di MST:uso di code unificabili Laboratorio di Algoritmi 02/03 Prof. Ugo de’ Liguoro AlgoLab - MST code binomiali

  2. Alberi di copertura minima (MST) G = (V, E) sia un grafo non orientato, con archi pesati w: E!; T = (V, A), dove AµE, è un albero di copertura minima (MST) di G se: • Tè aciclico (dunque un albero): una copertura di G; • w(T) = å(u, v) 2Aw(u,v) è minimo tra tutte le coperture di G. 8 7 b c d 4 9 2 4 14 a 11 i e 7 6 8 10 w(T) = 37 h g f 1 2 AlgoLab - MST code binomiali

  3. Schema degli algoritmi greedy per MST Generic-MST (G) 1. AÃ; 2. whileA non forma una copertura 3. do cerca (u, v) 2E[G] nA che sia safe per A 4. AÃA[ {(u, v)} 5. returnA L’arco (u, v) è safe per A se esiste un MST T per G t.c. a) AµT b) (u, v) 2TnA AlgoLab - MST code binomiali

  4. Tagli e “safe edges” • Un taglio (cut) di Gè una partizione {S, V[G] nS} di V[G] • Un arco (u, v) 2E[G] scavalca (crosses) {S, V[G] nS} se: {u, v} Å S ¹; Æ {u, v} ÅV[G] n S ¹; • Un taglio rispettaA se nessun (u, v) 2A lo scavalca Teorema.Se A è incluso in un MST per G, {S, V[G] nS} è un taglio di G che rispetta A, allora un arco (u, v) 2E[G] t.c. w(u, v) = min{w(a, b) | (a, b) scavalca {S, V[G] nS}} è safe per A. AlgoLab - MST code binomiali

  5. MST-Mergeable-Heap MST-Mergeable-Heap(G) // G grafo pesato, non orientato, connesso 1. TÃ // grafo non orientato aciclico, inizialmente vuoto 2. for ogni vertice vi2V[G] 3. doViÃ{vi} 4. Eià {(vi , v) 2E[G]} 5. while esiste più di un Vi 6. do scegli un Vi 7. estrai da Ei un arco di peso minimo (u, v) 8. siano u2Vi, v2Vj 9 if i¹j 10. thenTÃT[ {(u, v)} 11. ViÃVi[Vj , ditruggendo Vj 12. EiÃEi[Ej AlgoLab - MST code binomiali

  6. Correttezza Se la partizione P ha più di un elemento ed A è l’insieme degli archi correntemente in T,allora per ogni Vi2P: 1) {Vi, V[G] nVi} rispettaA 2) 9(u, v) 2Ei t.c. (u, v) scavalca {Vi, V[G] nVi} Quindi: a) Ei¹; b) sebbene l’arco di peso minimo (u, v) estratto alla linea 7 non sia necessariamente quello che scavalca il taglio {Vi, V[G] nVi}, se alla linea 9 i¹j allora w(u, v) è minimo tra i pesi degli archi che scavalcano il taglio: dunque (per il teorema) è safe per A c) quando |P| = 1, V[G] = V[T] e dunque T è un MST per G. AlgoLab - MST code binomiali

  7. Pseudocodifica MST-Mergeable-Heap(G) 1. TÃEmpty-Graph (), PÃEmpty-Partition () 2. for ogni vertice vi2V[G] 3. doViÃMake-Set (P, vi) 4. EiÃMake-Heap () 5. for ogni (vi , v) 2E[G] 6. doinfo[x] à (vi , v) 7. key[x] = w (vi , v) 8. Binomial-Heap-Insert (Ei, x) 9. while esiste più di un Vi2P 11. do scegli un Vi2P 12. (u, v) ÃBinomial-Heap-Extract-Min (Ei) 13. aÃFind-Set (u), bÃFind-Set (v) 14 if a¹b 15. thenTÃT[ {(u, v)} 16. Union (P, a, b) 17. Eaà Binomial-Heap-Union (Ea, Eb) AlgoLab - MST code binomiali

  8. Note sulla realizzazione in Java (1) • Estendiamo Graph con la classe UnorderedGraph: • aggiunge un campo private int Totalweight; // somma dei pesi degli archi • aggiunge un metodo public int getTotalweight() // ritorna il val. Ccorrente di Totalweight • ridefinisce il metodo public void addArc (int i, int j, int weight) // aggiunge l'arco non orientato {i, j} di peso // weight, ed incrementa Totalweight • ospita il metodopubblico MSTMergeableHeap () AlgoLab - MST code binomiali

  9. Note sulla realizzazione in Java (2) • Realizziamo la partizione P sull’insieme degli indici del vettore Graph.vertices, ossia {0, … , Graph.cardVertexes()-1} usando DisjointSetsOfInt. • Modifichiamo DisjointSetsOfIntper poter sapere quando la cardinalità di P è 1: • aggiungiamo un campo privato private int card; // cardinalità della partizione • ed un metodo pubblico che lo ispeziona public int Cardinality () AlgoLab - MST code binomiali

  10. Note sulla realizzazione in Java (3) • Per avere code di archi modifichiamo MergeableQueuein modo da trattare chiavi di tipo Comparable, usando il metodo compareTo dovunque occorra confrontare due chiavi • Per realizzare le code unificabili Eied associarle agli elementi Vi di P utilizziamo un array MergeableQueue edgesSet[] = new MergeableQueue[cardVertexes()]; ed usiamo gli indici dei vertici per associare ad ogni rappresentante di un elemento in P la relativa coda di archi. AlgoLab - MST code binomiali

  11. Note sulla realizzazione in Java (4) • Per gli archi usiamo una classe Edge, privata e interna a Graph, avente i campi: int fst, snd; // indici dei vertici in Graph.vertices int weight; // peso dell’arco Per essere trattata come campo chiave in una coda di priorità, la classe implementa Comparable ed ha quindi un metodo public int compareTo (Object o) // ritorna –1 se this < o, 0 se == o, 1 se > o // supponendo o di classe Edge, e facendo il confronto // sul campo weight AlgoLab - MST code binomiali

  12. Riferimenti • Basato sul testo: Intoduction to Algorithms, di Cormen et alii. • Gli algoritmi MST sono illustrati nel cap. 24 eedl testo di Cormen. • L’algoritmo MST-Mergeable-Heapè l’esercizio 20-2 del testo di Cormen. • Le funzioni utilizzate nella pseudocodifica sono illustrate nei capitoli 20 (code unificabili con alberi binomiali) e 22 (insiemi disgiunti) dello stesso testo. AlgoLab - MST code binomiali

More Related