• No results found

Grafer

N/A
N/A
Protected

Academic year: 2021

Share "Grafer"

Copied!
44
0
0

Loading.... (view fulltext now)

Full text

(1)

TDDI16 – Föreläsning 6

Grafer

(2)

TDDI16 – Föreläsning 6 Filip Strömbäck 1

Planering

Vecka

Lab

36

Komplexitet, Linjära strukturer

----37

Träd, AVL-träd

1---38

Hashning, meet-in-the-middle

12--39

Grafer, graftraversering och kortaste vägen

-2--40

-

--3-41

Sortering

--34

(3)

2 Grafsökning i oviktade grafer

3 Grafsökning i viktade grafer

4 Grafsökning applicerat på andra problem

5 Sammanfattning

(4)

TDDI16 – Föreläsning 6 Filip Strömbäck 3

Vad är en graf?

0

1

2

3

4

5

(5)

Vad är en graf?

0

1

2

3

4

5

noder

bågar

Riktad graf

(6)

TDDI16 – Föreläsning 6 Filip Strömbäck 3

Vad är en graf?

0

1

2

3

4

5

noder

bågar

Oriktad graf

(7)

Hur representeras en graf?

• Formell definition:

G = (V, E)

V : en mängd av alla noder (vertices)

E: en mängd av par motsvarande alla bågar (edges)

• Grannmatris

• Grannlistor

(8)

TDDI16 – Föreläsning 6 Filip Strömbäck 5

Grannmatris (adjacency matrix)

0 1 2 3 4

0

1

2

3

4

4

2

1

1

3

5

0

1

2

3

4

2

4

1

5

1

3

Minnesanvändning

O(|V |

2

)

Finns det en båge från x till y?

O(1)

Vilka bågar finns från x?

O(|V |)

(9)

Grannmatris (adjacency matrix)

0 1 2 3 4

0

1

2

3

4

4

2

1

1

3

5

4

2

1

1

3

5

0

1

2

3

4

2

4

1

5

1

3

Minnesanvändning

O(|V |

2

)

Finns det en båge från x till y?

O(1)

Vilka bågar finns från x?

O(|V |)

(10)

TDDI16 – Föreläsning 6 Filip Strömbäck 6

Grannlista (adjacency list)

0

1

2

3

4

1: 2 2: 4

4: 1

1: 5 3: 1

4: 3

0

1

2

3

4

2

4

1

5

1

3

Minnesanvändning

O(|V | + |E|)

Finns det en båge från x till y?

O(|E|)

Vilka bågar finns från x?

O(|E|)

(11)

Grannlista (adjacency list)

0

1

2

3

4

1: 2 2: 4

4: 1 0: 2 2: 5

1: 5 3: 1 0: 4

4: 3 2: 1

1: 1 3: 3

0

1

2

3

4

2

4

1

5

1

3

Minnesanvändning

O(|V | + |E|)

Finns det en båge från x till y?

O(|E|)

Vilka bågar finns från x?

O(|E|)

(12)

1 Grafer

2 Grafsökning i oviktade grafer

3 Grafsökning i viktade grafer

4 Grafsökning applicerat på andra problem

5 Sammanfattning

(13)

Problem

(14)

TDDI16 – Föreläsning 6 Filip Strömbäck 8

Problem

(15)

Grafdefinition

struct

Node {

vector <

int

> edges ;

bool

visited =

false

;

int

previous ;

};

(16)

TDDI16 – Föreläsning 6 Filip Strömbäck 10

Djupet först (DFS)

bool

dfs(

int

from ,

int

to) {

if

(from == to)

return true

;

for

(

int

x : graph [from ]. edges ) {

if

(! graph[x]. visited ) {

graph[x]. visited =

true

;

if

(dfs(x, to ))

return true

;

}

}

return false

;

}

(17)
(18)

TDDI16 – Föreläsning 6 Filip Strömbäck 11

(19)
(20)

TDDI16 – Föreläsning 6 Filip Strömbäck 11

(21)
(22)

TDDI16 – Föreläsning 6 Filip Strömbäck 11

(23)
(24)

TDDI16 – Föreläsning 6 Filip Strömbäck 12

Bredden först (BFS)

bool

bfs(

int

from ,

int

to) {

queue <

int

> q; q.push(from );

graph[from ]. visited =

true

;

while

(!q. empty ()) {

int

current = q.top (); q.pop ();

for

(

int

x : graph [ current ]. edges ) {

// om x är vårt mål är vi klara

// om x inte redan är besökt , markera

// den som besökt och lägg på kö

}

}

}

(25)
(26)

TDDI16 – Föreläsning 6 Filip Strömbäck 13

(27)
(28)

TDDI16 – Föreläsning 6 Filip Strömbäck 13

(29)
(30)

