67
Algoritmos em Grafos: Busca em Profundidade Letícia Rodrigues Bueno UFABC

Algoritmos em Grafos: Busca em Profundidadeprofessor.ufabc.edu.br/~leticia.bueno/classes/teoriagrafos/.../dfs.pdf · Problema 1: Ordenação Topológica • grafos direcionados acíclicos:

Embed Size (px)

Citation preview

Page 1: Algoritmos em Grafos: Busca em Profundidadeprofessor.ufabc.edu.br/~leticia.bueno/classes/teoriagrafos/.../dfs.pdf · Problema 1: Ordenação Topológica • grafos direcionados acíclicos:

Algoritmos em Grafos: Busca emProfundidade

Letícia Rodrigues Bueno

UFABC

Page 2: Algoritmos em Grafos: Busca em Profundidadeprofessor.ufabc.edu.br/~leticia.bueno/classes/teoriagrafos/.../dfs.pdf · Problema 1: Ordenação Topológica • grafos direcionados acíclicos:

Problema 1: Ordenação Topológica

• grafos direcionados acíclicos: usados para indicarprecedências entre eventos;

Page 3: Algoritmos em Grafos: Busca em Profundidadeprofessor.ufabc.edu.br/~leticia.bueno/classes/teoriagrafos/.../dfs.pdf · Problema 1: Ordenação Topológica • grafos direcionados acíclicos:

Problema 1: Ordenação Topológica

• grafos direcionados acíclicos: usados para indicarprecedências entre eventos;

• ordenação topológica: ordenação linear tal que arestasorientadas sigam da esquerda para direita (pode havervárias);

Page 4: Algoritmos em Grafos: Busca em Profundidadeprofessor.ufabc.edu.br/~leticia.bueno/classes/teoriagrafos/.../dfs.pdf · Problema 1: Ordenação Topológica • grafos direcionados acíclicos:

Problema 1: Ordenação Topológica

• grafos direcionados acíclicos: usados para indicarprecedências entre eventos;

• ordenação topológica: ordenação linear tal que arestasorientadas sigam da esquerda para direita (pode havervárias);

Underwear Pants

Belt

Socks

Shirt

Tie

Suit

Shoes Watch

Page 5: Algoritmos em Grafos: Busca em Profundidadeprofessor.ufabc.edu.br/~leticia.bueno/classes/teoriagrafos/.../dfs.pdf · Problema 1: Ordenação Topológica • grafos direcionados acíclicos:

Problema 1: Ordenação Topológica

• grafos direcionados acíclicos: usados para indicarprecedências entre eventos;

• ordenação topológica: ordenação linear tal que arestasorientadas sigam da esquerda para direita (pode havervárias);

Underwear Pants

Belt

Socks

Shirt

Tie

Suit

Shoes Watch

Underwear Pants BeltSocks Shirt Tie SuitShoes Watch

Page 6: Algoritmos em Grafos: Busca em Profundidadeprofessor.ufabc.edu.br/~leticia.bueno/classes/teoriagrafos/.../dfs.pdf · Problema 1: Ordenação Topológica • grafos direcionados acíclicos:

Busca em Profundidade (DFS - Depth-First Search)

Como encontrar uma ordenação topológica em um grafodirecionado acíclico?

Page 7: Algoritmos em Grafos: Busca em Profundidadeprofessor.ufabc.edu.br/~leticia.bueno/classes/teoriagrafos/.../dfs.pdf · Problema 1: Ordenação Topológica • grafos direcionados acíclicos:

Busca em Profundidade (DFS - Depth-First Search)

Como encontrar uma ordenação topológica em um grafodirecionado acíclico?

Usaremos a busca em profundidade!

Page 8: Algoritmos em Grafos: Busca em Profundidadeprofessor.ufabc.edu.br/~leticia.bueno/classes/teoriagrafos/.../dfs.pdf · Problema 1: Ordenação Topológica • grafos direcionados acíclicos:

Busca em Profundidade (DFS - Depth-First Search)

a

b

g c

d

e

f

Page 9: Algoritmos em Grafos: Busca em Profundidadeprofessor.ufabc.edu.br/~leticia.bueno/classes/teoriagrafos/.../dfs.pdf · Problema 1: Ordenação Topológica • grafos direcionados acíclicos:

Busca em Profundidade (DFS - Depth-First Search)

a

b

g c

d

e

