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

Relevanta dokument
Graphs (chapter 14) 1

Föreläsning 8 Datastrukturer (DAT037)

Föreläsning Datastrukturer (DAT037)

Föreläsning 8 Datastrukturer (DAT037)

Föreläsning Datastrukturer (DAT036)

Datastrukturer. föreläsning 9. Maps 1

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

Quicksort. Koffman & Wolfgang kapitel 8, avsnitt 9

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 8. Maps 1

Föreläsning Datastrukturer (DAT036)

Föreläsning Datastrukturer (DAT036)

Föreläsning Datastrukturer (DAT037)

Föreläsning 7 Datastrukturer (DAT037)

Lösningar Datastrukturer TDA

Föreläsning 6 Datastrukturer (DAT037)

Datastrukturer. föreläsning 9. Maps 1

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

Trädstrukturer och grafer

FÖRELÄSNING 11 DATALOGI I

Övning 3 - Tillämpad datalogi 2012

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

Föreläsning Datastrukturer (DAT036)

Föreläsning 5: Grafer Del 1

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

Näst nästa gång: Nästa gång: mer grafer (kap 10) Grafer 1 1. ! uppspännande träd. ! minimala uppspännande träd. ! Prims algoritm. !

Avancerad Problemlösning och Programmering i Praktiken

träd dag graf båge och vikt Grafer definitioner och terminologi

Datastrukturer. föreläsning 7. Maps 1

Föreläsning 4. Kö Implementerad med array Implementerad med länkad lista Djup kontra bredd Bredden först mha kö

Algoritmer och Komplexitet ht 08. Övning 6. NP-problem

Lösningsförslag till tentamen Datastrukturer, DAT037,

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

Fredag 10 juni 2016 kl 8 12

Föreläsning 4: Kombinatorisk sökning

Tentamen Datastrukturer (DAT037)

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

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

NP-fullständighetsbevis

Preschool Kindergarten

Isometries of the plane

Tentamen Datastrukturer D DAT 036/INN960

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

TDDC70/TDDC91 Datastrukturer och algoritmer Övningsuppgifter hösten 2013

Algoritmer och datastrukturer, föreläsning 11

Föreläsningsanteckningar F6

Tentamen Datastrukturer (DAT036)

English. Things to remember

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

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

Tentamen Datastrukturer D DAT 036/INN960

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

Datastrukturer och algoritmer. Föreläsning 4 Test, Stack och Kö

Tentamen Datastrukturer för D2 DAT 035

Datastrukturer. föreläsning 7. Maps 1

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

Avbildningar och hashtabeller. Koffman & Wolfgang kapitel 7, mestadels avsnitt 2 4

Algoritmer och datastrukturer TDA Fredrik Johansson

Support Manual HoistLocatel Electronic Locks

Föreläsning 6 Datastrukturer (DAT037)

Abstrakta datatyper. Primitiva vektorer. Deklarera en vektor

Teoretisk del. Facit Tentamen TDDC kl (6) 1. (6p) "Snabba frågor" Alla svar motiveras väl.

Tentamen Datastrukturer (DAT036)

Tentamen Datastrukturer D DAT 036/DIT960

1. Unpack content of zip-file to temporary folder and double click Setup

Vässa kraven och förbättra samarbetet med hjälp av Behaviour Driven Development Anna Fallqvist Eriksson

729G04 - Diskret matematik. Lektion 4

Tentamen'('Datastrukturer,'algoritmer'och'programkonstruktion.'

Tentamen Datastrukturer, DAT037 (DAT036)

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

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

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

Föreläsning 2. Kortaste vägar i grafer.

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

Datastrukturer och Algoritmer D0041D

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)

Optimering Kruskal s algoritm Prim-Jarník s algoritm

BINÄRA TRÄD. (X = pekarvärdet NULL): struct int_bt_node *pivot, *ny; X X X 12 X X 12 X X -3 X X

TNK049 Optimeringslära

samhälle Susanna Öhman

Några svar till TDDC70/91 Datastrukturer och algoritmer

