Você está na página 1de 23

CCAE

Centro de
Cincias
Aplicadas
e Educao

UFPB - Campus IV - Litoral Norte

Algoritmos Avanados
Grafos - Parte I: Introduo
Material baseado nos slides de Daniel Amaral de M. Rocha

Sumrio
O que so Grafos?
Tipos de Grafos
Problemas Interessantes
Estruturas de Dados
Busca

Em Largura
Em Profundidade

O que so Grafos?
Maneira de representar o mundo
Similar a rvores e lista, s que com menos
restries

Listas

Representao
Sequncial

rvores

Representao
Hierrquica

O que so Grafos? (2)


O que so rvores?
Conjunto de elementos que se relacionam, mas
com algumas restries:

S pode haver um caminho de um n a outro (sem


ciclos!)
Podemos tanto subir quanto descer na rvore

Temos que chegar de qualquer n at qualquer no

O que so Grafos? (3)

Lista

Lista

Lista

Lista

Lista

rvore

rvore

rvore

rvore

rvore

Grafo

Grafo

Grafo

Grafo

Grafo 5

O que so Grafos? (4)


Ento, finalmente, o que so grafos?
Conjunto de elementos (ns ou vrtices) que se
relacionam de alguma maneira (arcos ou
arestas).
Tais relaes podem possuir valor ou no.
No existem restries

10

5
2
1
6

O que so Grafos? (5)

Podemos formalizar essa definio, dizendo que


um grafo G = { V, E }

V um conjunto de ns ou vrtices
E um conjunto de relaes (arcos ou arestas) entre
ns (vizinhos)

Exemplo:

V = { 0, 1, 2, 3, 4}
E = { (1,2), (1,3), (3,4), (4,1), (0,0)}

4
1
3
7

Tipos de Grafos

Podemos classificar os grafos em vrios tipos:

Dirigidos ou no-dirigidos
Cclicos ou acclicos
Conexo ou desconexo

10
5
2
1
8

Tipos de Grafos (2)

Classificao importante: implcito e explcitos

Grafos explcitos so mais comuns e fceis de


trabalhar
Grafos implcitos surgem em vrios problemas
Quando conseguimos modelar um problema como um
grafo, ele se torna muito mais fcil

Exemplo de grafo implcito: Jogo da


Velha
X

X
O
O

O
O

O
O

O
O

X
X

X
O
O

...
10

Problemas Interessantes

Vrios problemas interessantes (e famosos) da


cincia da computao so modelados utilizando
Grafos:

Menor caminho entre ns


rvores geradoras mnimas
Fluxos em rede
Matching
Problema do Caixeiro Viajante
Problema da Colorao

11

Estruturas de Dados

Pergunta: como representar grafos em nossos


algoritmos?

Estrutura de dados!

Estruturas possveis

Lista de arestas
Lista de adjacncias (listas)
Lista de adjacncias (matriz)
Matriz de adjacncias

12

Estrutura de Dados (2)


Como avaliar uma estrutura de dados ?
Complexidade:

Existe aresta entre os ns i e j ? Qual o custo para


descobrir?
Quanto espao de memria essa representao
consome?

Exemplo:

V = { 0, 1, 2, 3, 4}
E = { (1,2), (1,3), (3,4), (4,1), (0,0)}

4
1
3
13

Estruturas de Dados (3)

Matriz de Adjacncias

Matriz de tamanho N x N
A clula (i,j) indica se existe (e o custo) aresta entre i e
j. Valor 0 indica aresta inexistente.
0

4
1
3
Busca de Aresta = O(1)
Gasto de Memria: O(n*n)

(i,j)

0
14

Estruturas de Dados (3)

Lista de Adjacncias

Array de listas encadeadas


Para descobrir se existe aresta (i,j) percorremos a lista
do n i at encontrarmos (ou no) j
(i)

4
1
3
Busca de Aresta = O(n)
Gasto de Memria: O(m)

15

Estruturas de Dados (3)

Lista de Adjacncias (Maratona Style)

Matriz de tamanho N x MAXGRAU


Para descobrir se existe aresta (i,j) percorremos o
vetor (i) at encontrarmos j ou -1.
0

4
1
3
Busca de Aresta = O(n)
Gasto de Memria: O(n*maxg)

(i)

-1

-1

-1

-1

-1
16

Busca em Grafos
Operao mais comum em Grafos: visita
sistemtica a seus ns (uma nica vez!)
Similares as buscas em rvore
Detalhe fundamental: ns visitados!
Dois tipos bsicos de busca:

busca em largura/extenso
busca em profundidade.

17

Busca em Largura
Neste tipo de busca, abrimos a busca como
nveis de uma rvore.
Para cada n, ns o processamos e colocamos
seus adjacentes em uma fila (FIFO)

1
3

4
3

Ordem Visita
2
1
4
0
18
3

Busca em Largura (2)


Busca-Largura( N incio ) {
AdicionarFila( inicio )
Enquanto ( Fila no est vazia ) {
N = RetirarFila()
Processar(N)
Para cada vizinho V no visitado de N
AdicionarFila(V)

1
3

4
3

19

Busca em Largura (3)

Vantagens

Se o custo das arestas for uniforme, a primeira soluo


encontrada garantida tima
Encontra as solues nos nveis mais rasos

Desvantagens

Exploso no gasto da memria (exponencial!)


Dificuldade para implementar

20

Busca em Profundidade
Neste tipo de busca, nos aprofundamos na
rvore de busca at no encontrarmos mais
caminhos
Para cada n, ns o processamos e visitamos
seus filhos

1
3

Ordem Visita
2
1
0
3
18
21
4

3
4

Busca em Profundidade (2)


Busca-Profundidade( N incio ) {
Processar(incio)
Se existe vizinho V de incio ainda no visitado
Busca-Profundidade(V)

}
2

1
3

3
4

22

Busca em Profundidade (3)

Vantagens

Facilidade de implementao
Pouco uso de memria (somente do caminho)

Desvantagens

Podemos demorar muito a chegar a solues

23

Você também pode gostar