Datastrukturer. föreläsning 9. Maps 1



Relevanta dokument
Datastrukturer. föreläsning 9. Maps 1

Datastrukturer. föreläsning 8. Maps 1

Datastrukturer. föreläsning 10. Maps 1

Datastrukturer. föreläsning 10. Maps 1

Datastrukturer. föreläsning 8. Lecture 6 1

Föreläsning Datastrukturer (DAT036)

Föreläsning Datastrukturer (DAT036)

Föreläsning 7 Datastrukturer (DAT037)

Föreläsning Datastrukturer (DAT037)

Föreläsning 8 Datastrukturer (DAT037)

Lösningar Datastrukturer TDA

Grafer, traversering. Koffman & Wolfgang kapitel 10, avsnitt 4

Föreläsning Datastrukturer (DAT036)

Föreläsning Datastrukturer (DAT037)

Föreläsning Datastrukturer (DAT036)

Graphs (chapter 14) 1

Föreläsning 5 TDDC91,TDDE22,725G97: DALG. Föreläsning i Datastrukturer och algoritmer 18 september 2018

Föreläsning 8 Datastrukturer (DAT037)

Datastrukturer. föreläsning 7. Maps 1

Föreläsning 9 Datastrukturer (DAT037)

Grafer, allmänt. Med datastrukturen graf menas vanligen: en mängd av noder (vertices) och en mängd av bågar (edges).

Datastrukturer. Föreläsning 5. Maps 1

Föreläsning 5: Grafer Del 1

Grafer MST Top. sortering Starkt samm. komponenter Kortaste avstånd. Grafalgoritmer 1. Douglas Wikström KTH Stockholm

Självbalanserande AVL-träd Weiss, avsnitt 4.4

Lösningsförslag till tentamen Datastrukturer, DAT037 (DAT036), Tiden det tar att utföra en iteration av loopen är oberoende av värdet på

TENTAMEN: Algoritmer och datastrukturer. Läs detta! Uppgifterna är inte avsiktligt ordnade efter svårighetsgrad.

Föreläsning Datastrukturer (DAT036)

Tentamen Datastrukturer för D2 DAT 035

Föreläsning 4 Datastrukturer (DAT037)

Föreläsning 2. AVL-träd, Multi-Way -sökträd, B-träd TDDD71: DALG. Innehåll. Innehåll. 1 Binära sökträd

Föreläsning 4 Datastrukturer (DAT037)

Föreläsning 5: Giriga algoritmer. Kruskals och Prims algoritmer

Trädstrukturer och grafer

Lösningsförslag till tentamen Datastrukturer, DAT037,

Träd Hierarkiska strukturer

Självbalanserande träd AVL-träd. Koffman & Wolfgang kapitel 9, avsnitt 1 2

Tentamen Datastrukturer D DAT 036/INN960

ADT Prioritetskö. Föreläsning 13 Innehåll. Prioritetskö vs FIFO-kö. Prioritetskö Exempel på användning. Prioritetsköer och heapar

Föreläsning 5: Giriga algoritmer. Kruskals och Prims algoritmer

Föreläsning 6 Datastrukturer (DAT037)

Föreläsning 13 Datastrukturer (DAT037)

Tentamen Datastrukturer D DAT 036/INN960

Föreläsning 13 Datastrukturer (DAT037)

Tentamen Datastrukturer D DAT 035/INN960

Seminarium 13 Innehåll

ADT Prioritetskö. Föreläsning 12 Innehåll. Prioritetskö. Interface för Prioritetskö. Prioritetsköer och heapar

Föreläsning 9 Innehåll

Föreläsning 10 Innehåll. Prioritetsköer och heapar. ADT Prioritetskö. Interface för Prioritetskö. Exempel på vad du ska kunna

TENTAMEN: Algoritmer och datastrukturer. Läs detta! Uppgifterna är inte avsiktligt ordnade efter svårighetsgrad.

Prov i DAT 312: Algoritmer och datastrukturer för systemvetare

Föreläsning 10. Grafer, Dijkstra och Prim

Tentamen Datastrukturer (DAT036/DAT037/DIT960)

