03 – Grafos: percurso, ponderação e caminhos SCC0503

Propaganda
03 Grafos: percurso, ponderação e caminhos
SCC0503 Algoritmos e Estruturas de Dados II
Prof. Moacir Ponti Jr.
www.icmc.usp.br/~moacir
Instituto de Ciências Matemáticas e de Computação USP
2011/1
Moacir Ponti Jr. (ICMCUSP)
03 Grafos: parte 3
2011/1
1 / 19
Sumário
1
Novos Conceitos
2
Percurso em Grafos
Busca em Profundidade
Busca em Largura
3
Grafos ponderados
4
Implementação de Percursos e Grafos Ponderados
Moacir Ponti Jr. (ICMCUSP)
03 Grafos: parte 3
2011/1
2 / 19
Conectividade
Fortemente conexo:
grafo no qual existe um caminho para qualquer
par de vértices no grafo.
Conexo:
digrafos no qual existe um caminho para qualquer par de
vértices no grafo.
Moacir Ponti Jr. (ICMCUSP)
03 Grafos: parte 3
2011/1
3 / 19
Grafos Planares e Bipartidos
Grafo planar
grafo possível de desenhar de tal forma que duas arestas não se
cruzem.
Teorema de Kuratowski:
um grafo é planar apenas se não possuir
um subgrafo que é o grafo completo
K5
ou o grafo bipartido
K3,3 .
Grafo bipartido
G = (U , V , A), cujos vértices podem ser divididos em dois
U e V tais que toda aresta conecta um vértice
em U a um vértice em V
se |U | = |V | é chamado de grafo bipartido balanceado.
se cada vértice de U está ligado a cada vértices em V , então é
chamado grafo bipartido completo, Ka,b .
grafo
conjuntos disjuntos
Moacir Ponti Jr. (ICMCUSP)
03 Grafos: parte 3
2011/1
4 / 19
Isomorsmo (I)
Denição
G = (V1 , A1 ) e H = (V2 , A2 ) são isomorfos se existe uma
f : V1 → V2 tal que (v , w ) ∈ A1 se e somente se
(f (v ), f (w )) ∈ A2 .
dois grafos
função biunívoca
bijeção com preservação de arestas.
Motivação
Captura a noção informal de que alguns objetos possuem estruturas
iguais
Aplicações práticas incluem: biologia e química computacional,
matemática química (identicação de compostos químicos), e
automação de projetos eletrônicos (vericação da equivalência das
diferentes representações do desenho de um circuito eletrônico)
Moacir Ponti Jr. (ICMCUSP)
03 Grafos: parte 3
2011/1
5 / 19
Isomorsmo (II)
No exemplo acima, dizemos que
G∼
= H,
ou
G
e
H
são isomorfos.
gura de autoria de Booyabazooka, distribuída por GNU-FDL
Moacir Ponti Jr. (ICMCUSP)
03 Grafos: parte 3
2011/1
6 / 19
Sumário
1
Novos Conceitos
2
Percurso em Grafos
Busca em Profundidade
Busca em Largura
3
Grafos ponderados
4
Implementação de Percursos e Grafos Ponderados
Moacir Ponti Jr. (ICMCUSP)
03 Grafos: parte 3
2011/1
7 / 19
Percurso em Grafos
Denição
Visitar todos os vértices de um grafo. O percurso em árvores é um caso
particular de percurso em grafos.
Algoritmos
Depth-rst search
Busca em profundidade (
DFS): num contexto de
árvore, visita os nós lhos antes de visitar os nós irmãos.
Breadth-rst search
Busca em largura (
BFS): num contexto de
árvore, visita os nós irmãos antes de visitar os nós lhos.
Moacir Ponti Jr. (ICMCUSP)
03 Grafos: parte 3
2011/1
8 / 19
Busca em Profundidade : algoritmo
DFS(Graph G, Vertex u) {
visit(u);
// realiza alguma operacao no vertice
mark u as visited; // para nao ser visitado novamente
for (each vertex v such that (u,v) exists) {
if (v is not visited) {
DFS(v);
}
}
}
Moacir Ponti Jr. (ICMCUSP)
03 Grafos: parte 3
2011/1
9 / 19
Busca em Profundidade : algoritmo
Características
implementa uma pilha (explicitamente ou por recursão)
visita os vértices adjacentes em uma ordem particular
Complexidade
lista de adjacência: executa em tempo O (|V | + |A|).
2
2
é denso, então |A| ≈ |V |, e portanto O (|V | ).
matriz de adjacência: executa em tempo O (|V |2 )
Moacir Ponti Jr. (ICMCUSP)
03 Grafos: parte 3
Quando o grafo
2011/1
10 / 19
Busca em Largura: algoritmo
BFS(Graph G, Vertex u) {
visit(NULL,u);
// chama funcao visitar(origem, destino)
mark u as visited;
// garante que nao sera visitado novament
q = createQueue(); // cria uma fila
q.enqueue(u);
// inclui o vertice inicial na fila
}
}
// retira um elemento da fila e visita todos os seus adjacentes
while (!q.isEmpty()) {
v = q.dequeue();
for (each vertex w such that (v,w) exists)
if (!w.visited) {
visit(v,w);
// funcao visitar w com origem em v
mark w as visited; // marca como visitado
q.enqueue(w); // inclui elemento visitado na fila
}
Moacir Ponti Jr. (ICMCUSP)
03 Grafos: parte 3
2011/1
11 / 19
Busca em Largura : algoritmo
Características
implementa uma la
permite, ao visitar (retirar da la), chamar uma função
visit()
de
forma a armazenar em cada vértice qual a sua distância do vértice
inicial.
Complexidade
lista de adjacência: executa em tempo O (|V | + |A|).
2
2
é denso, então |A| ≈ |V |, e portanto O (|V | ).
matriz de adjacência: executa em tempo O (|V |2 )
Moacir Ponti Jr. (ICMCUSP)
03 Grafos: parte 3
Quando o grafo
2011/1
12 / 19
Percurso em grafos: aplicações
Caminho mais curto
BFS encontra o caminho com menor número de arestas, de cada
vértice para o vértice inicial, por meio de ponteiros para os vértices de
origem.
os elementos são inseridos na la em ordem de distância do vértice
inicial.
Grafo conexo
escolha um vértice qualquer do grafo e execute BFS ou DFS.
após a execução, se todos os vértices foram marcados como visitados,
então o grafo é conexo.
qualquer percurso em grafo permite vericar se um grafo é conexo (ou
fortemente conexo).
Moacir Ponti Jr. (ICMCUSP)
03 Grafos: parte 3
2011/1
13 / 19
Grafos ponderados
Denição
cada aresta é rotulada com um peso numérico
Implementação
matriz de adjacência, usar um arranjo de ints, doubles ou
adequado, marcando -1 quando não houver aresta.
em lista de adjacência, cada nó da lista inclui um peso, do tipo
em
o tipo
adequado.
Problemas que envolvem grafos ponderados
a relação entre dois itens possui um valor, por exemplo, num grafo
em que os vértices representam cidades e as arestas estradas que
conectam essas cidades, com peso igual à distância entre as cidades.
shortest-path)
o problema do caminho mais curto (
é um dos que usam
grafos ponderados.
Moacir Ponti Jr. (ICMCUSP)
03 Grafos: parte 3
2011/1
14 / 19
Implementação de Percursos e Grafos Ponderados
para permitir realizar percursos em grafos e trabalhar com grafos
ponderados algumas mudanças são necessárias no código
modicaremos principalmente
Vertex
e
Node,
para incluir informações
de distância nos vértices, e pesos nas arestas.
Moacir Ponti Jr. (ICMCUSP)
03 Grafos: parte 3
2011/1
15 / 19
Implementação de Percursos e Grafos Ponderados
// Um 'node' representa um elemento na lista de adjacencia
//
e o tipo 'Link' e um ponteiro para a estrutura 'node
typedef struct node *Link;
struct node {
Vertex w;
// indice do vertice adjacente
double weight; // peso da aresta
Link next;
// ponteiro para proximo vertice da lista de adjacencia
};
// VertexList (elemento para lista de vertices)
typedef struct {
Link adj;
// ponteiro para o inicio da lista de adjacencia
int visited; // =-1 se vertice nao foi visitado ou >=0 se foi visitado
} VertexList;
// digraph - estrutura que contem o digrafo/grafo
struct digraph {
int V;
// total de vertices
int A;
// total de arestas
VertexList *list; // lista de vertices (arranjo a ser alocado)
};
// Digraph sera um ponteiro para a criacao de um digrafo
typedef struct digraph *Digraph;
Moacir Ponti Jr. (ICMCUSP)
03 Grafos: parte 3
2011/1
16 / 19
Bibliograa I
SEDGEWICK, R.
Algorithms in C: part 5, 3.ed., Addison-Wesley, 2002.
Graph ADTAdjacency-Lists Representation (Seções 17.2, 17.3 e
17.4)
ZIVIANI, N.
Projeto de Algoritmos, 3.ed. Cengage, 2004.
(Capítulo 7)
TENEMBAUM, A.M. et al.
Estruturas de Dados Usando C. Pearson Makron, 1995.
Grafos e suas aplicações (Capítulo 8).
CORMEN, T. H. et al.
Algoritmos:
teoria e prática. Campus-Elsevier, 2002.
Algoritmos de Grafos (parte IV).
Moacir Ponti Jr. (ICMCUSP)
03 Grafos: parte 3
2011/1
17 / 19
Bibliograa II
KNUTH, D.
The Art of Computer Programming:
fundamental algorithms, v.1.
Addison-Wesley, 1969.
Basic Mathematical Properties of Trees (Seção 2.3.4)
FEOFILOFF, P.
Estruturas de Dados.
http://www.ime.usp.br/~pf/algoritmos_para_grafos/aulas/
digraphdatastructs.html
FEOFILOFF, P.
Listas de adjacência.
http://www.ime.usp.br/~pf/algoritmos_para_grafos/aulas/adjlists.html
Moacir Ponti Jr. (ICMCUSP)
03 Grafos: parte 3
2011/1
18 / 19
Bibliograa III
FEOFILOFF, P.
Matrizes de adjacência.
http:
//www.ime.usp.br/~pf/algoritmos_para_grafos/aulas/adjmatrix.html
Moacir Ponti Jr. (ICMCUSP)
03 Grafos: parte 3
2011/1
19 / 19
Download