480 likes | 625 Views
Øvingsforelesning 4. Topologisk sortering Minimale spenntrær Håkon Jacobsen hakoja@stud.ntnu.no. I dag. Neste ukes praksisøving Topologisk sortering Minimale spenntrær Gjennomgang av denne ukens teori- og praksisøving. Neste ukes øving. Praktisk øving: Kobra lærer å stave
E N D
Øvingsforelesning 4 Topologisk sortering Minimale spenntrær Håkon Jacobsen hakoja@stud.ntnu.no
I dag Neste ukes praksisøving Topologisk sortering Minimale spenntrær Gjennomgang av denne ukens teori- og praksisøving
Neste ukes øving • Praktisk øving: Kobra lærer å stave • Teoriøving: Grafer og hashing
Directed Acyclic Graph (DAG) En DAG er en rettet, asyklisk graf Motstykket i en urettet graf er en skog
Hvilken graf er en DAG? 1 3 2
Topologisk sortering Problemstilling: Gitt et sett med oppgaver, hvor det for noen par (av oppgaver), er nødvendig at den ene oppgaven utføres før den andre. Finn en utførelsesrekkefølge av disse oppgavene, som respekterer disse avhengighetene.
Topologisk sortering Formulert som et grafspørsmål: Gitt en rettet asyklisk graf G = ( V, E ), finn en ordning av nodene, slik at for enhver kant , må i < j. En graf hvor dette er oppfylt sier vi har en topologisk ordning.
Topologisk sortering 1 3 2 4 5
Topologisk sortering 1 3 2 4 5 1 2 3 4 5
Topologisk sortering 1 3 2 4 5 1 2 3 4 5 Har alle DAGs en topologisk ordning?
Topologisk sortering Lemma: I enhver DAG finnes det en node uten innkanter. Bevis-skisse: Anta motsatt: vi har en DAG av størrelse n, og alle nodene har minst én innkant. Velg en node v Følg en av innkantene "baklengs" fra v til u Gjenta fra u Hvor lenge kan vi holde på før alle nodene er besøkt minst én gang? Etter maks n + 1 gjentagelser må vi ha gått i ring Selvmotsigelse! vi har en sykel.
Topologisk sortering Teorem: Alle DAGs har en topologisk ordning. Bevis-skisse: Her kjører vi "bevis-ved-algoritme": Finn en node u i grafen G uten innkant. Kan alltid gjøres ifølge forrige lemma Plasser u fremst i den topologiske ordningen, og fjern den fra G Finn en ordning av den resterende grafen, og plasser denne etter u
Topologisk sortering Kleinberg a c b d e
Topologisk sortering Kleinberg a c b d e
Topologisk sortering Kleinberg a c b d e
Topologisk sortering Kleinberg a c b d e
Topologisk sortering Kleinberg a c b d e
Topologisk sortering Kleinberg a c b d e Kjøretid: O(V + E)
Topologisk sortering Cormen • Algoritme: Kjør DFS på alle noder og legg dem først i en liste etter hvert som de fullføres. PS! DFS på en vilkårlig graf uten sykler starter på en vilkårlig node som ikke er besøkt. Dette gjøres om igjen helt til alle noder er besøkt.
Topologisk sortering Cormen Algoritme: Kjør DFS på alle noder og legg dem først i en liste etter hvert som de fullføres. DFS på graf 1: 1: [e] 2: [d, e] 3: [c, d, e] 4: [b, c, d, e] 5: [a, b, c, d, e] a c b Asymptotisk kjøretid: For hver node, sjekk alle kantene fra noden: Θ(V + E) d e
Minimale spenntrær (MST) • Et spenntre i en urettet, sammenhengende graf, er et tre som dekker alle nodene i grafen. • Et spenntre har | V |- 1 kanter. • I vektede grafer kan vi snakke om minimale spenntrær. Dette er de spenntrærne som benytter et utvalg av kanter som totalt sett har den minste mulige vekten. • En graf kan ha flere minimale spenntrær. • Hvis alle kantvektene er unike får vi ett unikt MST
Minimale spenntrær 14 5 14 1 7 13 16 15 5 1 11 7 13 2 8 16 12 15 11 17 2 4 8 3 12 6 17 4 3 10 6 10 Spenntre Minimalt spenntre
Minimale spenntrær - hvordan finne et? Mange mulige tilnærminger: Start uten noen kanter. Legg til kanter i treet etter stigende kantvekt, såfremt dette ikke skaper en sykel. Start med en rot-node. Legg til den billigste kanten som knytter noden til resten av grafen. Legg nå til den billigste kanten som knytter de to nodene til resten av grafen. Legg nå til den billigste kanten som knytter de tre nodene til resten av grafen. Legg nå til ... Gjenta til du har et spenntre. Start med alle kantene. Fjern kanter i grafen etter synkende kantvekt, så lenge dette ikke bryter grafen i to deler. Hvilken blir riktig? Alle sammen!
Minimale spenntrær Hvorfor fungerer alle sammen? MST-problemet har en grådig egenskap: Valg som gjøres for å optimalisere noe lokalt, vil også gi en optimal løsning globalt. Teorem (MSTs grådige egenskap) La T være et MST for grafen G = (V, E ), og la A være en delmengde av V. Anta kanten (v, u ) er en kant med minimal vekt som knytter A til V – A. Da er (v, u ) en del av det minimale spenntreet T. Bevis-skisse: Cut & Paste (Viktig teknikk!)
Minimale spenntrær Prims algoritme • Prims algoritme: • Velg en vilkårlig node i G = (V, E), og la denne være rotnoden i et tre T • Utvid T ved og hele tiden velge den billigste kanten som knytter T til en node som ikke ligger i T • Fortsett til T utspenner alle nodene i G
Minimale spenntrær Prims algoritme 14 5 1 7 13 16 15 11 2 8 12 17 4 3 6 10
Minimale spenntrær Prims algoritme 14 5 1 7 13 16 15 11 2 8 12 17 4 3 6 10
Minimale spenntrær Prims algoritme 14 5 1 7 13 16 15 11 2 8 12 17 4 3 6 10
Minimale spenntrær Prims algoritme 14 5 1 7 13 16 15 11 2 8 12 17 4 3 6 10
Minimale spenntrær Prims algoritme 14 5 1 7 13 16 15 11 2 8 12 17 4 3 6 10
Minimale spenntrær Prims algoritme 14 5 1 7 13 16 15 11 2 8 12 17 4 3 6 10
Minimale spenntrær Prims algoritme 14 5 1 7 13 16 15 11 2 8 12 17 4 3 6 10
Minimale spenntrær Prims algoritme 14 5 1 7 13 16 15 11 2 8 12 17 4 3 6 10
Kjøretid Prims algoritme Binary Heap O(E log(V )). Nabomatrise O(V 2) Fibonnaci Heap O(E + V log(V )) Minimale spenntrær Prims algoritme MST-Prim(G, w, r) 1 for each uinG.V 2 u.key = ∞ 3 u.π = NIL 4 r.key = 0 5 Q = G.V 6 while Q ≠ Ø 7 u = Extract-Min (Q) 8 for each v in G.Adj [u] 9 if v inQ and w(u,v) < v.key 10 v.π = u 11 v.key = w(u,v)
Kruskals algoritme Sorter kantene i grafen etter stigende kantvekt Plukk ut kantene én etter én, og legg dem til i treet såfremt dette ikke danner en sykel Fortsett helt til du har et (minimalt) spenntre Minimale spenntrær Kruskals algoritme
Minimale spenntrær Kruskals algoritme 14 5 1 7 13 16 15 11 2 8 12 17 4 3 6 10
Minimale spenntrær Kruskals algoritme 14 5 1 7 13 16 15 11 2 8 12 17 4 3 6 10
Minimale spenntrær Kruskals algoritme 14 5 1 7 13 16 15 11 2 8 12 17 4 3 6 10
Minimale spenntrær Kruskals algoritme 14 5 1 7 13 16 15 11 2 8 12 17 4 3 6 10
Minimale spenntrær Kruskals algoritme 14 5 1 7 13 16 15 11 2 8 12 17 4 3 6 10
Minimale spenntrær Kruskals algoritme 14 5 1 7 13 16 15 11 2 8 12 17 4 3 6 10
Minimale spenntrær Kruskals algoritme 14 5 1 7 13 16 15 11 2 8 12 17 4 3 6 10
Minimale spenntrær Kruskals algoritme 14 5 1 7 13 16 15 11 2 8 12 17 4 3 6 10
Kruskals algoritme Sorter kantene i grafen etter stigende kantvekt Plukk ut kantene én etter én, og legg dem til i treet såfremt dette ikke danner en sykel Fortsett helt til du har et (minimalt) spenntre Kjøretid veldig avhengig av hvordan vi implementerer steg 2 Kan benytte en disjont-forest struktur (ikke pensum) Kjøretid: O(E lg V ) Fun-fact: Denne implementasjonen involverer en funksjon som vokser saktere enn log n (søk på Ackermann-funksjonen) Minimale spenntrær Kruskals algoritme
Denne ukens øvinger • Praksis: Redd Ratatosk • Teori: Traversering