TDDI16 Datastrukturer och algoritmer. Prioritetsköer, heapar, Union/Find

OMTENTAMEN I DATASTRUKTURER OCH ALGORITMER DVG B kl. 08:15 13:15

Ett generellt träd är. Antingen det tomma trädet, eller en rekursiv struktur: rot /. \ /... \ t1... tn

Innehåll. Föreläsning 12. Binärt sökträd. Binära sökträd. Flervägs sökträd. Balanserade binära sökträd. Sökträd Sökning. Sökning och Sökträd

Tentamen kl Uppgift 4. Uppgift 5

Föreläsning 10 Innehåll. Diskutera. Inordertraversering av binära sökträd. Binära sökträd Definition

Föreläsning 10. Grafer, Dijkstra och Prim

Föreläsning 13 Innehåll

Föreläsning 10. Grafer, Dijkstra och Prim

Föreläsning Datastrukturer (DAT037)

Föreläsning 10 Innehåll

Tentamen med lösningsförslag Datastrukturer för D2 DAT 035

Föreläsning 6. Sökträd: AVL-träd, Multi-Way -sökträd, B-träd TDDC70/91: DALG. Innehåll. Innehåll. 1 AVL-träd

TENTAMEN: Algoritmer och datastrukturer. Läs detta!

Programkonstruktion och. Datastrukturer

Föreläsning 6 Datastrukturer (DAT037)

Algoritmer och datastrukturer 2012, fo rela sning 8

Föreläsning 4: Giriga algoritmer. Giriga algoritmer

Föreläsning 11 Innehåll. Diskutera. Binära sökträd Definition. Inordertraversering av binära sökträd

ORDINARIE TENTAMEN I DATASTRUKTURER OCH ALGORITMER DVG B kl. 08:15 13:15

DAI2 (TIDAL) + I2 (TKIEK)

Binära sökträd. Seminarium 9 Binära sökträd Innehåll. Traversering av binära sökträd. Binära sökträd Definition. Exempel på vad du ska kunna

Fredag 10 juni 2016 kl 8 12

Datastrukturer och algoritmer. Föreläsning 15 Inför tentamen

Magnus Nielsen, IDA, Linköpings universitet

Kapitel 9: Grafalgoritmer

Tentamen Datastrukturer (DAT036)

TDDC30. Objektorienterad programmering i Java, datastrukturer och algoritmer. Föreläsning 9 Jonas Lindgren, Institutionen för Datavetenskap, LiU

Datastrukturer, algoritmer och programkonstruktion (DVA104, HT 2014) Föreläsning 5

TDDC30. Objektorienterad programmering i Java, datastrukturer och algoritmer. Föreläsning 8 Erik Nilsson, Institutionen för Datavetenskap, LiU

Datastrukturer. föreläsning 7. Maps 1

TNK049 Optimeringslära

Tentamen Datastrukturer, DAT037 (DAT036)

Tentamen Datastrukturer D DAT 035/INN960 (med mycket kortfattade lösningsförslag)

F11. Läsanvisning: kap 10 + dessa OH. Kruskals algoritm kortaste vägar en till alla

Tentamen Datastrukturer (DAT036)

Lösningsförslag till tentamen Datastrukturer, DAT037,

Upplägg. Binära träd. Träd. Binära träd. Binära träd. Antal löv på ett träd. Binära träd (9) Binära sökträd (10.1)

Föreläsning 7. Träd och binära sökträd

13 Prioritetsköer, heapar

Tommy Färnqvist, IDA, Linköpings universitet

Lösningsförslag för tentamen i Datastrukturer (DAT036) från

Föreläsning 10 Datastrukturer (DAT037)

Ännu mera träd: 2-3-träd, B-träd, rödsvarta träd, träd Weiss, avsnitt 4.7, 11.5, 12.2, etc.

Lösningsförslag för tentamen i Datastrukturer (DAT037) från

Föreläsning 1. Introduktion och sökning i graf. Vad är en algoritm?

Föreläsning 10. Riktade grafer. Viktade grafer. TDDC91,TDDE22,725G97: DALG. Innehåll. Innehåll Riktade grafer A 10.3

