• No results found

BreadthFirstSearch

N/A
N/A
Protected

Academic year: 2020

Share "BreadthFirstSearch"

Copied!
76
0
0

Loading.... (view fulltext now)

Full text

(1)
(2)

Applications

Find shortest path between vertices

Find if/where an element is in a graph

Several algorithms build upon BFS

Djikstra’s algorithm

Primm’s algorithm

Ford-Fulkersons algorithm

(3)

Basic Algorithm

Start at some vertex

Search for another vertex

Search by looking at closest vertices

Continue search by looking at the next closest

vertices

(4)

Algorithm Details

Graph can be represented as an adjacency matrix

In addition each vertex has the following

Parent vertex

Distance from source

State

Undiscovered

Discovered_A

– with at least one undiscovered adjacent vertex

Discovered_N

– with no undiscovered adjacent vertices

(5)

Algorithm Details

Maintain a FIFO queue of visited vertices

Add the source vertex to the queue

While the queue is not empty or desired vertex

is not found

Remove first vertex (U) in the queue

For each adjacent vertex (V) to vertex U

If V has not been discovered

Set state to Discovered_A

Set distance to U.distance + 1

(6)

Example Notes

Vertex State

Undiscovered = White

Discovered_A = Yellow

Discovered_N = Black

Edge State

Unvisited = Black

Visited = Yellow

(7)

Example 1 Notes

Source vertex = A

Searching to find shortest path to all other

(8)

Example 1

8

B

A

D

C

E

F

G

H

J

I

K

L

(9)

Example 1

Vertex

Parent

Vertex

From Source

Distance

State

A NULL NULL Undiscovered

B NULL NULL Undiscovered

C NULL NULL Undiscovered

D NULL NULL Undiscovered

E NULL NULL Undiscovered

F NULL NULL Undiscovered

G NULL NULL Undiscovered

H NULL NULL Undiscovered

I NULL NULL Undiscovered

J NULL NULL Undiscovered

K NULL NULL Undiscovered

(10)

Example 1

10

B

A

D

C

E

F

G

H

J

I

K

L

Queue

A

• Set state of A to Discovered_A • Set parent of A to null

(11)

Example 1

Vertex

Parent

Vertex

From Source

Distance

State

A NULL 0 Discovered_A

B NULL NULL Undiscovered

C NULL NULL Undiscovered

D NULL NULL Undiscovered

E NULL NULL Undiscovered

F NULL NULL Undiscovered

G NULL NULL Undiscovered

H NULL NULL Undiscovered

I NULL NULL Undiscovered

J NULL NULL Undiscovered

K NULL NULL Undiscovered

(12)

Example 1

12

B

A

D

C

E

F

G

H

J

I

K

L

Queue

(13)

Example 1

B

A

D

C

E

F

G

H

J

I

K

L

Queue

B

• Visit vertex B

• Add vertex B to the queue • Set parent of vertex B to A

(14)

Example 1

14

Vertex

Parent

Vertex

From Source

Distance

State

A NULL 0 Discovered_A

B A 1 Discovered_A

C NULL NULL Undiscovered

D NULL NULL Undiscovered

E NULL NULL Undiscovered

F NULL NULL Undiscovered

G NULL NULL Undiscovered

H NULL NULL Undiscovered

I NULL NULL Undiscovered

J NULL NULL Undiscovered

K NULL NULL Undiscovered

(15)

Example 1

B

A

D

C

E

F

G

H

J

I

K

L

Queue

C B

• Visit vertex C

• Add vertex C to the queue • Set parent of vertex C to A

(16)

Example 1

16

Vertex

Parent

Vertex

From Source

Distance

State

A NULL 0 Discovered_A

B A 1 Discovered_A

C A 1 Discovered_A

D NULL NULL Undiscovered

E NULL NULL Undiscovered

F NULL NULL Undiscovered

G NULL NULL Undiscovered

H NULL NULL Undiscovered

I NULL NULL Undiscovered

J NULL NULL Undiscovered

K NULL NULL Undiscovered

(17)

Example 1

B

A

D

C

E

F

G

H

J

I

K

L

Queue

D C B

• Visit vertex D

• Add vertex D to the queue • Set parent of vertex D to A

(18)

Example 1

18

Vertex

Parent

Vertex

From Source

Distance

State

A NULL 0 Discovered_A

B A 1 Discovered_A

C A 1 Discovered_A

D A 1 Discovered_A

E NULL NULL Undiscovered

F NULL NULL Undiscovered

G NULL NULL Undiscovered

H NULL NULL Undiscovered

I NULL NULL Undiscovered

J NULL NULL Undiscovered

K NULL NULL Undiscovered

(19)

Example 1

B

A

D

C

E

F

G

H

J

I

K

L

Queue

D C B

(20)

Example 1

20

Vertex

Parent

Vertex

