Grafos e Algoritmos de Busca - DAINFkaestner/MatematicaDiscreta/Conteudo/... · Grafos e Algoritmos...

65
Grafos e Algoritmos de Busca 1 / 65 Grafos e Algoritmos de Busca Eduardo Camponogara Departamento de Automa¸ ao e Sistemas Universidade Federal de Santa Catarina DAS-9003: Introdu¸ ao a Algoritmos

Transcript of Grafos e Algoritmos de Busca - DAINFkaestner/MatematicaDiscreta/Conteudo/... · Grafos e Algoritmos...

Grafos e Algoritmos de Busca 1 / 65

Grafos e Algoritmos de Busca

Eduardo Camponogara

Departamento de Automacao e SistemasUniversidade Federal de Santa Catarina

DAS-9003: Introducao a Algoritmos

Grafos e Algoritmos de Busca 2 / 65

Sumario

Introducao

Representacao de Grafos

Busca em Largura

Busca em Profundidade

Ordenacao Topologica

Componentes Fortemente Conexos

Grafos e Algoritmos de Busca 3 / 65

Introducao

Sumario

Introducao

Representacao de Grafos

Busca em Largura

Busca em Profundidade

Ordenacao Topologica

Componentes Fortemente Conexos

Grafos e Algoritmos de Busca 4 / 65

Introducao

Introducao

Grafos

◮ Aqui apresentaremos metodos para representar grafos erealizar buscas

◮ Busca em grafos significa seguir sistematicamente as arestas evisitar os vertices

Grafos e Algoritmos de Busca 5 / 65

Introducao

Introducao

GrafosEstudaremos tres representacoes de grafos:

◮ listas de adjacencia

◮ matrizes de adjacencia

◮ matrizes de incidencia

Estudaremos tambem:

◮ metodos de busca em largura

◮ metodos de busca em profundidade

◮ ordenacao topologica

Grafos e Algoritmos de Busca 6 / 65

Representacao de Grafos

Sumario

Introducao

Representacao de Grafos

Busca em Largura

Busca em Profundidade

Ordenacao Topologica

Componentes Fortemente Conexos

Grafos e Algoritmos de Busca 7 / 65

Representacao de Grafos

Representacao de Grafos

Lista de Adjacencia

◮ Dado um grafo G = (V ,E ), esta representacao e tipicamentepreferida pois e uma maneira compacta de representar grafosesparsos – aqueles onde |E | ≪ |V |2

◮ A representacao por listas de adjacencia consiste em um vetorAdj com |V | listas de adjacencia, uma para cada verticev ∈ V .

◮ Para cada u ∈ V , Adj [u] contem ponteiros para todos osvertices v tal que (u, v) ∈ E . Ou seja, Adj [u] consiste detodos os vertices que sao adjacentes a u

Grafos e Algoritmos de Busca 8 / 65

Representacao de Grafos

Representacao de Grafos

Lista de Adjacencia

1

1

2

2

22

3

3

4

4

4

4

5

5

55

6

6

66

Adj

\

\

\

\

\

\

Grafos e Algoritmos de Busca 9 / 65

Representacao de Grafos

Representacao de Grafos

Matriz de Adjacencia

◮ A representacao por matriz de adjacencia e preferida,entretanto, quando o grafo e denso, ou seja, quando|E | ≈ |V |2.

◮ Para um grafo G = (V ,E ), assumimos que os vertices saorotulados com numeros 1, 2, . . . , |V |.

◮ A representacao consiste de uma matriz A = (aij) dedimensoes |V | × |V |, onde

aij =

