searching

14
Depth-First Search (DFS) • DFS is another popular graph search strategy – Idea is similar to pre-order traversal (visit children first) • DFS can provide certain information about the graph that BFS cannot – It can tell whether we have encountered a cycle or not

Upload: saurabh-mishra

Post on 26-May-2015

548 views

Category:

Technology


0 download

DESCRIPTION

Data Structures Searching

TRANSCRIPT

Page 1: Searching

Depth-First Search (DFS)

• DFS is another popular graph search strategy– Idea is similar to pre-order traversal (visit children

first)

• DFS can provide certain information about the graph that BFS cannot– It can tell whether we have encountered a cycle or

not

Page 2: Searching

DFS Algorithm

• DFS will continue to visit neighbors in a recursive pattern– Whenever we visit v from u, we recursively visit all

unvisited neighbors of v. Then we backtrack (return) to u.

– Note: it is possible that w2 was unvisited when we recursively visit w1, but became visited by the time we return from the recursive call.

u

v

w1 w2

w3

Page 3: Searching

DFS Algorithm

Flag all vertices as notvisited

Flag yourself as visited

For unvisited neighbors,call RDFS(w) recursively

We can also record the paths using pred[ ].

Page 4: Searching

Example

2

4

3

5

1

76

9

8

0Adjacency List

source

0

1

2

3

4

5

6

7

8

9

Visited Table (T/F)

F

F

F

F

F

F

F

F

F

F

Initialize visitedtable (all False)

Initialize Pred to -1

-

-

-

-

-

-

-

-

-

-

Pred

Page 5: Searching

Example

2

4

3

5

1

76

9

8

0

Adjacency List

source

0

1

2

3

4

5

6

7

8

9

Visited Table (T/F)

F

F

T

F

F

F

F

F

F

F

Mark 2 as visited

-

-

-

-

-

-

-

-

-

-

Pred

RDFS( 2 )Now visit RDFS(8)

Page 6: Searching

Example

2

4

3

5

1

76

9

8

0Adjacency List

source

0

1

2

3

4

5

6

7

8

9

Visited Table (T/F)

F

F

T

F

F

F

F

F

T

F

Mark 8 as visited

mark Pred[8]

-

-

-

-

-

-

-

-

2

-

Pred

RDFS( 2 ) RDFS(8)

2 is already visited, so visit RDFS(0)

Recursivecalls

Page 7: Searching

Example

2

4

3

5

1

76

9

8

0Adjacency List

source

0

1

2

3

4

5

6

7

8

9

Visited Table (T/F)

T

F

T

F

F

F

F

F

T

F

Mark 0 as visited

Mark Pred[0]

8

-

-

-

-

-

-

-

2

-

Pred

RDFS( 2 ) RDFS(8)

RDFS(0) -> no unvisited neighbors, return to call RDFS(8)

Recursivecalls

Page 8: Searching

Example

2

4

3

5

1

76

9

8

0Adjacency List

source

0

1

2

3

4

5

6

7

8

9

Visited Table (T/F)

T

F

T

F

F

F

F

F

T

F

8

-

-

-

-

-

-

-

2

-

Pred

RDFS( 2 ) RDFS(8)

Now visit 9 -> RDFS(9)

Recursivecalls

Back to 8

Page 9: Searching

Example

2

4

3

5

1

76

9

8

0Adjacency List

source

0

1

2

3

4

5

6

7

8

9

Visited Table (T/F)

T

F

T

F

F

F

F

F

T

T

Mark 9 as visited

Mark Pred[9]

8

-

-

-

-

-

-

-

2

8

Pred

RDFS( 2 ) RDFS(8)

RDFS(9) -> visit 1, RDFS(1)

Recursivecalls

Page 10: Searching

Example

2

4

3

5

1

76

9

8

0Adjacency List

source

0

1

2

3

4

5

6

7

8

9

Visited Table (T/F)

T

T

T

F

F

F

F

F

T

T

Mark 1 as visited

Mark Pred[1]

8

9

-

-

-

-

-

-

2

8

Pred

RDFS( 2 ) RDFS(8)

RDFS(9) RDFS(1)

visit RDFS(3)

Recursivecalls

Page 11: Searching

Example

2

4

3

5

1

76

9

8

0Adjacency List

source

0

1

2

3

4

5

6

7

8

9

Visited Table (T/F)

T

T

T

T

F

F

F

F

T

T

Mark 3 as visited

Mark Pred[3]

8

9

-

1

-

-

-

-

2

8

Pred

RDFS( 2 ) RDFS(8)

RDFS(9) RDFS(1)

RDFS(3) visit RDFS(4)

Recursivecalls

Page 12: Searching

RDFS( 2 ) RDFS(8)

RDFS(9) RDFS(1)

RDFS(3) RDFS(4) STOP all of 4’s neighbors have been visited return back to call RDFS(3)

Example

2

4

3

5

1

76

9

8

0Adjacency List

source

0

1

2

3

4

5

6

7

8

9

Visited Table (T/F)

T

T

T

T

T

F

F

F

T

T

Mark 4 as visited

Mark Pred[4]

8

9

-

1

3

-

-

-

2

8

Pred

Recursivecalls

Page 13: Searching

Example

2

4

3

5

1

76

9

8

0Adjacency List

source

0

1

2

3

4

5

6

7

8

9

Visited Table (T/F)

T

T

T

T

T

F

F

F

T

T

8

9

-

1

3

-

-

-

2

8

PredRDFS( 2 ) RDFS(8)

RDFS(9) RDFS(1)

RDFS(3) visit 5 -> RDFS(5)

Recursivecalls

Back to 3

Page 14: Searching

Example

2

4

3

5

1

76

9

8

0Adjacency List

source

0

1

2

3

4

5

6

7

8

9

Visited Table (T/F)

T

T

T

T

T

T

F

F

T

T

8

9

-

1

3

3

-

-

2

8

PredRDFS( 2 ) RDFS(8)

RDFS(9) RDFS(1)

RDFS(3) RDFS(5) 3 is already visited, so visit 6 -> RDFS(6)

Recursivecalls

Mark 5 as visited

Mark Pred[5]