f

1

a

Page 10: Algoritmos em Grafos: Busca em Profundidadeprofessor.ufabc.edu.br/~leticia.bueno/classes/teoriagrafos/.../dfs.pdf · Problema 1: Ordenação Topológica • grafos direcionados acíclicos:

Busca em Profundidade (DFS - Depth-First Search)

a

b

g c

d

e

f

1

2

ab

Page 11: Algoritmos em Grafos: Busca em Profundidadeprofessor.ufabc.edu.br/~leticia.bueno/classes/teoriagrafos/.../dfs.pdf · Problema 1: Ordenação Topológica • grafos direcionados acíclicos:

Busca em Profundidade (DFS - Depth-First Search)

a

b

g c

d

e

f

1

2

3

abc

Page 12: Algoritmos em Grafos: Busca em Profundidadeprofessor.ufabc.edu.br/~leticia.bueno/classes/teoriagrafos/.../dfs.pdf · Problema 1: Ordenação Topológica • grafos direcionados acíclicos:

Busca em Profundidade (DFS - Depth-First Search)

a

b

g c

d

e

f

1

2

3

4

abcd

Page 13: Algoritmos em Grafos: Busca em Profundidadeprofessor.ufabc.edu.br/~leticia.bueno/classes/teoriagrafos/.../dfs.pdf · Problema 1: Ordenação Topológica • grafos direcionados acíclicos:

Busca em Profundidade (DFS - Depth-First Search)

a

b

g c

d

e

f

1

2

3

4

5abcde

Page 14: Algoritmos em Grafos: Busca em Profundidadeprofessor.ufabc.edu.br/~leticia.bueno/classes/teoriagrafos/.../dfs.pdf · Problema 1: Ordenação Topológica • grafos direcionados acíclicos:

Busca em Profundidade (DFS - Depth-First Search)

a

b

g c

d

e

f

1

2

3

4

5abcde

Page 15: Algoritmos em Grafos: Busca em Profundidadeprofessor.ufabc.edu.br/~leticia.bueno/classes/teoriagrafos/.../dfs.pdf · Problema 1: Ordenação Topológica • grafos direcionados acíclicos:

Busca em Profundidade (DFS - Depth-First Search)

a

b

g c

d

e

f

1

2

3

4

5

6

abcdf

Page 16: Algoritmos em Grafos: Busca em Profundidadeprofessor.ufabc.edu.br/~leticia.bueno/classes/teoriagrafos/.../dfs.pdf · Problema 1: Ordenação Topológica • grafos direcionados acíclicos:

Busca em Profundidade (DFS - Depth-First Search)

a

b

g c

d

e

f

1

2

3

4

5

6

7

abcdfg

Page 17: Algoritmos em Grafos: Busca em Profundidadeprofessor.ufabc.edu.br/~leticia.bueno/classes/teoriagrafos/.../dfs.pdf · Problema 1: Ordenação Topológica • grafos direcionados acíclicos:

Busca em Profundidade (DFS - Depth-First Search)

a

b

g c

d

e

f

1

2

3

4

5

6

7

abcdfg

Page 18: Algoritmos em Grafos: Busca em Profundidadeprofessor.ufabc.edu.br/~leticia.bueno/classes/teoriagrafos/.../dfs.pdf · Problema 1: Ordenação Topológica • grafos direcionados acíclicos:

Busca em Profundidade (DFS - Depth-First Search)

a

b

g c

d

e

f

1

2

3

4

5

6

7

abcdfg

Page 19: Algoritmos em Grafos: Busca em Profundidadeprofessor.ufabc.edu.br/~leticia.bueno/classes/teoriagrafos/.../dfs.pdf · Problema 1: Ordenação Topológica • grafos direcionados acíclicos:

Busca em Profundidade (DFS - Depth-First Search)

a

b

g c

d

e

f

1

2

3

4

5

6

7

abcdfg

Page 20: Algoritmos em Grafos: Busca em Profundidadeprofessor.ufabc.edu.br/~leticia.bueno/classes/teoriagrafos/.../dfs.pdf · Problema 1: Ordenação Topológica • grafos direcionados acíclicos:

Busca em Profundidade (DFS - Depth-First Search)

a

b

g c

d

e

f

1

2

3

4

5

6

7

abcdf