{

1 se (i , j) ∈ E

0 caso contrario

Grafos e Algoritmos de Busca 10 / 65

Representacao de Grafos

Representacao de Grafos

Matriz de Adjacencia

0

00

00

0

00

0

0

0

0

0

0

0

0000

0

0

0

0

0

0

0

0

0 1

1

11

1

1

1

1

11

1

2

22

3

3

3

4

4

4

5

55

6

66

Grafos e Algoritmos de Busca 11 / 65

Representacao de Grafos

Representacao de Grafos

Matriz de incidencia

◮ O grafo direcionado G = (V ,E ) e representado por umamatriz A ∈ R

n×m, onde |V | = n e |E | = m.

◮ Cada linha de A corresponde a um vertice.

◮ Cada coluna de A corresponde a uma aresta.

(1, 2) (1, 4) (2, 5) (3, 5) (3, 6) (4, 2) (5, 4) (6, 6)1 1 0 0 0 0 0 0−1 0 1 0 0 −1 0 00 0 0 1 1 0 0 00 −1 0 0 0 1 −1 00 0 −1 −1 0 0 1 00 0 0 0 −1 0 0 0

Grafos e Algoritmos de Busca 12 / 65

Representacao de Grafos

Representacao de Grafos

Matriz de incidencia

◮ A matriz de incidencia e utilizada com frequencia emproblemas de otimizacao

◮ Problema de fluxo em redes

Minimize cT x

Sujeito a :

Ax = b

l ≤ x ≤ u

x = [xij : (i , j) ∈ E ]

Grafos e Algoritmos de Busca 13 / 65

Busca em Largura

Sumario

Introducao

Representacao de Grafos

Busca em Largura

Busca em Profundidade

Ordenacao Topologica

Componentes Fortemente Conexos

Grafos e Algoritmos de Busca 14 / 65

Busca em Largura

Algoritmos de Busca

Busca em Largura

◮ A busca em largura e um dos algoritmos mais simples paraexploracao de um grafo.

◮ Dados um grafo G = (V ,E ) e um vertice s, chamado defonte, a busca em largura sistematicamente explora as arestasde G de maneira a visitar todos os vertices alcancaveis a partirde s.

Grafos e Algoritmos de Busca 15 / 65

Busca em Largura

Algoritmos de Busca

Busca em Largura

◮ Esta busca e dita em largura porque ela expande a fronteiraentre vertices conhecidos e desconhecidos de uma formauniforme ao longo da fronteira.

◮ Ou seja, o algoritmo descobre todos os vertices com distanciak de s antes de descobrir qualquer vertice de distancia k + 1.

Grafos e Algoritmos de Busca 16 / 65

Busca em Largura

Algoritmos de Busca

Busca em Largura

s

k = 1

k = 2

Grafos e Algoritmos de Busca 17 / 65

Busca em Largura

Busca em Largura

Cores

◮ Para controlar a busca, a BL (Busca em Largura) pinta cadavertice na cor branca, cinza ou preta.

◮ Todos os vertices iniciam com a cor branca e podem, maistarde, se tornar cinza e depois preta.

◮ Branca: nao visitado◮ Cinza: visitado◮ Preta: visitado e seus nos adjacentes visitados

Grafos e Algoritmos de Busca 18 / 65

Busca em Largura

Busca em Largura

Algoritmo

BFS(G , s)for each u ∈ V [G ]− {s}

Color [u]← white

d [u]←∞π[u]← NIL

endforcolor [s]← gray

d [s]← 0Q ← {s} * Queue *

......

Grafos e Algoritmos de Busca 19 / 65

Busca em Largura

Busca em Largura

Algoritmo

while Q 6= ∅u ← head [Q]for each v ∈ Adj [u]

if color [v ] = white

color [v ]← gray

d [v ]← d [u] + 1π[v ]← u

Enqueue(Q,v)endif

endforDequeue(Q)color [u]← black

endwhile

Grafos e Algoritmos de Busca 20 / 65

Busca em Largura

Busca em Largura

Algoritmo

◮ Quando um vertice e visitado pela primeira vez, sua cor emodificada de branco para cinza.

◮ Quando todos os vertices adjacentes a um vertice cinza saovisitados, ele se torna preto.

Grafos e Algoritmos de Busca 21 / 65

Busca em Largura

Exemplo

Busca em Largura

Exemplo

◮ Inıcio

01

1

1

2

2

3

3

4

4

5

5 6

6

d

π

c

Q

g wwwww

∞∞∞∞∞

\\\\\\

Grafos e Algoritmos de Busca 22 / 65

Busca em Largura

Exemplo

Busca em Largura

Exemplo

◮ Explorando vertice 1

0

11

111

1

2

2

2

3

3

4

4

4

5

5 6

6

d

π

c

Q

gg wwwb

∞∞∞

\\\\

Grafos e Algoritmos de Busca 23 / 65

Busca em Largura

Exemplo

Busca em Largura

Exemplo

◮ Explorando vertice 2

0

0

11

111

1

2

22

2

3

3

3

4

4

4

5

5 6

6

d

π

c

Q

g g wwbb

∞∞

\\

Grafos e Algoritmos de Busca 24 / 65

Busca em Largura

Exemplo

Busca em Largura

Exemplo

◮ Explorando vertice 3

0

0

11

111

1

22

2

22

2

3

3

3

44

4

4

5

5

5

6

6

6

d

π

c

Q

ggg bbb

Grafos e Algoritmos de Busca 25 / 65

Busca em Largura

Exemplo

Busca em Largura

Exemplo

◮ Arvore da busca em largura

12

3 4

5

6

Grafos e Algoritmos de Busca 26 / 65

Busca em Largura

Analise

Busca em Largura

Analise

◮ Cada vertice de V e colocado na fila Q no maximo uma vez.

◮ A lista de adjacencia de um vertice qualquer de u e percorridasomente quando o vertice e removido da fila

◮ Daı concluımos que o algoritmo roda em tempo O(|V |+ |E |)pois as operacoes executadas levam Θ(1).

Grafos e Algoritmos de Busca 27 / 65

Busca em Largura

Caminho mais curto

Busca em Largura

Caminho mais curtoSeja δ(s, v) a distancia do vertice v a partir do vertice s, sendo adistancia o menor numero de arestas em qualquer caminho em G

com origem em s e destino para v .

Grafos e Algoritmos de Busca 28 / 65

Busca em Largura

Caminho mais curto

Busca em Largura

TeoremaSeja G = (V ,E ) um grafo direcionado ou nao, e suponha que BFSe executada a partir de um vertice s ∈ V . Entao:

◮ Durante a busca, BFS descobre cada vertice v ∈ V que sejaalcancavel a partir de s

◮ Ao final, d [v ] = δ(s, v) para todo v ∈ V .

◮ Alem disso, para qualquer vertice v 6= s que seja alcancavel apartir de s, um caminho mais curto de s para v e o caminhode s para π[v ] seguido da aresta (π[v ], v).

s π[v ] v

Grafos e Algoritmos de Busca 29 / 65

Busca em Profundidade

Sumario

Introducao

Representacao de Grafos

Busca em Largura

Busca em Profundidade

Ordenacao Topologica

Componentes Fortemente Conexos

Grafos e Algoritmos de Busca 30 / 65

Busca em Profundidade

Busca em Profundidade

Algoritmos de Busca

Busca em Profundidade

◮ A estrategia aqui e explorar o grafo em profundidade.

◮ Na busca em profundidade, as arestas sao exploradas a partirdo vertice mais recentemente visitado.

◮ Da mesma forma que a busca em largura, sempre que umvertice v e descoberto durante a busca na lista de adjacenciade um outro vertice ja visitado u, a DFS memoriza esteevento ao definir o predecessor de v , π[v ] como u.

◮ Diferentemente da BFS, cujo grafo predecessor forma umaarvore, o grafo predecessor de DFS pode ser composto devarias arvores.

Grafos e Algoritmos de Busca 31 / 65

Busca em Profundidade

Busca em Profundidade

Busca em Profundidade

Grafo predecessor

Gπ = (V ,Eπ)Eπ = {(π[v ], v) : v ∈ V e π[v ] 6= NIL }

Os vertices do grafo sao coloridos durante a busca.

◮ Branco: antes da busca.

◮ Cinza: quando o vertice for visitado.

◮ Preto: quando os vertices adjacentes foram visitados.

Grafos e Algoritmos de Busca 32 / 65

Busca em Profundidade

Busca em Profundidade

Busca em Profundidade

timestamp

Alem de construir uma floresta, DFS marca cada vertice com umtimestamp. Cada vertice tem dois timestamps.

◮ d [v ]→ indica o instante em que v foi visitado (pintado com

cinza).

◮ f [v ]→ indica o instante em que a busca pelos vertices nalista de adjacencia de v foi completada (pintado de preto).

Usando timestamp 1, 2, . . ., verifica-se que

◮ d [v ], f [v ] ∈ 1, . . . , 2|V |, ∀v ∈ V

◮ d [v ] < f [v ], ∀v ∈ V

Grafos e Algoritmos de Busca 33 / 65

Busca em Profundidade

Busca em Profundidade

Busca em Profundidade

Algoritmo

DFS(G )for each vertex u ∈ V [G ]

color [u]← white

π[u]← NILtime ← 0for each u ∈ V [G ]

if color [u] = white

DFS visit(u)

Grafos e Algoritmos de Busca 34 / 65

Busca em Profundidade

Busca em Profundidade

Busca em Profundidade

Algoritmo

DFS visit(u)color [u]← gray

d [u]← time ← time + 1for each v ∈ Adj [u]

if color [u] = white

π[v ]← u

DFS visit(v)color [u]← black

f [u]← time ← time + 1

Grafos e Algoritmos de Busca 35 / 65

Busca em Profundidade

Exemplo

Busca em Profundidade

Exemplo

u v w

x y z

1/

Grafos e Algoritmos de Busca 36 / 65

Busca em Profundidade

Exemplo

Busca em Profundidade

Exemplo

u v w

x y z

1/ 2/

Grafos e Algoritmos de Busca 37 / 65

Busca em Profundidade

Exemplo

Busca em Profundidade

Exemplo

u v w

x y z

1/ 2/

3/

Grafos e Algoritmos de Busca 38 / 65

Busca em Profundidade

Exemplo

Busca em Profundidade

Exemplo

acements

u v w

x y z

1/ 2/

3/4/

Grafos e Algoritmos de Busca 39 / 65

Busca em Profundidade

Exemplo

Busca em Profundidade

Exemplo

acements

u v w

x y z

1/ 2/

3/4/5

Grafos e Algoritmos de Busca 40 / 65

Busca em Profundidade

Exemplo

Busca em Profundidade

Exemplo

acements

u v w

x y z

1/ 2/

3/64/5

Grafos e Algoritmos de Busca 41 / 65

Busca em Profundidade

Exemplo

Busca em Profundidade

Exemplo

acements

u v w

x y z

1/ 2/7

3/64/5

Grafos e Algoritmos de Busca 42 / 65

Busca em Profundidade

Exemplo

Busca em Profundidade

Exemplo

u v w

x y z

1/8 2/7

3/64/5

9/

Grafos e Algoritmos de Busca 43 / 65

Busca em Profundidade

Exemplo

Busca em Profundidade

Exemplo

u v w

x y z

1/8 2/7

3/64/5

9/

10/

Grafos e Algoritmos de Busca 44 / 65

Busca em Profundidade

Exemplo

Busca em Profundidade

Exemplo

u v w

x y z

1/8 2/7

3/64/5

9/12

10/11

Grafos e Algoritmos de Busca 45 / 65

Busca em Profundidade

Analise

Busca em Profundidade

AnaliseO procedimento DFS visit(v) e chamado exatamente uma vez

para cada vertice, pois e chamado apenas para vertices white e naprimeira vez que isto acontece, ele e pintado de gray .

Grafos e Algoritmos de Busca 46 / 65

Busca em Profundidade

Analise

Propriedades da Busca em Profundidade

Teorema dos ParentesesNa busca em profundidade de um grafo (direcionado ounao-direcionado) G = (V ,E ), para quaisquer dois vertices u e v ,exatamente uma de tres condicoes vale:

1. os intervalos [d [u], f [u]] e [d [v ], f [v ]] sao disjuntos, e u nao edescendente de v , bem como v nao e descendente de u nafloresta da busca em profundidade

2. o intervalo [d [u], f [u]] esta contido em [d [v ], f [v ]], e u e umdescendente de v na floresta da busca em profundidade

3. o intervalo [d [v ], f [v ]] esta contido em [d [u], f [u]], e v e umdescendente de u na floresta da busca em profundidade

Grafos e Algoritmos de Busca 47 / 65

Busca em Profundidade

Teorema dos Parenteses

Teorema dos Parenteses

y z s t

uwx v

C C C

C BB F

3/6 2/9 1/10 11/16

14/1512/137/84/5

Grafos e Algoritmos de Busca 48 / 65

Busca em Profundidade

Teorema dos Parenteses

Teorema dos Parenteses

1 2 5 10 163 4 6 7 8 9 11 12 13 14 15

s

y w

x

t

v uz

Grafos e Algoritmos de Busca 49 / 65

Busca em Profundidade

Classificacao de Arestas

Propriedades da Busca em Profundidade

◮ A busca em profundidade pode ser usada para classificar asarestas de G = (V ,E ).

◮ Tal classificacao traz informacoes uteis sobre o grafo.

◮ Por exemplo, G e acıclico se nao existem arestas“reversas”

Grafos e Algoritmos de Busca 50 / 65

Busca em Profundidade

Classificacao de Arestas

Propriedades da Busca em Profundidade

Podemos classificar as arestas em quatro tipos de acordo com afloresta Gπ produzida pela busca em profundidade;

Arestas Arvore: as arestas da floresta em profundidade Gπ

Arestas Reversas: as arestas (u, v) que conectam u a um ancestralv

Lacos sao considerados arestas reversas.

Arestas Diretas: as arestas (u, v) que conectam um vertice u a umdescendente v

Arestas Cruzadas: todas as demais arestas

Grafos e Algoritmos de Busca 51 / 65

Busca em Profundidade

Classificacao de Arestas

Busca em Profundidade

y z s t

uwx v

C C C

C BB F

3/6 2/9 1/10 11/16

14/1512/137/84/5

Grafos e Algoritmos de Busca 52 / 65

Busca em Profundidade

Classificacao de Arestas

Classificacao de Arestas

s

z

wy

x

t

v uB

C

F

C

C

C

B

Grafos e Algoritmos de Busca 53 / 65

Ordenacao Topologica

Sumario

Introducao

Representacao de Grafos

Busca em Largura

Busca em Profundidade

Ordenacao Topologica

Componentes Fortemente Conexos

Grafos e Algoritmos de Busca 54 / 65

Ordenacao Topologica

Ordenacao topologica

◮ Mostraremos como busca em profundidade pode serempregada para encontrar uma ordenacao topologica de umgrafo direcionado acıclico G = (V ,E ).

◮ Uma ordenacao topologica 〈u1, . . . , un〉 dos vertices de G euma ordenacao linear tal que se (ui , uj) ∈ E , entao ui precedeuj na ordenacao, ou seja, i < j .

◮ Ordenacao topologica pode ser vista como um arranjo dosvertices na horizontal, tal que as arestas vao da esquerda paraa direita.

Grafos e Algoritmos de Busca 55 / 65

Ordenacao Topologica

Busca em Largura

Topological-Sort(G )

call DFS(G ) to compute finishing f [v ] for each vertex v ,as each vertex is finished, insert it into the front of a linked list

return the linked list of vertices

Grafos e Algoritmos de Busca 56 / 65

Ordenacao Topologica

Exemplo

Roupa deBaixo

RelogioSapatos

Gravata

Jaqueta

Calca

Cinto

Camisa

Meias11/16

12/15

6/7

17/18

9/10

13/141/8

2/5

3/4

Grafos e Algoritmos de Busca 57 / 65

Ordenacao Topologica

Exemplo

Roupa deBaixo

RelogioSapatos Gravata JaquetaCalca CintoCamisaMeias

11/16 12/15 6/717/18 9/1013/14 1/8 2/5 3/4

Grafos e Algoritmos de Busca 58 / 65

Componentes Fortemente Conexos

Sumario

Introducao

Representacao de Grafos

Busca em Largura

Busca em Profundidade

Ordenacao Topologica

Componentes Fortemente Conexos

Grafos e Algoritmos de Busca 59 / 65

Componentes Fortemente Conexos

Componentes Fortemente Conexos

◮ Um componente fortemente conexo de um grafo direcionadoG = (V ,E ) e um conjunto de vertices C ⊆ V maximo tal quepara todo par de vertices u e v em C , existe um caminhou v e um caminho v u.

◮ Estamos interessados em desenvolver um algoritmo queencontra todos os componentes fortemente conexos de G .

◮ Vamos utilizar o grafo transposto GT = (V ,ET ) ondeET = {(u, v) : (v , u) ∈ E}. GT consiste de G com as arestasreversas.

Grafos e Algoritmos de Busca 60 / 65

Componentes Fortemente Conexos

Strongly-Connected-Components(G )

1 call DFS(G ) to compute finishing f [u] for each vertex u

2 compute GT

3 call DFS(GT ), but in the main loop of DFS, consider the verticesin decreasing order of f [u] (as computed in step 1)

4 output the vertices of each depth-first search treebuilt in step 3 as an independent connected component

Grafos e Algoritmos de Busca 61 / 65

Componentes Fortemente Conexos

Exemplo: Grafo G = (V ,E )

a b c d

e f g h

Grafos e Algoritmos de Busca 62 / 65

Componentes Fortemente Conexos

DFS(G )

a b c d

e f g h

11/1613/14

12/15 3/4 2/7

1/10 8/9

5/6

Grafos e Algoritmos de Busca 63 / 65

Componentes Fortemente Conexos

GT

b c d

e f g h

a

Grafos e Algoritmos de Busca 64 / 65

Componentes Fortemente Conexos

DFS(GT )

b c d

e f g h

a

Nos em amarelo sao raızes das arvores de profundidade.

Grafos e Algoritmos de Busca 65 / 65

Componentes Fortemente Conexos

Conclusoes

◮ Fim!

◮ Obrigado pela presenca