Föreläsning 9 Innehåll. Söndra och härska. Fibonaccitalen. Söndra och härska. Divide and conquer teknik för att konstruera rekursiva algoritmer.

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

Tentamen Datastrukturer (DAT036)

Discovering!!!!! Swedish ÅÄÖ. EPISODE 6 Norrlänningar and numbers Misi.se

Föreläsning 4 Datastrukturer (DAT037)

Föreläsning Datastrukturer (DAT036)

Övning 2. (Länkade) Listor, noder

Kapitel 9: Grafalgoritmer

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

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

Grundläggande datalogi - Övning 3

Datastrukturer och algoritmer

Webbregistrering pa kurs och termin

Föreläsning 2: Grafer. Exempel på graf

Exempeltenta GruDat 2002/2003

Installation av F13 Bråvalla

Träd, binära träd och sökträd. Koffman & Wolfgang kapitel 6, avsnitt 1 4

Grafer. 1 Grafer. Grunder i matematik och logik (2015) 1.1 Oriktade grafer. Marco Kuhlmann

Beijer Electronics AB 2000, MA00336A,

Transkript:

Grafer, traversering Koffman & Wolfgang kapitel 1, avsnitt 4 1

Traversering av grafer De flesta grafalgoritmer innebär att besöka varje nod i någon systematisk ordning precis som med träd så finns det olika sätt att göra detta på De två vanligaste metoderna är: bredden-först-sökning djupet-först-sökning

BFS: Bredden-först-sökning Vid bredden-först så besöker vi noderna i följande ordning: besök startnoden först sedan alla angränsande noder sedan alla noder som kan nås via två bågar sedan alla noder som kan nås via tre bågar och så vidare Vi besöker alltså alla noder som kan nås i k steg, innan vi besöker de noder som kan nås i k+1 steg. Eftersom ingen nod är speciell så antar vi för enkelhets skull att nod nr är startnoden. 3

Example of a Breadth-First Search 5 4 3 1 6 7 9 8 unvisited visited identified

Example of a Breadth-First 5 Identify the start node 4 3 1 6 7 9 8 unvisited visited identified

Example of a Breadth-First While visiting it, we can identify its adjacent nodes 4 5 3 1 6 7 9 8 unvisited visited identified

Example of a Breadth-First We identify its adjacent nodes and add them to a queue of identified nodes 4 5 3 1 6 7 Visit sequence: 9 8 unvisited visited identified

Example of a Breadth-First We identify its adjacent nodes and add them to a queue of identified nodes 4 5 3 1 6 Queue: 1, 3 7 Visit sequence: 9 8 unvisited visited identified

Example of a Breadth-First 5 We color the node as visited 4 3 1 6 Queue: 1, 3 Visit sequence: 9 8 7 unvisited visited identified

Example of a Breadth-First The queue determines which nodes to visit next 4 5 3 1 6 Queue: 1, 3 7 Visit sequence: 9 8 unvisited visited identified

Example of a Breadth-First Visit the first node in the queue, 1 4 5 3 1 6 Queue: 1, 3 7 Visit sequence: 9 8 unvisited visited identified

Example of a Breadth-First Visit the first node in the queue, 1 4 5 3 1 6 Queue: 3 7 Visit sequence:, 1 9 8 unvisited visited identified

Example of a Breadth-First Select all its adjacent nodes that have not been visited or identified 4 5 3 1 6 Queue: 3 7 Visit sequence:, 1 9 8 unvisited visited identified

Example of a Breadth-First Select all its adjacent nodes that have not been visited or identified 4 5 3 1 6 Queue: 3,, 4, 6, 7 7 Visit sequence:, 1 9 8 unvisited visited identified

Example of a Breadth-First 5 Now that we are done with 1, we color it as visited 4 3 1 6 Queue: 3,, 4, 6, 7 Visit sequence:, 1 9 8 7 unvisited visited identified

Example of a Breadth-First and then visit the next node in the queue, 3 (which was identified in the first selection) 3 1 4 5 6 Queue: 3,, 4, 6, 7 7 Visit sequence:, 1 9 8 unvisited visited identified