Page 21: Algoritmos em Grafos: Busca em Profundidadeprofessor.ufabc.edu.br/~leticia.bueno/classes/teoriagrafos/.../dfs.pdf · Problema 1: Ordenação Topológica • grafos direcionados acíclicos:

Busca em Profundidade (DFS - Depth-First Search)

a

b

g c

d

e

f

1

2

3

4

5

6

7

abcd

Page 22: Algoritmos em Grafos: Busca em Profundidadeprofessor.ufabc.edu.br/~leticia.bueno/classes/teoriagrafos/.../dfs.pdf · Problema 1: Ordenação Topológica • grafos direcionados acíclicos:

Busca em Profundidade (DFS - Depth-First Search)

a

b

g c

d

e

f

1

2

3

4

5

6

7

abc

Page 23: Algoritmos em Grafos: Busca em Profundidadeprofessor.ufabc.edu.br/~leticia.bueno/classes/teoriagrafos/.../dfs.pdf · Problema 1: Ordenação Topológica • grafos direcionados acíclicos:

Busca em Profundidade (DFS - Depth-First Search)

a

b

g c

d

e

f

1

2

3

4

5

6

7

ab

Page 24: Algoritmos em Grafos: Busca em Profundidadeprofessor.ufabc.edu.br/~leticia.bueno/classes/teoriagrafos/.../dfs.pdf · Problema 1: Ordenação Topológica • grafos direcionados acíclicos:

Busca em Profundidade (DFS - Depth-First Search)

a

b

g c

d

e

f

1

2

3

4

5

6

7

a

Page 25: Algoritmos em Grafos: Busca em Profundidadeprofessor.ufabc.edu.br/~leticia.bueno/classes/teoriagrafos/.../dfs.pdf · Problema 1: Ordenação Topológica • grafos direcionados acíclicos:

Busca em Profundidade (DFS - Depth-First Search)

a

b

g c

d

e

f

1

2

3

4

5

6

7

Page 26: Algoritmos em Grafos: Busca em Profundidadeprofessor.ufabc.edu.br/~leticia.bueno/classes/teoriagrafos/.../dfs.pdf · Problema 1: Ordenação Topológica • grafos direcionados acíclicos:

Algoritmo DFS

1 dfs(G, u, cont):2 u.visitado = True3 u.d = cont4 para v em adj(u) faça5 se não v.visitado então6 v.p = u7 dfs(G, v, cont+1)

8 para u em V(G) faça9 u.visitado = False

10 u.d = ∞

11 u.p = None12 cont = 113 dfs(G, u, cont)

Page 27: Algoritmos em Grafos: Busca em Profundidadeprofessor.ufabc.edu.br/~leticia.bueno/classes/teoriagrafos/.../dfs.pdf · Problema 1: Ordenação Topológica • grafos direcionados acíclicos:

Algoritmo DFS

1 dfs(G, u, cont):2 u.visitado = True3 u.d = cont4 para v em adj(u) faça5 se não v.visitado então6 v.p = u7 dfs(G, v, cont+1)

8 para u em V(G) faça9 u.visitado = False

10 u.d = ∞

11 u.p = None12 cont = 113 dfs(G, u, cont)

Análise da complexidade:

Page 28: Algoritmos em Grafos: Busca em Profundidadeprofessor.ufabc.edu.br/~leticia.bueno/classes/teoriagrafos/.../dfs.pdf · Problema 1: Ordenação Topológica • grafos direcionados acíclicos:

Algoritmo DFS

1 dfs(G, u, cont):2 u.visitado = True3 u.d = cont4 para v em adj(u) faça5 se não v.visitado então6 v.p = u7 dfs(G, v, cont+1)

8 para u em V(G) faça9 u.visitado = False

10 u.d = ∞

11 u.p = None12 cont = 113 dfs(G, u, cont)

Análise da complexidade:

• Cada vértice passadopara método dfs (linha7 e 13): O(n)

Page 29: Algoritmos em Grafos: Busca em Profundidadeprofessor.ufabc.edu.br/~leticia.bueno/classes/teoriagrafos/.../dfs.pdf · Problema 1: Ordenação Topológica • grafos direcionados acíclicos:

Algoritmo DFS

1 dfs(G, u, cont):2 u.visitado = True3 u.d = cont4 para v em adj(u) faça5 se não v.visitado então6 v.p = u7 dfs(G, v, cont+1)

8 para u em V(G) faça9 u.visitado = False

10 u.d = ∞

