1. Grafos
Samyra Lara
Graduanda em Tecnologia em
Sistemas para Internet – IFPB,
campus João Pessoa.
2. Porque aprender Grafos?
Estamos conhecendo: GRAFOS
Importante ferramenta matemática com aplicação em diversas áreas
do conhecimento como: genética, química, pesquisa operacional,
telecomunicações, engenharia elétrica, redes de computadores,
conexão de voos aéreos, restrições de precedência, fluxo de
programas, dentro outros;
Utilizados na definição e/ou resolução de problemas;
Existem centenas de problemas computacionais que empregam
grafos com sucesso;
3. Porque aprender Grafos?
Que tal começar pela Conectividade Social?
Estamos conhecendo: GRAFOS
5. Definição de Grafos
É um conceito matemático que basicamente estuda os elementos de um
conjunto e a relação entre eles;
Definição matemática:
G = {V, A}
V : Vértices (elementos);
A: Arestas ou Arcos (relações entre elementos);
|V| e |A| representam a cardinalidade dos conjuntos V e A, isto é, número de
elementos dos respectivos conjuntos.
Terminologias: vértice = nós ; aresta = arco.
Pode variar conforme o autor.
Estamos conhecendo: GRAFOS
7. Tipos de Grafos
NÃO-DIRIGIDOS:
As arestas indicam uma conexão bidirecional
DIRIGIDOS:
As arestas determinam o sentido da conexão
através de uma seta;
Faz distinção entre origem e destino;
Convenção:
aresta: GND / arco: GD
Estamos conhecendo: GRAFOS
8. Grafo dirigido
Exemplo de Grafo Dirigido
G = {V,A}
V = {0,1,2,3}
A = { {0,1}, {0,3}, {1,2}, {1,3}, {2,3}, {2,2} , {3,0}}
|V| = 4
|A| = 7
Estamos conhecendo: GRAFOS
9. Conceitos Básicos
Vértice Adjacente
Vértices ligados por uma aresta
Exemplo:
• Vértice 1 é adjacente a 0
• Vértice 1 é adjacente a 2
Aresta Incidente
Uma aresta/arco que conecta dois vértices em particular
Exemplo:
• A aresta (0,1) é incidente aos vértices 0 e 1
• O arco {3,4} é incidente de 3 ou incidente a 4
Estamos conhecendo: GRAFOS
(0,1)
10. Conceitos Básicos
Grau de um vértice
Número de arestas/arcos incidentes a um vértice
Exemplo: o grau do vértice “1” é 2;
Tratando-se de Grafos dirigidos, temos:
Grau de Emissão: # arcos que partem de v;
Grau de Recepção: # arcos que chegam em v;
Exemplo: Grau do vértice 0:
Emissão: 2;
Recepção: 1.
Estamos conhecendo: GRAFOS
11. Grafo dirigido
Caminho:
É determinado através da sequência de um ou mais arcos. É possível chegar
até outro vértice (não adjacente), através do percurso dos arcos.
Exemplo:
“0” não é adjacente a “2”, é possível chegar
até ele através dos arcos {0,1} e {1,2}.
Estamos conhecendo: GRAFOS
13. Formas de representação
1ª FORMA: Matriz de Adjacência (estática):
A partir de um Grafo (G), dado por:
G = (V, A);
n = número de vértices (n > 0).
Consiste em uma matriz (E) quadrada (n x n), cujos elementos, são:
eij = 1, se a aresta <ei, ej> pertence a “A”
eij = 0, caso contrário.
Estamos conhecendo: GRAFOS
14. Matriz de Adjacência
Como montar essa matriz de adjacência ?
1. Identificar a quantidade de vértices;
2. Montar uma matriz com essa quantidade;
3. Usar a regra (slide anterior) para determinar os
elementos dessa matriz.
Estamos conhecendo: GRAFOS
15. Matriz de Adjacência
• O Grafo (G), possui 6 vértices.
• Implica dizer que a matriz será
composta por 6 linhas e 6 colunas.
Estamos conhecendo: GRAFOS
GRAFO G
17. Matriz de Adjacência
Vantagens:
Fácil visualização dos dados;
Pesquisas são facilmente respondidas:
Quantidade de arestas/arcos do grafo;
Grau de cada vértice;
Existência de caminhos;
Existência de ciclos;
Existência de Laços (loop).
Estamos conhecendo: GRAFOS
18. Matriz de Adjacência
Desvantagens:
Estamos conhecendo: GRAFOS
Geralmente essa matriz de representação é esparsa, uma vez que, são
representados, mesmo que não existam, arestas/arcos entre os
vértices;
Piorando a situação, as aplicações reais costumam não possuir
limitações quanto ao número de vértices.
19. Formas de representação
Estamos conhecendo: GRAFOS
2ª FORMA: Lista de Adjacências (dinâmica)
• É uma lista (L), onde cada nó possui uma lista de seus vértices
adjacentes.
20. Lista de Adjacências
Como montar essa lista de adjacência ?
Estamos conhecendo: GRAFOS
1. Identificar a quantidade de vértices;
2. Montar uma lista com essa quantidade (nó);
3. Cada nó dessa lista contém a identificação do vértice de um
apontador para o próximo vértice, cujo valor será nulo (zero ou
NULL) quando for o fim da lista.
21. Lista de Adjacências
Estamos conhecendo: GRAFOS
Exemplo:
Qual seria a representação do Grafo (G), usando a representação
“Lista de Adjacência” ?
22. Lista de Adjacências
Vantagens:
• Fácil visualização dos dados;
• Ocupa pouco espaço;
• Fácil responder as perguntas.
Desvantagens:
• Complica “um pouco” a implementação.
Estamos conhecendo: GRAFOS
23. Percursos
Algumas regras
Estamos conhecendo: GRAFOS
A partir de uma ordem pré-estabelecida, os vértices de um grafo são
percorridos, a partir de um deles;
Todos os caminhos relacionados a um vértices devem ser percorridos;
A escolha desse vértice inicial pode ser aleatório ou predefinido;
Geralmente a ideia é descobrir o melhor caminho, ou seja, o de
menor comprimento.
24. Percursos
Algumas regras
Estamos conhecendo: GRAFOS
É necessário que o algoritmo, de percurso, defina o primeiro “nó” a
ser visitado, podendo ser:
Escolhido;
Será selecionado aleatoriamente.
Também deve ser definido a ordem que será seguida para visitar os
“nó” sucessores a um determinado “nó”.
25. Percursos
Observações
Estamos conhecendo: GRAFOS
Em um grafo nem sempre é possível atingir todos os demais “nó” a
partir do “nó” inicial;
Não existe uma sequência natural entre os sucessores de um
determinado “nó”;
26. Tipos de Percursos
Pesquisa Inicial em Profundidade (DFS):
“Depth First Search”.
Pesquisa Inicial em Largura (BFS):
“Breadth First Search”.
Estamos conhecendo: GRAFOS
27. Pesquisa em profundidade (DFS)
Estamos conhecendo: GRAFOS
Faz uma análise nos arcos de um grafo.
28. Pesquisa em profundidade (DFS)
Estamos conhecendo: GRAFOS
A busca em profundidade procura acessar todos os vértices em um
grafo. Para acessar todos os possíveis vértices, varre a lista de arestas
de cada vértice do grafo.
29. Pesquisa em profundidade (DFS)
empilha primeiro vértice (origem)
repita enquanto pilha não vazia{
"V" <- vértice do topo da pilha
se (existir vértice adjacente){
remove o arco que está incidindo
se o vértice adjacente não está marcado{
marca o vértice adjacente
empilha o vértice adjacente
}
}
senao desempilha "V"
}
Estamos conhecendo: GRAFOS
30. Pesquisa em amplitude (BFS)
Estamos conhecendo: GRAFOS
Faz uma análise nos vértices de um grafo.
31. Pesquisa em amplitude (BFS)
Estamos conhecendo: GRAFOS
Dado um grafo e um vértice de origem, a busca em largura
explora as arestas do grafo até explorar todos os vértices
alcançáveis a partir do vértice de origem.
32. Pesquisa em amplitude (BFS)
insere o primeiro vértice na fila
repita enquanto fila não vazia{
"V" <- primeiro vértice da fila
repita para todos os arcos incidentes a "V“ (adjac.){
se (vértice adjacente não está marcado){
marca o vértice adjacente
insere o vértice adjacente no final da fila
}
}
remova o vértice da fila
}
Estamos conhecendo: GRAFOS
34. REFERÊNCIAS
Estamos conhecendo: GRAFOS
• Material do Curso de Extensão de Grafos, ministrado pelo Professor
M.Sc. Alex Sandro da Cunha Rêgo;
• Material do Projeto Olímpico de Programação, ministrado pela Ms.
Valéria Maria Bezerra Cavalcanti;
• ASCENCIO, A. F. G.; ARAÚJO, G. S.. Estrutura de Dados: Algoritmos,
análise da Complexidade e Implementações em Java e
C/C++. Editora PEARSON, 2010.
• VELOSO, Paulo.; SANTOS, Clesio dos; AZEREDO, Paulo; FURTADO,
Antonio Estruturas de Dados. Rio de Janeiro: Editora Campus, 1984.