From Source

Distance

State

A NULL 0 Discovered_N

B A 1 Discovered_A

C A 1 Discovered_A

D A 1 Discovered_A

E NULL NULL Undiscovered

F NULL NULL Undiscovered

G NULL NULL Undiscovered

H NULL NULL Undiscovered

I NULL NULL Undiscovered

J NULL NULL Undiscovered

K NULL NULL Undiscovered

(21)

Example 1

B

A

D

C

E

F

G

H

J

I

K

L

Queue

D C

(22)

Example 1

22

B

A

D

C

E

F

G

H

J

I

K

L

Queue

E D C

• Visit vertex E

• Add vertex E to the queue • Set parent of vertex E to B

• Set distance of vertex E to distance of B + 1

(23)

Example 1

Vertex

Parent

Vertex

From Source

Distance

State

A NULL 0 Discovered_N

B A 1 Discovered_A

C A 1 Discovered_A

D A 1 Discovered_A

E B 2 Discovered_A

F NULL NULL Undiscovered

G NULL NULL Undiscovered

H NULL NULL Undiscovered

I NULL NULL Undiscovered

J NULL NULL Undiscovered

K NULL NULL Undiscovered

(24)

Example 1

24

B

A

D

C

E

F

G

H

J

I

K

L

Queue

F E D C

• Visit vertex F

• Add vertex F to the queue • Set parent of vertex F to B

• Set distance of vertex F to distance of B + 1

(25)

Example 1

Vertex

Parent

Vertex

From Source

Distance

State

A NULL 0 Discovered_N

B A 1 Discovered_A

C A 1 Discovered_A

D A 1 Discovered_A

E B 2 Discovered_A

F B 2 Discovered_A

G NULL NULL Undiscovered

H NULL NULL Undiscovered

I NULL NULL Undiscovered

J NULL NULL Undiscovered

K NULL NULL Undiscovered

(26)

Example 1

26

B

A

D

C

E

F

G

H

J

I

K

L

Queue

F E D C

(27)

Example 1

Vertex

Parent

Vertex

From Source

Distance

State

A NULL 0 Discovered_N

B A 1 Discovered_N

C A 1 Discovered_A

D A 1 Discovered_A

E B 2 Discovered_A

F B 2 Discovered_A

G NULL NULL Undiscovered

H NULL NULL Undiscovered

I NULL NULL Undiscovered

J NULL NULL Undiscovered

K NULL NULL Undiscovered

(28)

Example 1

28

B

A

D

C

E

F

G

H

J

I

K

L

Queue

F E D

(29)

Example 1

B

A

D

C

E

F

G

H

J

I

K

L

Queue

F E D

• Visit vertex F

(30)

Example 1

30

B

A

D

C

E

F

G

H

J

I

K

L

Queue

F E D

(31)

Example 1

Vertex

Parent

Vertex

From Source

Distance

State

A NULL 0 Discovered_N

B A 1 Discovered_N

C A 1 Discovered_N

D A 1 Discovered_A

E B 2 Discovered_A

F B 2 Discovered_A

G NULL NULL Undiscovered

H NULL NULL Undiscovered

I NULL NULL Undiscovered

J NULL NULL Undiscovered

K NULL NULL Undiscovered

(32)

Example 1

32

B

A

D

C

E

F

G

H

J

I

K

L

Queue

F E

(33)

Example 1

B

A

D

C

E

F

G

H

J

I

K

L

Queue

G F E

• Visit vertex G

• Add vertex G to the queue • Set parent of vertex G to D

(34)

Example 1

34

Vertex

Parent

Vertex

From Source

Distance

State

A NULL 0 Discovered_N

B A 1 Discovered_N

C A 1 Discovered_N

D A 1 Discovered_A

E B 2 Discovered_A

F B 2 Discovered_A

G D 2 Discovered_A

H NULL NULL Undiscovered

I NULL NULL Undiscovered

J NULL NULL Undiscovered

K NULL NULL Undiscovered

(35)

Example 1

B

A

D

C

E

F

G

H

J

I

K

L

Queue

H G F E

• Visit vertex H

• Add vertex H to the queue • Set parent of vertex H to D

(36)

Example 1

36

Vertex

Parent

Vertex

From Source

Distance

State

A NULL 0 Discovered_N

B A 1 Discovered_N

C A 1 Discovered_N

D A 1 Discovered_A

E B 2 Discovered_A

F B 2 Discovered_A

G D 2 Discovered_A

H D 2 Discovered_A

I NULL NULL Undiscovered

J NULL NULL Undiscovered

K NULL NULL Undiscovered

(37)

Example 1

B

A

D

C

E

F

G

H

J

I

K

L

Queue

H G F E

(38)

Example 1

38

Vertex

Parent

Vertex

From Source

Distance

State

A NULL 0 Discovered_N

B A 1 Discovered_N

C A 1 Discovered_N

D A 1 Discovered_N

E B 2 Discovered_A

F B 2 Discovered_A

G D 2 Discovered_A

H D 2 Discovered_A

I NULL NULL Undiscovered

J NULL NULL Undiscovered

K NULL NULL Undiscovered

(39)

Example 1

B

A

D

C

E

F

G

H

J

I

K

L

Queue

H G F

(40)

Example 1

40

B

A

D

C

E

F

G

H

J

I

K

L

Queue

H G F

(41)

Example 1

Vertex

Parent

Vertex

From Source

Distance

State

A NULL 0 Discovered_N

B A 1 Discovered_N

C A 1 Discovered_N

D A 1 Discovered_N

E B 2 Discovered_N

F B 2 Discovered_A

G D 2 Discovered_A

H D 2 Discovered_A

I NULL NULL Undiscovered

J NULL NULL Undiscovered

K NULL NULL Undiscovered

(42)

Example 1

42

B

A

D

C

E

F

G

H

J

I

K

L

Queue

H G

(43)

Example 1

B

A

D

C

E

F

G

H

J

I

K

L

Queue

I H G

• Visit vertex I

• Add vertex I to the queue • Set parent of vertex I to F

(44)

Example 1

44

Vertex

Parent

Vertex

From Source

Distance

State

A NULL 0 Discovered_N

B A 1 Discovered_N

C A 1 Discovered_N

D A 1 Discovered_N

E B 2 Discovered_N

F B 2 Discovered_A

G D 2 Discovered_A

H D 2 Discovered_A

I F 3 Discovered_A

J NULL NULL Undiscovered

K NULL NULL Undiscovered

(45)

Example 1

B

A

D

C

E

F

G

H

J

I

K

L

Queue

I H G

(46)

Example 1

46

Vertex

Parent

Vertex

From Source

Distance

State

A NULL 0 Discovered_N

B A 1 Discovered_N

C A 1 Discovered_N

D A 1 Discovered_N

E B 2 Discovered_N

F B 2 Discovered_N

G D 2 Discovered_A

H D 2 Discovered_A

I I 3 Discovered_A

J NULL NULL Undiscovered

K NULL NULL Undiscovered

(47)

Example 1

B

A

D

C

E

F

G

H

J

I

K

L

Queue

I H

(48)

Example 1

48

B

A

D

C

E

F

G

H

J

I

K

L

Queue

I H

• Visit vertex I

(49)

Example 1

B

A

D

C

E

F

G

H

J

I

K

L

Queue

I H

(50)

Example 1

50

Vertex

Parent

Vertex

From Source

Distance

State

A NULL 0 Discovered_N

B A 1 Discovered_N

C A 1 Discovered_N

D A 1 Discovered_N

E B 2 Discovered_N

F B 2 Discovered_N

G D 2 Discovered_N

H D 2 Discovered_A

I F 3 Discovered_A

J NULL NULL Undiscovered

K NULL NULL Undiscovered

(51)

Example 1

B

A

D

C

E

F

G

H

J

I

K

L

Queue

I

(52)

Example 1

52

B

A

D

C

E

F

G

H

J

I

K

L

Queue

I

(53)

Example 1

Vertex

Parent

Vertex

From Source

Distance

State

A NULL 0 Discovered_N

B A 1 Discovered_N

C A 1 Discovered_N

D A 1 Discovered_N

E B 2 Discovered_N

F B 2 Discovered_N

G D 2 Discovered_N

H D 2 Discovered_N

I F 3 Discovered_A

J NULL NULL Undiscovered

K NULL NULL Undiscovered

(54)

Example 1

54

B

A

D

C

E

F

G

H

J

I

K

L

Queue

(55)

Example 1

B

A

D

C

E

F

G

H

J

I

K

L

Queue

J

• Visit vertex J

• Add vertex J to the queue • Set parent of vertex J to I

(56)

Example 1

56

Vertex

Parent

Vertex

From Source

Distance

State

A NULL 0 Discovered_N

B A 1 Discovered_N

C A 1 Discovered_N

D A 1 Discovered_N

E B 2 Discovered_N

F B 2 Discovered_N

G D 2 Discovered_N

H D 2 Discovered_N

I F 3 Discovered_A

J I 4 Discovered_A

K NULL NULL Undiscovered

(57)

Example 1

B

A

D

C

E

F

G

H

J

I

K

L

Queue

K J

• Visit vertex K

• Add vertex K to the queue • Set parent of vertex K to I

(58)

Example 1

58

Vertex

Parent

Vertex

From Source

Distance

State

A NULL 0 Discovered_N

B A 1 Discovered_N

C A 1 Discovered_N

D A 1 Discovered_N

E B 2 Discovered_N

F B 2 Discovered_N

G D 2 Discovered_N