Example of a Breadth-First and then visit the next node in the queue, 3 (which was identified in the first selection) 3 1 4 5 6 Queue:, 4, 6, 7 7 Visit sequence:, 1, 3 9 8 unvisited visited identified

Example of a Breadth-First 3 has two adjacent vertices. has already been visited and has already been identified. We are done with 3 3 1 4 5 6 Queue:, 4, 6, 7 7 Visit sequence:, 1, 3 9 8 unvisited visited identified

Example of a Breadth-First 5 The next node in the queue is 4 3 1 6 Queue:, 4, 6, 7 Visit sequence:, 1, 3 9 8 7 unvisited visited identified

Example of a Breadth-First 5 The next node in the queue is 4 3 1 6 Queue: 4, 6, 7 Visit sequence:, 1, 3, 9 8 7 unvisited visited identified

Example of a Breadth-First 8 and 9 are the only adjacent vertices not already visited or identified 4 5 3 1 6 Queue: 4, 6, 7, 8, 9 7 Visit sequence:, 1, 3, 9 8 unvisited visited identified

Example of a Breadth-First 5 4 is next 4 3 1 6 Queue: 6, 7, 8, 9 Visit sequence:, 1, 3,, 4 9 8 7 unvisited visited identified

Example of a Breadth-First 5 is the only vertex not already visited or identified 4 5 3 1 6 Queue: 6, 7, 8, 9, 5 7 Visit sequence:, 1, 3,, 4 9 8 unvisited visited identified

Example of a Breadth-First 6 has no vertices not already visited or identified 4 5 3 1 6 Queue: 7, 8, 9, 5 7 Visit sequence:, 1, 3,, 4, 6 9 8 unvisited visited identified

Example of a Breadth-First 6 has no vertices not already visited or identified 4 5 3 1 6 Queue: 7, 8, 9, 5 7 Visit sequence:, 1, 3,, 4, 6 9 8 unvisited visited identified

Example of a Breadth-First 7 has no vertices not already visited or identified 4 5 3 1 6 Queue: 8, 9, 5 7 Visit sequence:, 1, 3,, 4, 6, 7 9 8 unvisited visited identified

Example of a Breadth-First 7 has no vertices not already visited or identified 4 5 3 1 6 Queue: 8, 9, 5 7 Visit sequence:, 1, 3,, 4, 6, 7 9 8 unvisited visited identified

Example of a Breadth-First 5 We go back to the vertices of and visit them 4 3 1 6 Queue: 8, 9, 5 Visit sequence:, 1, 3,, 4, 6, 7 9 8 7 unvisited visited identified

Example of a Breadth-First 8 has no vertices not already visited or identified 4 5 3 1 6 Queue: 9, 5 7 Visit sequence:, 1, 3,, 4, 6, 7, 8 9 8 unvisited visited identified

Example of a Breadth-First 9 has no vertices not already visited or identified 4 5 3 1 6 Queue: 5 7 Visit sequence:, 1, 3,, 4, 6, 7, 8, 9 9 8 unvisited visited identified

Example of a Breadth-First 5 Finally we visit 5 4 3 1 6 Queue: 5 Visit sequence:, 1, 3,, 4, 6, 7, 8, 9 9 8 7 unvisited visited identified

Example of a Breadth-First which has no vertices not already visited or identified 4 5 3 1 6 Queue: empty 7 Visit sequence:, 1, 3,, 4, 6, 7, 8, 9, 5 9 8 unvisited visited identified

Example of a Breadth-First The queue is empty; all vertices have been visited 4 5 3 1 6 Queue: empty 7 Visit sequence:, 1, 3,, 4, 6, 7, 8, 9, 5 9 8 unvisited visited identified

Algoritm för bredden-först

Bredden-först-sökträdet Vi kan bygga ett träd som består av de bågar som vi faktiskt utnyttjade vid sökningen. Detta träd har alla noder och en del av bågarna från originalgrafen. Informationen som behövs för att representera sökträdet, kan lagras i ett fält: Där lagrar vi föräldern till varje båge när den identifieras. Vi kan förfina steg 7 i algoritmen såhär: 7.1. Stoppa in nod v i kön 7.. Sätt v:s förälder till u 35