11 u.p = None12 cont = 113 dfs(G, u, cont)

Análise da complexidade:

• Cada vértice passadopara método dfs (linha7 e 13): O(n)

• A lista de adjacênciade cada vérticepercorrida uma vez(linha 4): O(m)

Page 30: Algoritmos em Grafos: Busca em Profundidadeprofessor.ufabc.edu.br/~leticia.bueno/classes/teoriagrafos/.../dfs.pdf · Problema 1: Ordenação Topológica • grafos direcionados acíclicos:

Algoritmo DFS

1 dfs(G, u, cont):2 u.visitado = True3 u.d = cont4 para v em adj(u) faça5 se não v.visitado então6 v.p = u7 dfs(G, v, cont+1)

8 para u em V(G) faça9 u.visitado = False

10 u.d = ∞

11 u.p = None12 cont = 113 dfs(G, u, cont)

Análise da complexidade:

• Cada vértice passadopara método dfs (linha7 e 13): O(n)

• A lista de adjacênciade cada vérticepercorrida uma vez(linha 4): O(m)

• Complexidade total:O(n + m)

Page 31: Algoritmos em Grafos: Busca em Profundidadeprofessor.ufabc.edu.br/~leticia.bueno/classes/teoriagrafos/.../dfs.pdf · Problema 1: Ordenação Topológica • grafos direcionados acíclicos:

Ordenação Topológica

Voltando ao problema de ordenação topológica:

Page 32: Algoritmos em Grafos: Busca em Profundidadeprofessor.ufabc.edu.br/~leticia.bueno/classes/teoriagrafos/.../dfs.pdf · Problema 1: Ordenação Topológica • grafos direcionados acíclicos:

Ordenação Topológica

Voltando ao problema de ordenação topológica:

Como usar DFS para resolvê-lo?

Page 33: Algoritmos em Grafos: Busca em Profundidadeprofessor.ufabc.edu.br/~leticia.bueno/classes/teoriagrafos/.../dfs.pdf · Problema 1: Ordenação Topológica • grafos direcionados acíclicos:

Ordenação Topológica

Voltando ao problema de ordenação topológica:

Como usar DFS para resolvê-lo?

LemaUm grafo direcionado acíclico sempre contém um vértice degrau de entrada 0.

Page 34: Algoritmos em Grafos: Busca em Profundidadeprofessor.ufabc.edu.br/~leticia.bueno/classes/teoriagrafos/.../dfs.pdf · Problema 1: Ordenação Topológica • grafos direcionados acíclicos:

Ordenação Topológica

Voltando ao problema de ordenação topológica:

Como usar DFS para resolvê-lo?

LemaUm grafo direcionado acíclico sempre contém um vértice degrau de entrada 0.

Demonstração.Se todo vértice tem grau de entrada maior que 0, podemosandar pelas arestas de trás para frente sem parar. Há umaquantidade finita de vértices, portanto fazemos isso em umciclo, mas grafo acíclico não tem ciclos.

Page 35: Algoritmos em Grafos: Busca em Profundidadeprofessor.ufabc.edu.br/~leticia.bueno/classes/teoriagrafos/.../dfs.pdf · Problema 1: Ordenação Topológica • grafos direcionados acíclicos:

Busca em Profundidade (DFS - Depth-First Search)

Underwear Pants

Belt

Socks

Shirt

Tie

Suit

Shoes Watch

pt λ

Page 36: Algoritmos em Grafos: Busca em Profundidadeprofessor.ufabc.edu.br/~leticia.bueno/classes/teoriagrafos/.../dfs.pdf · Problema 1: Ordenação Topológica • grafos direcionados acíclicos:

Busca em Profundidade (DFS - Depth-First Search)

Underwear Pants

Belt

Socks

Shirt

Tie

Suit

Shoes Watch

pants

pt λ

Page 37: Algoritmos em Grafos: Busca em Profundidadeprofessor.ufabc.edu.br/~leticia.bueno/classes/teoriagrafos/.../dfs.pdf · Problema 1: Ordenação Topológica • grafos direcionados acíclicos:

Busca em Profundidade (DFS - Depth-First Search)

Underwear Pants

Belt

Socks

Shirt

Tie

Suit

Shoes Watch

pantsshoes

pt λ