TDDI16 – Föreläsning 6 Filip Strömbäck 13

(31)
(32)

TDDI16 – Föreläsning 6 Filip Strömbäck 13

(33)

2 Grafsökning i oviktade grafer

3 Grafsökning i viktade grafer

4 Grafsökning applicerat på andra problem

5 Sammanfattning

(34)

TDDI16 – Föreläsning 6 Filip Strömbäck 15

BFS i en viktad graf

0

1

2

3

4

5

1

3

5

1

2

4

1

2

Vilken väg väljs?

(35)

Inte så bra...

• Eftersom vi använder en kö antar BFS att alla bågar

har samma vikt...

• Alltså ger den lösningen som traverserar minst antal

noder

Idé:

• Vad händer om vi i stället hela tiden väljer den nod i

kön som representerar kortast sträcka?

(36)

TDDI16 – Föreläsning 6 Filip Strömbäck 17

Dijkstra

bool

bfs(

int

from ,

int

to) {

priority_queue <... > q; q.push(from );

while

(!q. empty ()) {

int

current = q.top (); q.pop ();

graph [ current ]. visited =

true

;

// om current är vårt mål är vi klara

for

(

int

x : graph [ current ]. edges ) {

// om x inte redan är besökt , markera

// den som besökt och lägg på kö

}

}

}

(37)

Dijkstra – egenskaper

Hittar kortaste vägen i en viktad graf

• Tid: O(|E| + |V | log(|V |))

• BFS är ofta bättre på oviktade grafer

• Kan optimeras med hjälp av heurustik: A

• Förutsätter att det inte finns några negativa cykler

Bellman-Ford klarar negativa cykler, men tar

O(|E||V |)

• Att hitta kortaste vägen mellan alla par av noder görs

snabbare med

Floyd-Warshall, vilken tar

O(|V |

3

) jämfört med

(38)

1 Grafer

2 Grafsökning i oviktade grafer

3 Grafsökning i viktade grafer

4 Grafsökning applicerat på andra problem

5 Sammanfattning

(39)

Problem

Du har hittat ett gammalt kodlås som du vill låsa upp. Du

vet att koden är 3146, och just nu visar siffrorna på låset

0000. Låset har knappar för att öka eller minska de olika

siffrorna, dock är många av knapparna trasiga. Hur skriver

du in koden med så få knapptryck som möjligt?

(40)

TDDI16 – Föreläsning 6 Filip Strömbäck 21

Lösningsidé

Representera problemet som en riktad graf:

• En nod för varje kombination

• Varje båge motsvarar ett knapptryck

0000

1100

0011

0990

2200

1111

1090

0901

(41)

Lösningsidé

Representera problemet som en riktad graf:

• Oviktad graf ⇒ BFS

• Varje väg motsvarar en lösning!

0000

1100

0011

0990

2200

1111

1090

0901

(42)

1 Grafer

2 Grafsökning i oviktade grafer

3 Grafsökning i viktade grafer

4 Grafsökning applicerat på andra problem

5 Sammanfattning

(43)

I kursen framöver

• Denna veckan

Se till att börja på lab 3 under veckan

• Nästa föreläsning

Fler grafalgoritmer, uppspännande träd etc.

• Uppgifter i Kattis

hidingplaces (enkel)

Var är det bäst att gömma sig från en springare på

ett schackbräde?

coast (svårare)

(44)

Filip Strömbäck

www.liu.se

References

Related documents

Grafen visar sambandet mellan kostnad och antalet minuter man ringer med mobiltelefon från USA till Sverige.. På Grönan kan man välja två olika sätt att betala när

Kring den genomförda studien på ABB Machines finns ett fåtal områden som i efterhand kunde ha genomförts annorlunda, men ansågs inte vara möjlig eller ansågs irrelevant

• En graf är sammanhängande om det finns en stig mellan varje par av noder. • En sammanhängande komponent i en graf G är en maximal sammanhängande delgraf

• Det finns ett träd av kortaste vägar från en startnod till alla andra noder Exempel. Ett träd av kortaste vägar

Det huvudsakliga målet med experimentet är alltså att jämföra olika JavaScriptbibliotek för visualisering av statistik för att kunna dra en slutsats om vilket av biblioteken som

Här redogörs för vad det innebär att kunna läsa och skriva, olika faktorer som främjar läs- och skrivutveckling samt hur man främjar alla elevers läs- och skrivutveckling..

En annan kategori, där 12 procent av respondenterna svarat, handlar i det stora hela om att de har en långsam och trygg inskolning för att barnet successivt ska känna trygghet

Syfte: Syftet med studien är att undersöka vilka faktorer som skapar värde för ett fastighetsbolag som är verksamt på ett långsiktigt perspektiv samt vilken betydelse