DFS: Djupet-först-sökning Vid djupet-först-sökning så besöker vi noderna i följande ordning: besök startnoden först välj en angränsande nod att besöka sedan en angränsande nod till denna och så vidare tills det inte finns några fler noder sedan backar vi och kollar ifall vi kan hitta en annan angränsande båge och så vidare 36

Example of a Depth-First Search 1 3 4 5 6 unvisited visited being visited

Example of a Depth-First Mark as being visited 1 Discovery (Visit) order: Finish order: 3 4 5 6 unvisited visited being visited

Example of a Depth-First Choose an adjacent vertex that is not being visited 1 Discovery (Visit) order: Finish order: 3 4 5 6 unvisited visited being visited

Example of a Depth-First Choose an adjacent vertex that is not being visited 1 Discovery (Visit) order:, 1 Finish order: 3 4 5 6 unvisited visited being visited

Example of a Depth-First (Recursively) choose an adjacent vertex that is not being visited 1 Discovery (Visit) order:, 1, 3 Finish order: 3 4 5 6 unvisited visited being visited

Example of a Depth-First (Recursively) choose an adjacent vertex that is not being visited 1 Discovery (Visit) order:, 1, 3 Finish order: 3 4 5 6 unvisited visited being visited

Example of a Depth-First (Recursively) choose an adjacent vertex that is not being visited 1 Discovery (Visit) order:, 1, 3, 4 Finish order: 3 4 5 6 unvisited visited being visited

Example of a Depth-First There are no vertices adjacent to 4 that are not being visited 1 Discovery (Visit) order:, 1, 3, 4 Finish order: 3 4 5 6 unvisited visited being visited

Example of a Depth-First Mark 4 as visited 1 Discovery (Visit) order:, 1, 3, 4 Finish order: 4 3 4 5 6 unvisited visited being visited

Example of a Depth-First Return from the recursion to 3; all adjacent nodes to 3 are being visited 1 Finish order: 4 3 4 5 6 unvisited visited being visited

Example of a Depth-First Mark 3 as visited 1 Finish order: 4, 3 3 4 5 6 unvisited visited being visited

Example of a Depth-First Return from the recursion to 1 1 Finish order: 4, 3 3 4 5 6 unvisited visited being visited

Example of a Depth-First All vertices adjacent to 1 are being visited 1 Finish order: 4, 3 3 4 5 6 unvisited visited being visited

Example of a Depth-First Mark 1 as visited 1 Finish order: 4, 3, 1 3 4 5 6 unvisited visited being visited

Example of a Depth-First Return from the recursion to 1 Finish order: 4, 3, 1 3 4 5 6 unvisited visited being visited

Example of a Depth-First is adjacent to 1 and is not being visited 1 Finish order: 4, 3, 1 3 4 5 6 unvisited visited being visited

Example of a Depth-First is adjacent to 1 and is not being visited 1 Discovery (Visit) order:, 1, 3, 4, Finish order: 4, 3, 1 3 4 5 6 unvisited visited being visited

Example of a Depth-First 5 is adjacent to and is not being visited 1 Discovery (Visit) order:, 1, 3, 4, Finish order: 4, 3, 1 3 4 5 6 unvisited visited being visited

Example of a Depth-First 5 is adjacent to and is not being visited 1 Discovery (Visit) order:, 1, 3, 4,, 5 Finish order: 4, 3, 1 3 4 5 6 unvisited visited being visited

Example of a Depth-First 6 is adjacent to 5 and is not being visited 1 Discovery (Visit) order:, 1, 3, 4,, 5 Finish order: 4, 3, 1 3 4 5 6 unvisited visited being visited

Example of a Depth-First 6 is adjacent to 5 and is not being visited 1 Discovery (Visit) order:, 1, 3, 4,, 5, 6 Finish order: 4, 3, 1 3 4 5 6 unvisited visited being visited

Example of a Depth-First There are no vertices adjacent to 6 not being visited; mark 6 as visited 1 Discovery (Visit) order:, 1, 3, 4,, 5, 6 Finish order: 4, 3, 1 3 4 5 6 unvisited visited being visited