Transkript:

Datastrukturer föreläsning 9 Maps 1

Grafer och grafalgoritmer Hur implementerar man grafer? Hur genomsöker (traverserar) man grafer? Hur genomsöker man viktade grafer (och hittar kortaste vägen)? Hur beräknar man alla kortaste vägar samtidigt? (Jfr transitiva höljet) Maps 2

Floyd-Warshalls algoritm för transitiva höljet Grafen G är implementerad som en grannmatris A. Vilken tidskomplexitet har följande algoritm? Algorithm FloydWarshall(G) Output transitive closure G* of G A matrix representing the graph G n number of vertices for k 1 to n do for i 1 to n do for j 1 to n do A(i,j) A(i,j) (A(i,k) A(k,j)) return A Lecture 6 3

Floyd-Warshalls algoritm för att beräkna alla kortaste vägar Den viktade grafen G är implementerad som en grannmatris A. (Hur representerar man saknad båge? Vad är +?) Algorithm FloydWarshall(G) Output G* containing path lengths between nodes in G A matrix representing the graph G n number of vertices for k 1 to n do for i 1 to n do for j 1 to n do A(i,j) min(a(i,j), A(i,k) + A(k,j)) return A Lecture 6 4

Topologisk ordning (sortering) Lecture 6 5

Topologisk ordning (sortering) Betrakta Chalmers kursutbud som en graf. Kurserna är noder Förkunskapskraven är bågar Grafen är acyklisk, dvs den saknar cykler (jfr catch-22 ) Hur bestämmer man en fungerande läsordning? Lecture 6 6

Riktade acykliska grafer och topologiska ordningar En riktad acyklisk graf (directed acyclic graph, DAG) är en riktad graf som inte har några riktade cykler En topologisk ordning är en uppräkning v 1,, v n av noderna i en graf så att för varje båge (v i, v j ) gäller i < j Exempel: graf med kurser och förkunskapskrav. En topologisk ordning ger en följd av kurser som respekterar förkunskapskraven En riktad graf har en topologisk ordning omm grafen är acyklisk v 2 v 1 B A B A Lecture 6 7 D C D C E DAG G v 4 v 5 E v3 Topologisk ordning för G

Topologisk sortering Lagra information om antalet inkommande bågar (u.indegree) för varje nod u Varje gång en nod v besöks räknar vi ned u.indegree för alla grannar u till v. I exemplet med kurser och förkunskapskrav anger u.indegree antalet återstående förkunskapskrav för kursen u Lecture 6 8

Topologisk sortering Indata: DAG G. Utdata: topologisk ordning av G (en lista L av noder) Algorithm TopologicalSort(G) S empty stack (will hold nodes with indegree 0) L empty list (will hold the topological ordering) for all v G.vertices() if v.indegree = 0 then S.push(v) while S.notEmpty() do u S.pop() L.addLast(u) for all w u.adjacentvertices do w.indegree w.indegree 1 if w.indegree = 0 then S.push(w) Lecture 6 9

Minsta uppspännande träd Lecture 6 10

Minsta uppspännande träd Boruvka 1926: hur konstruerar man ett elektriskt nätverk för hela Mähren (del av Tjeckien) som är så billigt som möjligt? Lecture 6 11

Minsta uppspännande träd Uppspännande träd till graf fritt delträd innehåller alla noderna Minsta uppspännande träd (MST) är det uppspännande träd som har minst totalvikt (summera bågarnas vikter) Tillämpningar Kommunikationsnätverk Transportnätverk DEN 4 DFW 1 8 9 ORD 6 STL 10 3 5 ATL PIT DCA 2 7 Lecture 6 12

Kruskals algoritm för MST De snåla kommunalpolitikernas algoritm för att asfaltera vägar i kommunen! 1. Asfaltera den kortaste vägen i kommunen 2. Asfaltera den näst kortaste vägen i kommunen, osv 3. Asfaltera dock aldrig någon väg mellan två noder som redan är förbundna med asfalterade vägar DEN 4 DFW 1 8 9 ORD STL 10 ATL PIT Lecture 6 13 6 5 3 DCA 2 7

Prims algoritm för MST Kommunalpampens algoritm för att asfaltera vägar i kommunen 1. Välj en startnod (kommunalpampens hus) t ex DCA 2. Asfaltera kortaste vägen från DCA. Den går till ATL. 3. Utvidga sedan successivt det sammanbundna asfaltsvägnätet med så korta vägar som möjligt som ger en förbindelse till en ny nod. DEN 4 DFW 1 8 9 ORD 6 STL 10 3 5 ATL PIT DCA 2 7 Lecture 6 14

Prims algoritm för MST Kommunalpampens algoritm för att asfaltera vägar i kommunen 1. Kommunalpampen bor i DCA 2. Asfaltera DCA - ATL (kortaste vägen från DCA) 3. Asfaltera DCA STL (kortaste vägen till ny nod från DCA eller ATL) 4. Asfaltera STL ORD (kortaste vägen till ny nod från DCA, ATL eller STL). Etc. DEN 4 DFW 1 8 9 ORD STL 10 ATL PIT Lecture 6 15 6 5 3 DCA 2 7

Prims algoritm Algoritmen liknar Dijkstras algoritm. Även här har vi en prioritetskö Q med obesökta noder. För varje nod u lagrar vi en båge e = E[u] med vikt w = D[u]. Vikten används som nodens prioritet. Vi bygger dessutom upp ett träd T med besökta noder och bågar som spänner upp dem. När algoritmen terminerar innehåller T ett minsta uppspännande träd. Lecture 6 16

Prims algoritm Algorithm Prim(G,s) D[s] 0, D[u] infinity for all nodes u different from s. E[u] null for all nodes u T new free tree, initially empty Q new priority queue with triples (D[u],(u,E[u])), where weights D[u] are priorities. while Q.isEmpty() (u,e) Q.removeMin() ( visit u along e) add node u and (non-null) edge e to T for each node z adjacent to u such that z is in Q do if weight(u,z) < D[z] then D[z] weight(u,z) and E[z] the edge from u to z update the priority of z in Q return D[u] for each node u Lecture 6 17

Summering, grafalgoritmer Djupet först och bredden först sökning: O(n+m) med grannlista Hitta ev. cykler, uppspännande träd, en väg mellan två givna noder. Upprepad DFS eller BFS på alla noder i grafen ger transitiva höljet O(n(n+m)) Bredden först sökning hittar dessutom kortaste vägen till en viss nod Lecture 6 18

Summering: grafalgoritmer Floyd-Warshall: O(n 3 ) om areadjacent är O(1) Beräknar transitiva höljet av en riktad graf Beräknar alla kortaste vägar samtidigt för viktad riktad graf Topologisk sortering: riktade acykliska grafer O(n+m) med grannlista Sortera grafen. Exempel: graf med förkunskaper för kurser, i vilken ordning kan vi läsa kurserna? Lecture 6 19

Summering: grafalgoritmer Dijkstras algoritm: viktad graf O((m+n)logn) med heap och grafen implementerad med grannlista. O(m+n 2 ) med osorterat fält och grafen implementerad med grannlista (bättre för täta grafer med många bågar). Hittar kortaste avståndet/vikten mellan två noder. Ett slags BFS-sökning för viktade grafer Lecture 6 20

Summering: grafalgoritmer, minsta uppspännande träd Prims algoritm liknar Dijkstras, men prioritetsköerna innehåller bågvikter i stället för längden på kortaste vägen till startnoden. Om grafen är sammanhängande blir komplexiteten för Prims algoritm O(m log n) Kruskal, Prim och Dijkstra är alla exempel på giriga ( greedy ) algoritmer. Se algoritmkursen om allmänna tekniker, t ex även söndra och härska ( divide and conquer ), m fl. Lecture 6 21

Binära sökträd < 6 2 > = 1 4 8 9 Maps 22

