Estrutura de Dados para
Tecnologia
Grafos
Um grafo G=(V,A) consiste em um conjunto V de
vértices e um conjunto A de pares de vértices ou arestas/arcos:
Os grafos são uma forma de modelar os problemas.
A
B
C
Grafos
Formalmente, um grafo G=(V,A) é definido pelo par
de conjuntos V e A, onde:
V: Conjunto não-vazio dos vértices do grafo.
A: Conjunto de pares ordenados a=(v,w), v e w V.
Seja, por exemplo, o grafo G(V,A) dado por:
V = {p | p é uma pessoa}
A = {(x,y) | x é amigo(a) de y} ⇒ relação simétrica
Salete
Pedro
Lúcia
Grafos
Quando o grafo é orientado, é denominado
DIGRAFO
Neste caso, o que liga os vértices não são arestas, e sim
ARCOS
Seja, por exemplo, o grafo G(V,A) dado por:
V = {p | p é um(a) professor}
A = {(x,y) | x foi professor(a) de y}
Ademar
Ana
Grafos
ORDEM: A ordem de um grafo G é dada pela
cardinalidade do conjunto de vértices, ou seja, pelo número de vértices do grafo G.
ADJACÊNCIA: Em um grafo não orientado, dois
vértices v e w são adjacentes se há uma aresta a = (v,w) em G. Esta aresta é dita ser incidente a ambos, v e w.
No caso de digrafos, a adjacência é dividida em:
Sucessor: um vértice w é sucessor de v se há um arco de v
para w.
Antecessor: um vértice v é antecessor de w se há um arco
Grafos
GRAU: O grau de um grafo G é dado pelo número de
arestas que lhe são incidentes.
No caso de digrafos, a noção de grau é dividida em:
Grau de emissão: corresponde ao número de arcos que
partem de um vértice v.
Grau de recepção: corresponde ao número de arcos que
chegam a um vértice v.
FONTE: Um vértice v é uma fonte caso seu grau de
recepção for zero.
SUMIDOURO: Um vértice v é um sumidouro caso seu
Grafos
GRAFO VALORADO: Um grafo G(V,A) é dito ser
valorado quando existe uma ou mais funções
relacionando V e/ou A com um conjunto de números.
Seja, por exemplo, o grafo G(V,A) dado por:
V = {c | c é uma cidade com aeroporto}
A = {(v,w,t) | há linha aérea ligando v a w, onde t é o
tempo esperado de vôo em minutos}
Manaus
Belém
São Paulo
Brasília Fortaleza
Grafos
MULTIGRAFO: Um grafo G(V,A) é dito ser um
multigrafo quando existem múltiplas arestas entre pares de vértices de G. Exemplo:
SUBGRAFO: Um grafo Gs(Vs,As) é dito ser subgrafo
de um grafo G(V,A) quando Vs⊆V e As⊆ A. Exemplo:
A B C
D
Grafos
CAMINHO: o caminho entre dois vértices v1 e vn de
um grafo é uma sequência de vértices (v1,v2,...,vn) tal que {(v1,v2),(v2,v3),...,(vn-1,vn)} são arestas do grafo.
Exemplo: Quais os caminhos entre Manaus e São
Paulo ?
Manaus
Belém
São Paulo
Grafos
Exemplo: Quais os caminhos entre Manaus e São
Paulo ?
(Manaus,São Paulo)
(Manaus,Belém,Fortaleza,São Paulo) (Manaus,Brasília,São Paulo)
(Manaus,Brasília,Fortaleza, São Paulo) Manaus
Belém
São Paulo
Grafos
Um CAMINHO SIMPLES é aquele onde não há arestas
repetidas.
Um CAMINHO ELEMENTAR é aquele em que não há
vértices repetidos.
CIRCUITO é um caminho simples com uma aresta
incidente nos vértices extremos do caminho, {(v1,v2),(v2,v3),...,(vn,v1)}.
CICLO é um caminho elementar com uma aresta
incidente nos vértices extremos do caminho, {(v1,v2),(v2,v3),...,(vn,v1)}.
COMPRIMENTO de um caminho é o número de
Grafos
Exemplo:
Considere o grafo G:
Caminho simples de 1 para 8: (1,2,4,6,5,4,3,8)
Caminho elementar de 1 para 8:
Ciclo que cubra vértices 3,4,7 e 8:
1 2
6 7 4 5 3 8
1 2
Grafos
Exemplo:
Considere o grafo G:
Caminho simples de 1 para 8: (1,2,4,6,5,4,3,8)
Caminho elementar de 1 para 8: (1,2,4,5,7,3,8)
Ciclo que cubra vértices 3,4,7 e 8:
1 2
6 7 4 5 3 8
1 2
4
5
7
3
Grafos
Exemplo:
Considere o grafo G:
Caminho simples de 1 para 8: (1,2,4,6,5,4,3,8)
Caminho elementar de 1 para 8: (1,2,4,5,7,3,8)
Ciclo que cubra vértices 3,4,7 e 8: (4,3,8,7,6,4)
1 2
Grafos
Um grafo G é CONEXO se e somente se existe um
caminho entre dois vértices quaisquer do grafo.
1
2 5
4
3
1
2 5
4
3
Conexo Não Conexo:
Grafos
Como denominamos um grafo CONEXO e SEM
CICLOS ?
1
2
5 4
3
Grafos
Caminho de Euler:
Caminho simples que contém todas as arestas do grafo (e,
consequentemente, todos os seus vértices).
Circuito de Euler:
Circuito que contém todas as arestas do grafo.
Grafo Euleriano:
É um grafo que contém um circuito de Euler.
Um grafo conexo admite um circuito de Euler se e
somente se todos os seus vértices têm grau par.
Um grafo conexo admite um caminho de Euler se e
Grafos
Será que o grafo a seguir é Euleriano ?
Se sim, indique um circuito Euleriano.
1 2
5 4
3
6 7
8 9
Grafos
Sir Wiliam Hamilton
Problema proposto em 1859.
Puzzle: viagem à volta do mundo. 20 cidades
Entrar um caminho que permitisse sair de e chegar a uma
cidade, passando pelas outras uma única vez.
Caminho Hamiltoniano
Caminho elementar que contém todos os vértices de um
grafo.
Ciclo Hamiltoniano
Ciclo que contém todos os vértices de um grafo.
Grafos
Será que o grafo a seguir é Hamiltoniano ?
Se sim, indique um ciclo Hamiltoniano.
1
2
(1,2,4,3,1)
Grafos
Será que o grafo a seguir é Hamiltoniano ?
Se sim, indique um ciclo Hamiltoniano.
1
2
(1,2,6,5,3,4,1) 3
4
5
Grafos
Será que o grafo a seguir é Hamiltoniano ?
Se sim, indique um ciclo Hamiltoniano.
1
2
3
4 6
5
7
Grafos
Aplicação: problema do caixeiro viajante.
Suponha que um viajante deseje conhecer um
conjunto de n cidades, passando por cada cidade
uma única vez.
Sabendo-se a distância entre as cidades, o problema
é: qual o caminho que percorra todas as cidades uma única vez, com a menor distância possível ?
Grafos
Podemos utilizar um grafo valorado para representar
as cidades, suas conexões e as distâncias (em km) entre as mesmas:
Manaus
Belém
São Paulo
Brasília Fortaleza
1296
1939
2693
874
1137
1689
Grafos
Formas de Representação:
Matriz de Adjacência
1
5 4
2
3
1 2 3 4 5
Grafos
Formas de Representação:
Matriz de Adjacência
1 2 3 4 5
1 0 1 0 0 1
2 0 0 1 1 0
3 0 0 1 1 0
4 0 0 0 0 1
1
5 4
2
Grafos
Formas de Representação:
Matriz de Adjacência
1 2 3 4 5
1 0 5 0 0 2
2 5 0 2 3 6
3 0 2 0 2 0
4 0 3 2 0 4
5 2 6 0 4 0
1
5 4
2
3 5
2 6
4
3
2
Grafos
Formas de Representação:
Matriz de Incidência
a1 a2 a3 a4 a5 a6 a7
1 1 0 0 0 0 0 1
2 1 1 0 0 1 1 0
3 0 1 1 0 0 0 0
4 0 0 1 1 0 1 0
1
5 4
2
3 a1
a7 a5
a4
a6
a2
Grafos
Formas de Representação:
Matriz de Incidência
a1 a2 a3 a4 a5 a6 a7 a8 a9
1 -1 0 0 0 0 0 0 -1 1
2 1 -1 0 0 0 1 -1 0 0
3 0 1 1 -1 0 0 0 0 0
4 0 0 0 1 -1 0 1 0 0
5 0 0 0 0 1 -1 0 1 -1
1
5 4
2
Grafos
Formas de Representação:
Lista de Adjacência
1
5 4
2
3
1 2 5
2 1 5 3 4 3 2 4
Grafos
Formas de Representação:
Lista de Adjacência
1 2 5 2 3 4 3 3 4 4 5
5 1 2
1
5 4
2
Qual a melhor estrutura ?
Testar se aresta está no grafo.
Determinar o grau de um vértice.
Menos memória em grafos pequenos.
Menos memória em grafos grandes.
Inserção ou remoção de aresta.
Atravessar o grafo.
Melhor na maioria dos problemas.
Matriz de Adjacência
Listas de Adjacências
Matriz de Adjacência Listas de Adjacências
Matriz de Adjacência
Listas de Adjacências
Busca em Largura
A árvore define um caminho mais curto da raiz até
1
2 5 6
3 4
3
4
5 2
1
Busca em Profundidade
3
4
5 2
1
6
1
2
5
6
3
Atravessando Grafos
Eficiência
um mesmo local não deve
ser visitado repetidamente.
Corretude
o percurso deve ser feito
Atravessando Grafos
Os vértices devem ser marcados
quando visitados pela primeira vez.
Cada vértice deve ter um dos estados:
Não-visitado
Visitado
Atravessando Grafos
Mantém-se uma estrutura de dados
com todos os vértices já visitados mas
ainda não completamente explorados.
As arestas não-orientadas são
Atravessando Grafos
Estruturas de dados para armazenar os
vértices descobertos mas ainda não
completamente explorados: