Sunteți pe pagina 1din 65

Grafos e Algoritmos de Busca

1 / 65

Grafos e Algoritmos de Busca


Eduardo Camponogara
Departamento de Automao e Sistemas ca Universidade Federal de Santa Catarina

DAS-9003: Introduo a Algoritmos ca

Grafos e Algoritmos de Busca Sumrio a

2 / 65

Introduo ca Representao de Grafos ca Busca em Largura Busca em Profundidade Ordenao Topolgica ca o Componentes Fortemente Conexos

Grafos e Algoritmos de Busca Introduo ca

3 / 65

Sumrio a
Introduo ca Representao de Grafos ca Busca em Largura Busca em Profundidade Ordenao Topolgica ca o Componentes Fortemente Conexos

Grafos e Algoritmos de Busca Introduo ca

4 / 65

Introduo ca

Grafos

Aqui apresentaremos mtodos para representar grafos e e realizar buscas Busca em grafos signica seguir sistematicamente as arestas e visitar os vrtices e

Grafos e Algoritmos de Busca Introduo ca

5 / 65

Introduo ca
Grafos
Estudaremos trs representaes de grafos: e co

listas de adjacncia e matrizes de adjacncia e matrizes de incidncia e mtodos de busca em largura e mtodos de busca em profundidade e ordenao topolgica ca o

Estudaremos tambm: e

Grafos e Algoritmos de Busca Representao de Grafos ca

6 / 65

Sumrio a
Introduo ca Representao de Grafos ca Busca em Largura Busca em Profundidade Ordenao Topolgica ca o Componentes Fortemente Conexos

Grafos e Algoritmos de Busca Representao de Grafos ca

7 / 65

Representao de Grafos ca
Lista de Adjacncia e

Dado um grafo G = (V , E ), esta representao tipicamente ca e preferida pois uma maneira compacta de representar grafos e esparsos aqueles onde |E | |V |2 A representao por listas de adjacncia consiste em um vetor ca e Adj com |V | listas de adjacncia, uma para cada vrtice e e v V. Para cada u V , Adj[u] contm ponteiros para todos os e vrtices v tal que (u, v ) E . Ou seja, Adj[u] consiste de e todos os vrtices que so adjacentes a u e a

Grafos e Algoritmos de Busca Representao de Grafos ca

8 / 65

Representao de Grafos ca
Lista de Adjacncia e
Adj 1 1 2 3 2 3 4 4 5 6 5 6 2 5 \ 5 2 \ 4 \ 6 \ 6 \ 4 \

Grafos e Algoritmos de Busca Representao de Grafos ca

9 / 65

Representao de Grafos ca
Matriz de Adjacncia e

A representao por matriz de adjacncia preferida, ca e e entretanto, quando o grafo denso, ou seja, quando e |E | |V |2 . Para um grafo G = (V , E ), assumimos que os vrtices so e a rotulados com nmeros 1, 2, . . . , |V |. u A representao consiste de uma matriz A = (aij ) de ca dimenses |V | |V |, onde o aij = 1 se (i, j) E 0 caso contrrio a

Grafos e Algoritmos de Busca Representao de Grafos ca

10 / 65

Representao de Grafos ca
Matriz de Adjacncia e
1 1 0 1 2 3 2 3 4 4 5 6 5 6 0 0 0 0 0 2 1 0 0 1 0 0 3 0 0 0 0 0 0 4 1 0 0 0 1 0 5 0 1 1 0 0 0 6 0 0 1 0 0 1

Grafos e Algoritmos de Busca Representao de Grafos ca

11 / 65

Representao de Grafos ca
Matriz de incidncia e

O grafo direcionado G = (V , E ) representado por uma e matriz A Rnm , onde |V | = n e |E | = m. Cada linha de A corresponde a um vrtice. e 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 0 0 0 0 1 1 0 0 0 0 1 0 0 0 1 1 0 0 0 1 1 0 0 1 0 0 0 0 0 1 0 0 0

Grafos e Algoritmos de Busca Representao de Grafos ca

12 / 65

Representao de Grafos ca
Matriz de incidncia e

A matriz de incidncia utilizada com frequncia em e e e problemas de otimizao ca Problema de uxo em redes Minimize c T x Sujeito a : Ax = b l x u x = [xij : (i, j) E ]

Grafos e Algoritmos de Busca Busca em Largura

13 / 65

Sumrio a
Introduo ca Representao de Grafos ca Busca em Largura Busca em Profundidade Ordenao Topolgica ca o Componentes Fortemente Conexos

Grafos e Algoritmos de Busca Busca em Largura

14 / 65

Algoritmos de Busca

Busca em Largura

A busca em largura um dos algoritmos mais simples para e explorao de um grafo. ca Dados um grafo G = (V , E ) e um vrtice s, chamado de e fonte, a busca em largura sistematicamente explora as arestas de G de maneira a visitar todos os vrtices alcanveis a partir e ca de s.

Grafos e Algoritmos de Busca Busca em Largura

15 / 65

Algoritmos de Busca

Busca em Largura

Esta busca dita em largura porque ela expande a fronteira e entre vrtices conhecidos e desconhecidos de uma forma e uniforme ao longo da fronteira. Ou seja, o algoritmo descobre todos os vrtices com distncia e a k de s antes de descobrir qualquer vrtice de distncia k + 1. e a

Grafos e Algoritmos de Busca Busca em Largura

16 / 65

Algoritmos de Busca
Busca em Largura
s

k=1

k=2

Grafos e Algoritmos de Busca Busca em Largura

17 / 65

Busca em Largura

Cores

Para controlar a busca, a BL (Busca em Largura) pinta cada vrtice na cor branca, cinza ou preta. e Todos os vrtices iniciam com a cor branca e podem, mais e tarde, se tornar cinza e depois preta.

Branca: no visitado a Cinza: visitado Preta: visitado e seus ns adjacentes visitados o

Grafos e Algoritmos de Busca Busca em Largura

18 / 65

Busca em Largura
Algoritmo
BFS(G , s) for each u V [G ] {s} Color [u] white d[u] [u] NIL endfor color [s] gray d[s] 0 Q {s} * Queue * . . . . . .

Grafos e Algoritmos de Busca Busca em Largura

19 / 65

Busca em Largura
Algoritmo
while Q = 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 endfor Dequeue(Q) color [u] black endwhile

Grafos e Algoritmos de Busca Busca em Largura

20 / 65

Busca em Largura

Algoritmo

Quando um vrtice visitado pela primeira vez, sua cor e e e modicada de branco para cinza. Quando todos os vrtices adjacentes a um vrtice cinza so e e a visitados, ele se torna preto.

Grafos e Algoritmos de Busca Busca em Largura Exemplo

21 / 65

Busca em Largura
Exemplo

In cio
1 d 2 1 5 c Q 0 \ g 1 2 \ w 3 \ w 4 \ w 5 \ w 6 \ w

Grafos e Algoritmos de Busca Busca em Largura Exemplo

22 / 65

Busca em Largura
Exemplo

Explorando vrtice 1 e
1 d 2 1 5 c Q 0 \ b 2 2 1 1 g 4 3 \ w 4 1 1 g 5 \ w 6 \ w

Grafos e Algoritmos de Busca Busca em Largura Exemplo

23 / 65

Busca em Largura
Exemplo

Explorando vrtice 2 e
1 d 2 1 5 c Q 0 0 b 4 2 1 1 b 3 3 2 2 g 4 1 1 g 5 \ w 6 \ w

Grafos e Algoritmos de Busca Busca em Largura Exemplo

24 / 65

Busca em Largura
Exemplo

Explorando vrtice 3 e
1 d 2 1 5 c Q 0 0 b 3 2 1 1 b 5 3 2 2 g 6 4 1 1 b 5 2 4 g 6 2 4 g

Grafos e Algoritmos de Busca Busca em Largura Exemplo

25 / 65

Busca em Largura
Exemplo

Arvore da busca em largura

Grafos e Algoritmos de Busca Busca em Largura Anlise a

26 / 65

Busca em Largura

Anlise a

Cada vrtice de V colocado na la Q no mximo uma vez. e e a A lista de adjacncia de um vrtice qualquer de u percorrida e e e somente quando o vrtice removido da la e e Da conclu mos que o algoritmo roda em tempo O(|V | + |E |) pois as operaes executadas levam (1). co

Grafos e Algoritmos de Busca Busca em Largura Caminho mais curto

27 / 65

Busca em Largura

Caminho mais curto


Seja (s, v ) a distncia do vrtice v a partir do vrtice s, sendo a a e e distncia o menor nmero de arestas em qualquer caminho em G a u com origem em s e destino para v .

Grafos e Algoritmos de Busca Busca em Largura Caminho mais curto

28 / 65

Busca em Largura
Teorema
Seja G = (V , E ) um grafo direcionado ou no, e suponha que BFS a executada a partir de um vrtice s V . Ento: e e a

Durante a busca, BFS descobre cada vrtice v V que seja e alcanvel a partir de s ca Ao nal, d[v ] = (s, v ) para todo v V . Alm disso, para qualquer vrtice v = s que seja alcanvel a e e ca partir de s, um caminho mais curto de s para v o caminho e de s para [v ] seguido da aresta ([v ], v ).
s [v ] v

Grafos e Algoritmos de Busca Busca em Profundidade

29 / 65

Sumrio a
Introduo ca Representao de Grafos ca Busca em Largura Busca em Profundidade Ordenao Topolgica ca o Componentes Fortemente Conexos

Grafos e Algoritmos de Busca Busca em Profundidade Busca em Profundidade

30 / 65

Algoritmos de Busca
Busca em Profundidade

A estratgia aqui explorar o grafo em profundidade. e e Na busca em profundidade, as arestas so exploradas a partir a do vrtice mais recentemente visitado. e Da mesma forma que a busca em largura, sempre que um vrtice v descoberto durante a busca na lista de adjacncia e e e de um outro vrtice j visitado u, a DFS memoriza este e a evento ao denir o predecessor de v , [v ] como u. Diferentemente da BFS, cujo grafo predecessor forma uma rvore, o grafo predecessor de DFS pode ser composto de a vrias rvores. a a

Grafos e Algoritmos de Busca Busca em Profundidade Busca em Profundidade

31 / 65

Busca em Profundidade

Grafo predecessor
G = (V , E ) E = {([v ], v ) : v V e [v ] = NIL } Os vrtices do grafo so coloridos durante a busca. e a

Branco: antes da busca. Cinza: quando o vrtice for visitado. e Preto: quando os vrtices adjacentes foram visitados. e

Grafos e Algoritmos de Busca Busca em Profundidade Busca em Profundidade

32 / 65

Busca em Profundidade
timestamp
Alm de construir uma oresta, DFS marca cada vrtice com um e e timestamp. Cada vrtice tem dois timestamps. e

d[v ] indica o instante em que v foi visitado (pintado com cinza). f [v ] indica o instante em que a busca pelos vrtices na e lista de adjacncia de v foi completada (pintado de preto). e

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


d[v ], f [v ] 1, . . . , 2|V |, v V d[v ] < f [v ], v V

Grafos e Algoritmos de Busca Busca em Profundidade Busca em Profundidade

33 / 65

Busca em Profundidade
Algoritmo
DFS(G ) for each vertex u V [G ] color [u] white [u] NIL time 0 for each u V [G ] if color [u] = white DFS visit(u)

Grafos e Algoritmos de Busca Busca em Profundidade Busca em Profundidade

34 / 65

Busca em Profundidade
Algoritmo
DFS visit(u) color [u] gray d[u] time time + 1 for 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 Busca em Profundidade Exemplo

35 / 65

Busca em Profundidade

Exemplo
u 1/ v w

Grafos e Algoritmos de Busca Busca em Profundidade Exemplo

36 / 65

Busca em Profundidade

Exemplo
u 1/ v 2/ w

Grafos e Algoritmos de Busca Busca em Profundidade Exemplo

37 / 65

Busca em Profundidade

Exemplo
u 1/ v 2/ w

3/ x y z

Grafos e Algoritmos de Busca Busca em Profundidade Exemplo

38 / 65

Busca em Profundidade
acements

Exemplo
u 1/ v 2/ w

4/ x

3/ y z

Grafos e Algoritmos de Busca Busca em Profundidade Exemplo

39 / 65

Busca em Profundidade
acements

Exemplo
u 1/ v 2/ w

4/5 x

3/ y z

Grafos e Algoritmos de Busca Busca em Profundidade Exemplo

40 / 65

Busca em Profundidade
acements

Exemplo
u 1/ v 2/ w

4/5 x

3/6 y z

Grafos e Algoritmos de Busca Busca em Profundidade Exemplo

41 / 65

Busca em Profundidade
acements

Exemplo
u 1/ v 2/7 w

4/5 x

3/6 y z

Grafos e Algoritmos de Busca Busca em Profundidade Exemplo

42 / 65

Busca em Profundidade

Exemplo
u 1/8 v 2/7 w 9/

4/5 x

3/6 y z

Grafos e Algoritmos de Busca Busca em Profundidade Exemplo

43 / 65

Busca em Profundidade

Exemplo
u 1/8 v 2/7 w 9/

4/5 x

3/6 y

10/ z

Grafos e Algoritmos de Busca Busca em Profundidade Exemplo

44 / 65

Busca em Profundidade

Exemplo
u 1/8 v 2/7 w 9/12

4/5 x

3/6 y

10/11 z

Grafos e Algoritmos de Busca Busca em Profundidade Anlise a

45 / 65

Busca em Profundidade

Anlise a
O procedimento DFS visit(v ) chamado exatamente uma vez e para cada vrtice, pois chamado apenas para vrtices white e na e e e primeira vez que isto acontece, ele pintado de gray . e

Grafos e Algoritmos de Busca Busca em Profundidade Anlise a

46 / 65

Propriedades da Busca em Profundidade


Teorema dos Parnteses e
Na busca em profundidade de um grafo (direcionado ou no-direcionado) G = (V , E ), para quaisquer dois vrtices u e v , a e exatamente uma de trs condies vale: e co 1. os intervalos [d[u], f [u]] e [d[v ], f [v ]] so disjuntos, e u no a a e descendente de v , bem como v no descendente de u na a e oresta da busca em profundidade 2. o intervalo [d[u], f [u]] est contido em [d[v ], f [v ]], e u um a e descendente de v na oresta da busca em profundidade 3. o intervalo [d[v ], f [v ]] est contido em [d[u], f [u]], e v um a e descendente de u na oresta da busca em profundidade

Grafos e Algoritmos de Busca Busca em Profundidade Teorema dos Parnteses e

47 / 65

Teorema dos Parnteses e

y 3/6 B

z 2/9 F

s 1/10

t 11/16

4/5 C x

7/8 C w

12/13 C v

14/15 u

Grafos e Algoritmos de Busca Busca em Profundidade Teorema dos Parnteses e

48 / 65

Teorema dos Parnteses e

s z y x w v

t u

10

11

12

13

14

15

16

Grafos e Algoritmos de Busca Busca em Profundidade Classicao de Arestas ca

49 / 65

Propriedades da Busca em Profundidade

A busca em profundidade pode ser usada para classicar as arestas de G = (V , E ). Tal classicao traz informaes uteis sobre o grafo. ca co Por exemplo, G ac e clico se no existem arestas reversas a

Grafos e Algoritmos de Busca Busca em Profundidade Classicao de Arestas ca

50 / 65

Propriedades da Busca em Profundidade


Podemos classicar as arestas em quatro tipos de acordo com a oresta G produzida pela busca em profundidade; Arestas Arvore: as arestas da oresta em profundidade G Arestas Reversas: as arestas (u, v ) que conectam u a um ancestral v Laos so considerados arestas reversas. c a Arestas Diretas: as arestas (u, v ) que conectam um vrtice u a um e descendente v Arestas Cruzadas: todas as demais arestas

Grafos e Algoritmos de Busca Busca em Profundidade Classicao de Arestas ca

51 / 65

Busca em Profundidade

y 3/6 B

z 2/9 F

s 1/10

t 11/16

