Grafos
Representação
Algoritmos em Grafos
Letícia Rodrigues Bueno
UFABC
Número de Erdõs
Grafos
Representação
Número de Erdõs
Motivação
• Objetivo: aprender a resolver problemas;
• Como: usando grafos para modelar problemas;
• Grafos: ferramenta fundamental de abstração;
• Abstraímos problema real (usando grafos) e solucionamos
através de algoritmos;
Grafos
Representação
Número de Erdõs
Definição de Grafos
• Wikipedia (2012): “...conjunto de pontos (vértices) ligados
por retas (as arestas)”
• Abstração que permite codificar relacionamentos entre
pares de objetos;
• Objetos: cidades, pessoas, países, empresas, etc;
• Relacionamentos: amizade, conectividade, idioma, etc;
Grafos
Representação
Supervisão de pós-graduação
Número de Erdõs
Grafos
Representação
Número de Erdõs
Supervisão de pós-graduação
Rodrigo
Andreia
Leticia
Renata
Felipe
Jorge
Grafos
Representação
Número de Erdõs
Vôos Aéreos
Azul Linhas Aéreas, retirado de: http://www.voeazul.com.br/
Grafos
Representação
Número de Erdõs
Vôos Aéreos
Webjet Linhas Aéreas, retirado de: http://www.webjet.com.br/
Grafos
Representação
Vôos Aéreos
TAM Linhas Aéreas, retirado de: http://www.tam.com.br/
Número de Erdõs
Grafos
Representação
Número de Bacon
Fonte: http://oracleofbacon.org/
Número de Erdõs
Grafos
Representação
Número de Bacon
Fonte: http://oracleofbacon.org/
Número de Erdõs
Grafos
Representação
Número de Erdõs
Representação Computacional: Lista de Adjacências
(a) G
(b) Lista de Adjacências de G
Vantagem: espaço em memória Θ(n + m).
Desvantagem: determinar se aresta está em G exige
percorrer lista de adjacências.
Grafos
Representação
Número de Erdõs
Representação Computacional: Matriz de Adjacências
(c) H
(d) Matriz de Adjacências de H
Vantagem: determinar se aresta está em G exige O(1).
Desvantagem: espaço em memória Θ(n2 ).
Grafos
Representação
Número de Erdõs
Representação Computacional: E esse grafo?
12
11
2
8
9
4
7
13
1
5
6
14
(e) G1
3
10
Grafos
Representação
Número de Erdõs
Problema 1: Número de Erdõs
• Paul Erdõs: famoso matemático hungáro;
• Trabalhou com centenas de
colaboradores;
• Publicou mais de 1.400 artigos;
• Número de Erdõs é um tributo divertido
criado pelos amigos;
• Paul Erdõs tem número de Erdõs 0;
• Os colaboradores diretos tem número 1;
• Os colaboradores dos colaboradores tem
número 2 e assim por diante;
Grafos
Representação
Número de Erdõs
Definição
• Dada uma lista de pessoas e as relações de colaboração
entre elas, qual é o número de Erdõs de cada pessoa?
Grafos
Representação
Número de Erdõs
Definição
• Dada uma lista de pessoas e as relações de colaboração
entre elas, qual é o número de Erdõs de cada pessoa?
• Este problema pode ser modelado através de um grafo:
• As pessoas são os vértices;
• As relações de colaboração são as arestas.
Grafos
Representação
Número de Erdõs
Exemplo
Murty
Lovasz
Babai
Bondy
White
Chvatal
Harary
0 Erdos
Hell
Deng
Imrich
Papadi
mitriou
Watkins
Gates
Grafos
Representação
Número de Erdõs
Busca em Largura (BFS - Breadth-First Search)
Murty
Lovasz
Babai
Bondy
White
Chvatal
Harary
0 Erdos
Hell
Deng
Imrich
Papadi
mitriou
Watkins
Gates
Grafos
Representação
Número de Erdõs
Busca em Largura (BFS - Breadth-First Search)
Murty
Lovasz
Babai
Bondy
White
Chvatal
Harary
0 Erdos
Hell
Deng
Imrich
Papadi
mitriou
Watkins
Gates
Erdos
Grafos
Representação
Número de Erdõs
Busca em Largura (BFS - Breadth-First Search)
Murty
Bondy
Chvatal1
Lovasz 1
Babai
1
White
Harary 1
0 Erdos
Hell
1
Deng
Imrich
Papadi
mitriou
Watkins
Gates
Chvatal Lovasz Babai Hell Harary
Grafos
Representação
Número de Erdõs
Busca em Largura (BFS - Breadth-First Search)
Murty
Bondy 2
Chvatal1
Lovasz 1
Babai
1
2
White
Harary 1
0 Erdos
Hell
1
2 Deng
Imrich2
Papadi
mitriou
Watkins2
Gates
Bondy Imrich Watkins Deng White
Grafos
Representação
Número de Erdõs
Busca em Largura (BFS - Breadth-First Search)
Murty 3
Bondy 2
2
Chvatal1
Lovasz 1
Babai
1
White
Harary 1
0 Erdos
Hell
1
Imrich2
Watkins2
Murty Papadimitriou
2 Deng
3
Papadi
mitriou
Gates
Grafos
Representação
Número de Erdõs
Busca em Largura (BFS - Breadth-First Search)
Murty 3
Bondy 2
2
Chvatal1
Lovasz 1
Babai
1
White
Harary 1
0 Erdos
Hell
1
2 Deng
Papadi
mitriou
Imrich2
3
Watkins2
4 Gates
Gates
Grafos
Representação
Número de Erdõs
Busca em Largura (BFS - Breadth-First Search)
Murty
Bondy
White
Chvatal
Harary
Lovasz
Erdos
Babai
Hell
Deng
Imrich
Papadi
mitriou
Watkins
Gates
Grafos
Representação
Algoritmo BFS
1 bfs(G, s):
2
para u em V(G) faça
3
u.visitado = False
4
u.d = ∞
5
u.p = None
6
s.visitado = True
7
s.d = 0
8
Q = Fila()
9
insere(Q, s)
10
enquanto tamanho(Q) > 0 faça
11
u = remove(Q)
12
para v em adj(u) faça
13
se não v.visitado então
14
v.d = u.d + 1
15
v.p = u
16
v.visitado = True
17
insere(Q, v)
Número de Erdõs
Grafos
Representação
Número de Erdõs
Algoritmo BFS
1 bfs(G, s):
2
para u em V(G) faça
3
u.visitado = False
4
u.d = ∞
5
u.p = None
6
s.visitado = True
7
s.d = 0
8
Q = Fila()
9
insere(Q, s)
10
enquanto tamanho(Q) > 0 faça
11
u = remove(Q)
12
para v em adj(u) faça
13
se não v.visitado então
14
v.d = u.d + 1
15
v.p = u
16
v.visitado = True
17
insere(Q, v)
Análise da complexidade:
Grafos
Representação
Número de Erdõs
Algoritmo BFS
1 bfs(G, s):
2
para u em V(G) faça
3
u.visitado = False
4
u.d = ∞
5
u.p = None
6
s.visitado = True
7
s.d = 0
8
Q = Fila()
9
insere(Q, s)
10
enquanto tamanho(Q) > 0 faça
11
u = remove(Q)
12
para v em adj(u) faça
13
se não v.visitado então
14
v.d = u.d + 1
15
v.p = u
16
v.visitado = True
17
insere(Q, v)
Análise da complexidade:
• Cada vértice
adicionado uma vez
na fila (linha 17): O(n)
Grafos
Representação
Número de Erdõs
Algoritmo BFS
1 bfs(G, s):
2
para u em V(G) faça
3
u.visitado = False
4
u.d = ∞
5
u.p = None
6
s.visitado = True
7
s.d = 0
8
Q = Fila()
9
insere(Q, s)
10
enquanto tamanho(Q) > 0 faça
11
u = remove(Q)
12
para v em adj(u) faça
13
se não v.visitado então
14
v.d = u.d + 1
15
v.p = u
16
v.visitado = True
17
insere(Q, v)
Análise da complexidade:
• Cada vértice
adicionado uma vez
na fila (linha 17): O(n)
• A lista de adjacência
de cada vértice
percorrida uma vez
(linha 12): O(m)
Grafos
Representação
Número de Erdõs
Algoritmo BFS
1 bfs(G, s):
2
para u em V(G) faça
3
u.visitado = False
4
u.d = ∞
5
u.p = None
6
s.visitado = True
7
s.d = 0
8
Q = Fila()
9
insere(Q, s)
10
enquanto tamanho(Q) > 0 faça
11
u = remove(Q)
12
para v em adj(u) faça
13
se não v.visitado então
14
v.d = u.d + 1
15
v.p = u
16
v.visitado = True
17
insere(Q, v)
Análise da complexidade:
• Cada vértice
adicionado uma vez
na fila (linha 17): O(n)
• A lista de adjacência
de cada vértice
percorrida uma vez
(linha 12): O(m)
• Complexidade total:
O(n + m)
Grafos
Representação
Número de Erdõs
Exercícios
1. Considere G = (V , E ), n = |V |, m = |E | e grafos
não-orientados. Calcule a complexidade no pior caso de:
Problema
Espaço em memória
Buscar vértices adjacentes
de um vértice v
Conferir adjacência
dos vértices u e v
Visitar todas as arestas
Calcular o grau
de um vértice v
Matriz
Adjacências
Lista
Adjacências
Grafos
Representação
Número de Erdõs
Bibliografia Utilizada
CORMEN, T. H.; LEISERSON, C. E.; RIVEST, R. L. e STEIN, C.
Introduction to Algorithms, 3a edição, MIT Press, 2009.
Download

BFS - ufabc