Page 38: Algoritmos em Grafos: Busca em Profundidadeprofessor.ufabc.edu.br/~leticia.bueno/classes/teoriagrafos/.../dfs.pdf · Problema 1: Ordenação Topológica • grafos direcionados acíclicos:

Busca em Profundidade (DFS - Depth-First Search)

Underwear Pants

Belt

Socks

Shirt

Tie

Suit

Shoes Watch

pants

pt shoes λ

Page 39: Algoritmos em Grafos: Busca em Profundidadeprofessor.ufabc.edu.br/~leticia.bueno/classes/teoriagrafos/.../dfs.pdf · Problema 1: Ordenação Topológica • grafos direcionados acíclicos:

Busca em Profundidade (DFS - Depth-First Search)

Underwear Pants

Belt

Socks

Shirt

Tie

Suit

Shoes Watch

pantsbelt

pt shoes λ

Page 40: Algoritmos em Grafos: Busca em Profundidadeprofessor.ufabc.edu.br/~leticia.bueno/classes/teoriagrafos/.../dfs.pdf · Problema 1: Ordenação Topológica • grafos direcionados acíclicos:

Busca em Profundidade (DFS - Depth-First Search)

Underwear Pants

Belt

Socks

Shirt

Tie

Suit

Shoes Watch

pantsbeltsuit

pt shoes λ

Page 41: Algoritmos em Grafos: Busca em Profundidadeprofessor.ufabc.edu.br/~leticia.bueno/classes/teoriagrafos/.../dfs.pdf · Problema 1: Ordenação Topológica • grafos direcionados acíclicos:

Busca em Profundidade (DFS - Depth-First Search)

Underwear Pants

Belt

Socks

Shirt

Tie

Suit

Shoes Watch

pantsbelt

pt shoessuit λ

Page 42: Algoritmos em Grafos: Busca em Profundidadeprofessor.ufabc.edu.br/~leticia.bueno/classes/teoriagrafos/.../dfs.pdf · Problema 1: Ordenação Topológica • grafos direcionados acíclicos:

Busca em Profundidade (DFS - Depth-First Search)

Underwear Pants

Belt

Socks

Shirt

Tie

Suit

Shoes Watch

pants

pt shoessuitbelt λ

Page 43: Algoritmos em Grafos: Busca em Profundidadeprofessor.ufabc.edu.br/~leticia.bueno/classes/teoriagrafos/.../dfs.pdf · Problema 1: Ordenação Topológica • grafos direcionados acíclicos:

Busca em Profundidade (DFS - Depth-First Search)

Underwear Pants

Belt

Socks

Shirt

Tie

Suit

Shoes Watch

pt shoessuitbeltpants λ

Page 44: Algoritmos em Grafos: Busca em Profundidadeprofessor.ufabc.edu.br/~leticia.bueno/classes/teoriagrafos/.../dfs.pdf · Problema 1: Ordenação Topológica • grafos direcionados acíclicos:

Busca em Profundidade (DFS - Depth-First Search)

Underwear Pants

Belt

Socks

Shirt

Tie

Suit

Shoes Watch

tie

pt shoessuitbeltpants λ

Page 45: Algoritmos em Grafos: Busca em Profundidadeprofessor.ufabc.edu.br/~leticia.bueno/classes/teoriagrafos/.../dfs.pdf · Problema 1: Ordenação Topológica • grafos direcionados acíclicos:

Busca em Profundidade (DFS - Depth-First Search)

Underwear Pants

Belt

Socks

Shirt

Tie

Suit

Shoes Watch

pt shoessuitbeltpantstie λ

Page 46: Algoritmos em Grafos: Busca em Profundidadeprofessor.ufabc.edu.br/~leticia.bueno/classes/teoriagrafos/.../dfs.pdf · Problema 1: Ordenação Topológica • grafos direcionados acíclicos:

Busca em Profundidade (DFS - Depth-First Search)

Underwear Pants

Belt

Socks

Shirt

Tie

Suit

Shoes Watch

shirt

pt shoessuitbeltpantstie λ

Page 47: Algoritmos em Grafos: Busca em Profundidadeprofessor.ufabc.edu.br/~leticia.bueno/classes/teoriagrafos/.../dfs.pdf · Problema 1: Ordenação Topológica • grafos direcionados acíclicos:

Busca em Profundidade (DFS - Depth-First Search)

Underwear Pants

Belt

Socks

Shirt

Tie

Suit

Shoes Watch

pt shoessuitbeltpantstieshirt λ

Page 48: Algoritmos em Grafos: Busca em Profundidadeprofessor.ufabc.edu.br/~leticia.bueno/classes/teoriagrafos/.../dfs.pdf · Problema 1: Ordenação Topológica • grafos direcionados acíclicos:

Busca em Profundidade (DFS - Depth-First Search)

Underwear Pants

Belt

Socks

Shirt

Tie

Suit

Shoes Watch

watch

pt shoessuitbeltpantstieshirt λ

Page 49: Algoritmos em Grafos: Busca em Profundidadeprofessor.ufabc.edu.br/~leticia.bueno/classes/teoriagrafos/.../dfs.pdf · Problema 1: Ordenação Topológica • grafos direcionados acíclicos:

Busca em Profundidade (DFS - Depth-First Search)

Underwear Pants

Belt

Socks

Shirt

Tie

Suit

Shoes Watch

pt shoessuitbeltpantstieshirtwatch λ

Page 50: Algoritmos em Grafos: Busca em Profundidadeprofessor.ufabc.edu.br/~leticia.bueno/classes/teoriagrafos/.../dfs.pdf · Problema 1: Ordenação Topológica • grafos direcionados acíclicos:

Busca em Profundidade (DFS - Depth-First Search)

Underwear Pants

Belt

Socks

Shirt

Tie

Suit

Shoes Watch

socks

pt shoessuitbeltpantstieshirtwatch λ

Page 51: Algoritmos em Grafos: Busca em Profundidadeprofessor.ufabc.edu.br/~leticia.bueno/classes/teoriagrafos/.../dfs.pdf · Problema 1: Ordenação Topológica • grafos direcionados acíclicos:

Busca em Profundidade (DFS - Depth-First Search)

Underwear Pants

Belt

Socks

Shirt

Tie

Suit

Shoes Watch

pt shoessuitbeltpantstieshirtwatch λsocks

Page 52: Algoritmos em Grafos: Busca em Profundidadeprofessor.ufabc.edu.br/~leticia.bueno/classes/teoriagrafos/.../dfs.pdf · Problema 1: Ordenação Topológica • grafos direcionados acíclicos:

Busca em Profundidade (DFS - Depth-First Search)

Underwear Pants

Belt

Socks

Shirt

Tie

Suit

Shoes Watch

underwear

pt shoessuitbeltpantstieshirtwatch λsocks

Page 53: Algoritmos em Grafos: Busca em Profundidadeprofessor.ufabc.edu.br/~leticia.bueno/classes/teoriagrafos/.../dfs.pdf · Problema 1: Ordenação Topológica • grafos direcionados acíclicos:

Busca em Profundidade (DFS - Depth-First Search)

Underwear Pants

Belt

Socks

Shirt

Tie

Suit

Shoes Watch

pt shoessuitbeltpantstieshirtsocksunderwear watch λ

Page 54: Algoritmos em Grafos: Busca em Profundidadeprofessor.ufabc.edu.br/~leticia.bueno/classes/teoriagrafos/.../dfs.pdf · Problema 1: Ordenação Topológica • grafos direcionados acíclicos:

Algoritmo Ordenação Topológica

1 dfs(G, u):2 u.visitado = True3 para v em adj(u) faça4 se não v.visitado então5 dfs(G, v)6 inserePrimeiro(L, u)

7 para u em V(G) faça8 u.visitado = False9 L = Lista();

10 para u em V(G) faça11 se não u.visitado então12 dfs(G, u)

Page 55: Algoritmos em Grafos: Busca em Profundidadeprofessor.ufabc.edu.br/~leticia.bueno/classes/teoriagrafos/.../dfs.pdf · Problema 1: Ordenação Topológica • grafos direcionados acíclicos:

Algoritmo Ordenação Topológica

1 dfs(G, u):2 u.visitado = True3 para v em adj(u) faça4 se não v.visitado então5 dfs(G, v)6 inserePrimeiro(L, u)

7 para u em V(G) faça8 u.visitado = False9 L = Lista();

10 para u em V(G) faça11 se não u.visitado então12 dfs(G, u)

Análise da complexidade:

Page 56: Algoritmos em Grafos: Busca em Profundidadeprofessor.ufabc.edu.br/~leticia.bueno/classes/teoriagrafos/.../dfs.pdf · Problema 1: Ordenação Topológica • grafos direcionados acíclicos:

Algoritmo Ordenação Topológica

1 dfs(G, u):2 u.visitado = True3 para v em adj(u) faça4 se não v.visitado então5 dfs(G, v)6 inserePrimeiro(L, u)

7 para u em V(G) faça8 u.visitado = False9 L = Lista();

10 para u em V(G) faça11 se não u.visitado então12 dfs(G, u)

Análise da complexidade:

• Cada vértice passadopara método dfs (linha5 e 12): O(n)

Page 57: Algoritmos em Grafos: Busca em Profundidadeprofessor.ufabc.edu.br/~leticia.bueno/classes/teoriagrafos/.../dfs.pdf · Problema 1: Ordenação Topológica • grafos direcionados acíclicos:

Algoritmo Ordenação Topológica

1 dfs(G, u):2 u.visitado = True3 para v em adj(u) faça4 se não v.visitado então5 dfs(G, v)6 inserePrimeiro(L, u)

7 para u em V(G) faça8 u.visitado = False9 L = Lista();

10 para u em V(G) faça11 se não u.visitado então12 dfs(G, u)

Análise da complexidade:

• Cada vértice passadopara método dfs (linha5 e 12): O(n)

• A lista de adjacênciade cada vérticepercorrida uma vez(linha 3): O(m)

Page 58: Algoritmos em Grafos: Busca em Profundidadeprofessor.ufabc.edu.br/~leticia.bueno/classes/teoriagrafos/.../dfs.pdf · Problema 1: Ordenação Topológica • grafos direcionados acíclicos:

Algoritmo Ordenação Topológica

1 dfs(G, u):2 u.visitado = True3 para v em adj(u) faça4 se não v.visitado então5 dfs(G, v)6 inserePrimeiro(L, u)

7 para u em V(G) faça8 u.visitado = False9 L = Lista();

10 para u em V(G) faça11 se não u.visitado então12 dfs(G, u)

Análise da complexidade:

• Cada vértice passadopara método dfs (linha5 e 12): O(n)

• A lista de adjacênciade cada vérticepercorrida uma vez(linha 3): O(m)

• inserePrimeiro insereno início de listaligada: O(1);

Page 59: Algoritmos em Grafos: Busca em Profundidadeprofessor.ufabc.edu.br/~leticia.bueno/classes/teoriagrafos/.../dfs.pdf · Problema 1: Ordenação Topológica • grafos direcionados acíclicos:

Algoritmo Ordenação Topológica

1 dfs(G, u):2 u.visitado = True3 para v em adj(u) faça4 se não v.visitado então5 dfs(G, v)6 inserePrimeiro(L, u)

7 para u em V(G) faça8 u.visitado = False9 L = Lista();

10 para u em V(G) faça11 se não u.visitado então12 dfs(G, u)

Análise da complexidade:

• Cada vértice passadopara método dfs (linha5 e 12): O(n)

• A lista de adjacênciade cada vérticepercorrida uma vez(linha 3): O(m)

• inserePrimeiro insereno início de listaligada: O(1);

• Complexidade total:O(n + m)

Page 60: Algoritmos em Grafos: Busca em Profundidadeprofessor.ufabc.edu.br/~leticia.bueno/classes/teoriagrafos/.../dfs.pdf · Problema 1: Ordenação Topológica • grafos direcionados acíclicos:

Algoritmo Ordenação Topológica

1 dfs(G, u):2 u.visitado = True3 para v em adj(u) faça4 se não v.visitado então5 dfs(G, v)6 inserePrimeiro(L, u)

7 para u em V(G) faça8 u.visitado = False9 L = Lista();

10 para u em V(G) faça11 se não u.visitado então12 dfs(G, u)

Page 61: Algoritmos em Grafos: Busca em Profundidadeprofessor.ufabc.edu.br/~leticia.bueno/classes/teoriagrafos/.../dfs.pdf · Problema 1: Ordenação Topológica • grafos direcionados acíclicos:

Algoritmo Ordenação Topológica

1 dfs(G, u):2 u.visitado = True3 para v em adj(u) faça4 se não v.visitado então5 dfs(G, v)6 inserePrimeiro(L, u)

7 para u em V(G) faça8 u.visitado = False9 L = Lista();

10 para u em V(G) faça11 se não u.visitado então12 dfs(G, u)

Análise da corretude:

Page 62: Algoritmos em Grafos: Busca em Profundidadeprofessor.ufabc.edu.br/~leticia.bueno/classes/teoriagrafos/.../dfs.pdf · Problema 1: Ordenação Topológica • grafos direcionados acíclicos:

Algoritmo Ordenação Topológica

1 dfs(G, u):2 u.visitado = True3 para v em adj(u) faça4 se não v.visitado então5 dfs(G, v)6 inserePrimeiro(L, u)

7 para u em V(G) faça8 u.visitado = False9 L = Lista();

10 para u em V(G) faça11 se não u.visitado então12 dfs(G, u)

Análise da corretude:

• Vértices sãoadicionados nocomeço da listasomente se não temmais arestas de saída;

Page 63: Algoritmos em Grafos: Busca em Profundidadeprofessor.ufabc.edu.br/~leticia.bueno/classes/teoriagrafos/.../dfs.pdf · Problema 1: Ordenação Topológica • grafos direcionados acíclicos:

Algoritmo Ordenação Topológica

1 dfs(G, u):2 u.visitado = True3 para v em adj(u) faça4 se não v.visitado então5 dfs(G, v)6 inserePrimeiro(L, u)

7 para u em V(G) faça8 u.visitado = False9 L = Lista();

10 para u em V(G) faça11 se não u.visitado então12 dfs(G, u)

Análise da corretude:

• Vértices sãoadicionados nocomeço da listasomente se não temmais arestas de saída;

• Sumidouros sãoadicionados primeiro;

Page 64: Algoritmos em Grafos: Busca em Profundidadeprofessor.ufabc.edu.br/~leticia.bueno/classes/teoriagrafos/.../dfs.pdf · Problema 1: Ordenação Topológica • grafos direcionados acíclicos:

Algoritmo Ordenação Topológica

1 dfs(G, u):2 u.visitado = True3 para v em adj(u) faça4 se não v.visitado então5 dfs(G, v)6 inserePrimeiro(L, u)

7 para u em V(G) faça8 u.visitado = False9 L = Lista();

10 para u em V(G) faça11 se não u.visitado então12 dfs(G, u)

Análise da corretude:

• Vértices sãoadicionados nocomeço da listasomente se não temmais arestas de saída;

• Sumidouros sãoadicionados primeiro;

• Depois, sãoadicionados vértices“satisfeitos”;

Page 65: Algoritmos em Grafos: Busca em Profundidadeprofessor.ufabc.edu.br/~leticia.bueno/classes/teoriagrafos/.../dfs.pdf · Problema 1: Ordenação Topológica • grafos direcionados acíclicos:

Algoritmo Ordenação Topológica

1 dfs(G, u):2 u.visitado = True3 para v em adj(u) faça4 se não v.visitado então5 dfs(G, v)6 inserePrimeiro(L, u)

7 para u em V(G) faça8 u.visitado = False9 L = Lista();

10 para u em V(G) faça11 se não u.visitado então12 dfs(G, u)

Análise da corretude:

• Vértices sãoadicionados nocomeço da listasomente se não temmais arestas de saída;

• Sumidouros sãoadicionados primeiro;

• Depois, sãoadicionados vértices“satisfeitos”;

• Finalmente, fontes sãoadicionadas;

Page 66: Algoritmos em Grafos: Busca em Profundidadeprofessor.ufabc.edu.br/~leticia.bueno/classes/teoriagrafos/.../dfs.pdf · Problema 1: Ordenação Topológica • grafos direcionados acíclicos:

Exercícios

1. Modifique o algoritmo DFS para verificar se um grafo éacíclico.

2. Supondo que G seja conexo, como podemos usar oalgoritmo DFS para obter uma árvore geradora do grafoG?

3. O algoritmo DFS pode ser usado para checar se um grafoé conexo?

4. Proponha um algoritmo alternativo para resolver oproblema de ordenação topológica sem utilizar DFS masque tenha mesma complexidade de tempo.

Page 67: Algoritmos em Grafos: Busca em Profundidadeprofessor.ufabc.edu.br/~leticia.bueno/classes/teoriagrafos/.../dfs.pdf · Problema 1: Ordenação Topológica • grafos direcionados acíclicos:

Bibliografia

CORMEN, T. H.; LEISERSON, C. E.; RIVEST, R. L. e STEIN, C.Introduction to Algorithms, 3a edição, MIT Press, 2009.