4/5 C x

7/8 C w

12/13 C v

14/15 u

Grafos e Algoritmos de Busca Busca em Profundidade Classicao de Arestas ca

52 / 65

Classicao de Arestas ca

s C B z C y C w F v

t B

C u

Grafos e Algoritmos de Busca Ordenao Topolgica ca o

53 / 65

Sumrio a
Introduo ca Representao de Grafos ca Busca em Largura Busca em Profundidade Ordenao Topolgica ca o Componentes Fortemente Conexos

Grafos e Algoritmos de Busca Ordenao Topolgica ca o

54 / 65

Ordenao topolgica ca o

Mostraremos como busca em profundidade pode ser empregada para encontrar uma ordenao topolgica de um ca o grafo direcionado ac clico G = (V , E ). Uma ordenao topolgica u1 , . . . , un dos vrtices de G ca o e e uma ordenao linear tal que se (ui , uj ) E , ento ui precede ca a uj na ordenao, ou seja, i < j. ca Ordenao topolgica pode ser vista como um arranjo dos ca o vrtices na horizontal, tal que as arestas vo da esquerda para e a a direita.

Grafos e Algoritmos de Busca Ordenao Topolgica ca o

55 / 65

Busca em Largura

Topological-Sort(G )
call DFS(G ) to compute nishing f [v ] for each vertex v , as each vertex is nished, insert it into the front of a linked list return the linked list of vertices

Grafos e Algoritmos de Busca Ordenao Topolgica ca o

56 / 65

Exemplo
11/16 Roupa de Baixo Meias 17/18

12/15

Cala c Camisa 1/8

Sapatos 13/14

Relgio 9/10 o

6/7

Cinto Gravata 2/5

Jaqueta

3/4

Grafos e Algoritmos de Busca Ordenao Topolgica ca o

57 / 65

Exemplo

Meias 17/18

Roupa de Baixo 11/16

Cala c 12/15

Sapatos 13/14

Relgio o 9/10

Camisa 1/8

Cinto 6/7

Gravata 2/5

Jaqueta 3/4

Grafos e Algoritmos de Busca Componentes Fortemente Conexos

58 / 65

Sumrio a
Introduo ca Representao de Grafos ca Busca em Largura Busca em Profundidade Ordenao Topolgica ca o Componentes Fortemente Conexos

Grafos e Algoritmos de Busca Componentes Fortemente Conexos

59 / 65

Componentes Fortemente Conexos

Um componente fortemente conexo de um grafo direcionado G = (V , E ) um conjunto de vrtices C V mximo tal que e e a para todo par de vrtices u e v em C , existe um caminho e u v e um caminho v u. Estamos interessados em desenvolver um algoritmo que encontra todos os componentes fortemente conexos de G . Vamos utilizar o grafo transposto G T = (V , E T ) onde E T = {(u, v ) : (v , u) E }. G T consiste de G com as arestas reversas.

Grafos e Algoritmos de Busca Componentes Fortemente Conexos

60 / 65

Strongly-Connected-Components(G )
1 2 3 4 call DFS(G ) to compute nishing f [u] for each vertex u compute G T call DFS(G T ), but in the main loop of DFS, consider the vertices in decreasing order of f [u] (as computed in step 1) output the vertices of each depth-rst search tree built in step 3 as an independent connected component

Grafos e Algoritmos de Busca Componentes Fortemente Conexos

61 / 65

Exemplo: Grafo G = (V , E )

Grafos e Algoritmos de Busca Componentes Fortemente Conexos

62 / 65

DFS(G )

a 13/14

b 11/16

c 1/10

d 8/9

12/15 e

3/4 f

2/7 g

5/6 h

Grafos e Algoritmos de Busca Componentes Fortemente Conexos

63 / 65

GT

Grafos e Algoritmos de Busca Componentes Fortemente Conexos

64 / 65

DFS(G T )

Ns em amarelo so ra das rvores de profundidade. o a zes a

Grafos e Algoritmos de Busca Componentes Fortemente Conexos

65 / 65

Concluses o

Fim! Obrigado pela presena c

S-ar putea să vă placă și