Binära sökträd Binära sorterade (ordnade) träd! Har sökträdsegenskapen. Om noden v har vänster barn u och höger barn w så ( key(w key(u) key(v) Om man gör inordertraversering får man en sorterad lista. Maps 23

Sökning Algorithm findelement(k, v) if v = null return NO_SUCH_KEY ( key(v if k < ( v.left return findelement(k, ( key(v else if k = ( element(v return else { k > key(v) } ( v.right return findelement(k, Maps 24

Insättning Operationen insertitem(k,o) sätter in ett nytt par (k,o) på rätt plats Exempel: sätt in ett nytt par med nyckel 5 2 2 < > 1 4 8 1 4 8 5 6 > 6 9 9 Maps 25

Borttagning: fall 0 och 1 Operationen removeelement(k) söker efter nyckeln k och om den finner den tar bort motsvarande nod v Fall 0: om v saknar barn är vi klara. Fall 1: om v har precis ett barn flyttar vi upp delträdet, se fig: ta bort nyckeln 4 2 1 4 8 2 > < v 1 5 8 5 6 6 9 9 Maps 26

Borttagning: fall 2 1 Om noden v som ska tas bort har två barn: Leta upp noden w som kommer efter v i inordning (dvs har närmast större nyckel I sökträdet). w måste vara ett löv. Ersätt v med w! Exempel: ta bort 3! 1 2 2 3 w 5 v 8 6 9 5 v 8 6 9 Maps 27

Tidskomplexitet värsta fallet Antag att det binära sökträdet har n noder och höjden h ( O(n Utrymmet är findelement, insertitem och removeelement är O(h) Höjden h är O(n) i värsta fall O(log n) i bästa fall bästa fallet Maps 28

Hur får man träd med höjden O(log n)? Maps 29

Hur fär man träd med höjden O(log n)? Man balanserar trädet! Finns många metoder för detta! AVL, Splay, Rödsvarta, osv. Maps 30

AVL-träd 1 2 5 2 0 4 1 8 9 3 2 1 11 1 7 Lecture 6 31

AVL-träd AVL-träd är balanserade BST: för alla noder gäller det att höjdskillnaden mellan vänster och höger delträd 0 är högst 1 Sökning fungerar som i vanliga binära sökträd. Insättning och borttagning fungerar också som vanligt, men obalans kan uppstå, så vi måste eventuellt balansera om trädet. 1 2 Lecture 6 32 5 1 8 0 6 3 9 2 1 0 11

Insättning i AVL-träd Sätt först in det nya elementet på samma sätt som i ett vanligt BST! Det nya trädet kan bli obalanserat Balansera om trädet! Exempel: vi har satt in en ny nod med nyckel 7: 0 1 2 Lecture 6 33 5 1 8 1 ny nod obalans 6 4 9 3 2 0 7 0 lokal obalans 11 lokal obalans

Enkelrotation: princip nederst lokal obalans alltför djup nod Balansen återställd Lecture 6 34

Enkelrotation: exempel 5 obalans 9 3 9 5 11 8 11 3 8 10 10 alltför djup nod Balansen återställd Lecture 6 35

Dubbelrotation: princip nederst lokal obalans alltför djup nod Balansen återställd Lecture 6 36

Dubbelrotation: exempel 5 obalans 8 2 9 5 9 6 8 10 alltför djup nod 2 6 10 Balansen återställd Lecture 6 37

Trenodsomstrukturering Enkel och dubbelrotationer kallas med ett gemensamt namn trenodsomstruktueringar. Vi letar upp tre noder: den nedersta noden med lokal obalans samt dess barn och barnbarn så att barnet och barnbarnet tillhör delträd som har blivit alltför djupa. Dessa tre noder bestämmer fyra delträd. Vid enkelrotation gör man barnet till ny förälder med den gamla föräldern och barnbarnet som nya barn. Vid dubbelrotation gör man barnbarnet till ny förälder med gamla föräldern och barnet som nya barn. Lecture 6 38

Borttagning i AVL-träd Borttagning: som i binära sökträd Om obalans uppkommer omstrukturera med rotationer! Omstrukturering i delträd kan ge upphov till obalans högre upp vi kan behöva omstrukturera flera gånger Jfr: insättning räcker att omstrukturera en gång (kring nedersta obalanserade noden)! Lecture 6 39