Example of a Depth-First There are no vertices adjacent to 6 not being visited; mark 6 as visited 1 Discovery (Visit) order:, 1, 3, 4,, 5, 6 Finish order: 4, 3, 1, 6 3 4 5 6 unvisited visited being visited

Example of a Depth-First Return from the recursion to 5 1 Finish order: 4, 3, 1, 6 3 4 5 6 unvisited visited being visited

Example of a Depth-First Mark 5 as visited 1 Finish order: 4, 3, 1, 6 3 4 5 6 unvisited visited being visited

Example of a Depth-First Mark 5 as visited 1 Finish order: 4, 3, 1, 6, 5 3 4 5 6 unvisited visited being visited

Example of a Depth-First Return from the recursion to 1 Finish order: 4, 3, 1, 6, 5 3 4 5 6 unvisited visited being visited

Example of a Depth-First Mark as visited 1 Finish order: 4, 3, 1, 6, 5 3 4 5 6 unvisited visited being visited

Example of a Depth-First Mark as visited 1 Finish order: 4, 3, 1, 6, 5, 3 4 5 6 unvisited visited being visited

Example of a Depth-First Return from the recursion to 1 Finish order: 4, 3, 1, 6, 5, 3 4 5 6 unvisited visited being visited

Example of a Depth-First There are no nodes adjacent to not being visited 1 Finish order: 4, 3, 1, 6, 5, 3 4 5 6 unvisited visited being visited

Example of a Depth-First Mark as visited 1 Discovery (Visit) order:, 1, 3, 4,, 5, 6, Finish order: 4, 3, 1, 6, 5,, 3 4 5 6 unvisited visited being visited

Upptäcktsordning Upptäcktsordningen (discovery order) är den ordning vilken noderna upptäcks:, 1, 3, 4,, 5, 6 i detta exempel Avslutningsordningen (finish order) är ordningen i vilken noderna avslutas 4, 3, 1, 6, 5,, i detta exempel vi kan lagra bakåtpekare, precis som vi gjorde för bredden-först 69

7 Algoritm för bredden-först

Algoritm för bredden-först Djupet-först kan implementeras på exakt samma sätt som bredden-först, fast med en stack istället för en kö 7

Algoritm för bredden-först djupet Depth stack stack stack stack Djupet-först kan implementeras på exakt samma sätt som bredden-först, fast med en stack istället för en kö 7

Djupet-först, rekursivt Men det går lika bra med en rekursiv implementation, eftersom det är ett sätt att dölja att man använder en stack Dessutom kan vi spara avslutningsordningen enkelt (finish order) 71

Komplexitet för BFS/DFS Varje båge testas maximalt en gång (två gånger för oriktade grafer) I värsta fallet blir det alltså E tester ( E för oriktade grafer) Dvs, komplexiteten är O( E ) (även för oriktade grafer) Detta gäller både bredden-först och djupet-först 7

Exempel: Kortaste vägen För att hitta kortaste vägen genom en labyrint, kan vi representera labyrinten som en graf: 73

Exempel: Kortaste vägen Bredden-först-sökning ger den kortaste vägen: dvs, minsta antalet korsningar, inte celler! 74

DAG: Riktade acykliska grafer Detta är en DAG (directed acyclic graph) en riktad graf utan cykler i en DAG kan man bara gå framåt, det finns ingen väg tillbaks 75

Exempel: Topologisk sortering En topologisk sortering av noderna i en DAG, är att lista noderna i en sådan ordning att om (u, v) är en båge, så kommer u före v i listan varje DAG har minst en topologisk sortering, ofta fler än en 1345678 är en giltig topologisk sortering av denna DAG, men 1534678 är det inte 76

Exempel: Topologisk sortering Antag att vi gör en djupet-först-sökning av en DAG: om det finns en båge (u, v) i grafen, så måste u bli klar efter att v är klar dvs, u måste komma efter v i avslutningsordningen En enkel algoritm för topologisk sortering blir alltså: gör en djupet-först-sökning av grafen lista noderna i omvänd avslutningsordning 77