H D 2 Discovered_N

I F 3 Discovered_A

J I 4 Discovered_A

K I 4 Discovered_A

(59)

Example 1

B

A

D

C

E

F

G

H

J

I

K

L

Queue

K J

(60)

Example 1

60

Vertex

Parent

Vertex

From Source

Distance

State

A NULL 0 Discovered_N

B A 1 Discovered_N

C A 1 Discovered_N

D A 1 Discovered_N

E B 2 Discovered_N

F B 2 Discovered_N

G D 2 Discovered_N

H D 2 Discovered_N

I F 3 Discovered_N

J I 4 Discovered_A

K I 4 Discovered_A

(61)

Example 1

B

A

D

C

E

F

G

H

J

I

K

L

Queue

K

(62)

Example 1

62

B

A

D

C

E

F

G

H

J

I

K

L

Queue

K

(63)

Example 1

Vertex

Parent

Vertex

From Source

Distance

State

A NULL 0 Discovered_N

B A 1 Discovered_N

C A 1 Discovered_N

D A 1 Discovered_N

E B 2 Discovered_N

F B 2 Discovered_N

G D 2 Discovered_N

H D 2 Discovered_N

I F 3 Discovered_N

J I 4 Discovered_N

K I 4 Discovered_A

(64)

Example 1

64

B

A

D

C

E

F

G

H

J

I

K

L

Queue

(65)

Example 1

B

A

D

C

E

F

G

H

J

I

K

L

Queue

L

• Visit vertex L

• Add vertex L to the queue • Set parent of vertex L to K

(66)

Example 1

66

Vertex

Parent

Vertex

From Source

Distance

State

A NULL 0 Discovered_N

B A 1 Discovered_N

C A 1 Discovered_N

D A 1 Discovered_N

E B 2 Discovered_N

F B 2 Discovered_N

G D 2 Discovered_N

H D 2 Discovered_N

I F 3 Discovered_N

J I 4 Discovered_N

K I 4 Discovered_A

(67)

Example 1

B

A

D

C

E

F

G

H

J

I

K

L

Queue

L

(68)

Example 1

68

Vertex

Parent

Vertex

From Source

Distance

State

A NULL 0 Discovered_N

B A 1 Discovered_N

C A 1 Discovered_N

D A 1 Discovered_N

E B 2 Discovered_N

F B 2 Discovered_N

G D 2 Discovered_N

H D 2 Discovered_N

I F 3 Discovered_N

J I 4 Discovered_N

K I 4 Discovered_N

(69)

Example 1

B

A

D

C

E

F

G

H

J

I

K

L

Queue

(70)

Example 1

70

B

A

D

C

E

F

G

H

J

I

K

L

Queue

(71)

Example 1

Vertex

Parent

Vertex

From Source

Distance

State

A NULL 0 Discovered_N

B A 1 Discovered_N

C A 1 Discovered_N

D A 1 Discovered_N

E B 2 Discovered_N

F B 2 Discovered_N

G D 2 Discovered_N

H D 2 Discovered_N

I F 3 Discovered_N

J I 4 Discovered_N

K I 4 Discovered_N

(72)

Example 1

72

B

A

D

C

E

F

G

H

J

I

K

L

Queue

(73)

Time Analysis

O

(V + E)

E = edges

V = vertices

Visit all vertices and edges exactly once

Initial setup =

O

(V)

Dequeue =

O

(E)

(74)

Space Analysis

O

(V)

All vertices in queue in the worst case

(75)

Complete

Complete = the algorithm will always find the

solution if the solution exists

BFS is complete

(76)

Optimal

Optimal = always finds the optimal solution

BFS is optimal

See proof in book

Short answer = when vertex is first visited there is

no shorter path to that vertex

Parent vertex is saved

References

Related documents

Whereas Prim’s uses a Min-Priority Queue to keep track of minimum edge weights to a vertex, Dijkstra’s associates with each vertex the minimum path weight to reach that

For local content material as subjects KPDL (On Yourself and Environmental Concern) in Grobogan area contains information about the way to plant a variety of

(Transcending Ajna Chakra) Realizing birthless wisdom and consequent birth-terminating Grace, they will transcend the five states to gain liberation. birthless wisdom = Wisdom

• Vertex array: an array of vertex data including vertex positions, normals, texture coordinates and

For those students coming on exchange in the be- ginning of the autumn term, we recommend that all exchange students apply for housing through the Student Village Foundation

They argue that there are two possible interpretations of the discouraged workseekers not actively seeking work, namely taste for unemployment (e.g. intra-household

In a randomized, double-blind, controlled study, the safety of the intra-articular injection of human mes- enchymal stem cells into the knee, the ability of mesenchymal stem cells

Now lift up your right leg and place the right ankle just near the left knee (on the thigh).. Grab your left thigh with both hands and pull the right leg in towards