O que é um grafo?

Transcrição

O que é um grafo?
AED
Algoritmos e Estruturas de Dados
LEEC - 2005/2006
Teoria de Grafos e
Algoritmos em Grafos
Grafos - O que é um grafo?
• Objecto abstracto
• Dois tipos de entidades
– Nós ou Vértices
– Ramos ou Arestas
• Vértices representam
– cidades, pessoas, máquinas,
números, etc
• Arestas representam
– existência de ligações entre
nós, valor da ligação entre
nós, distância entre nós, etc
AED (IST/DEEC)
2
Grafos - Motivação
• Emparelhamento
• Mapas
– caminhos mais curtos; caminhos mais baratos.
• Circuitos Eléctricos
– existência de curto-circuitos; existência de cruzamento entre ligações.
• Sequenciamento
– tarefas a executar por um
conjunto de recursos sujeitas a restrições de carácter
tecnológico.
– processamento de imagem
estéreo; atribuição de pessoas a lugares.
• Redes de dados
– computadores ligados entre
si, enviando e recebendo
mensagens; existência de ligação entre quaisquer nós;
redundância.
• Estrutura de Programas
– grafos gerados por compiladores representando a estrutura de chamadas;
AED (IST/DEEC)
3
Grafos – Definições (1)
• Def: Um grafo é um conjunto de vértices e um conjunto
de arestas que ligam pares de vértices distintos (com
nunca mais que uma aresta a ligar qualquer par de
vértices).
• Def: Dois vértices ligados por uma aresta dizem-se
adjacentes.
• Def: Uma aresta que ligue dois vértices diz-se incidente
de cada um dos vértices.
AED (IST/DEEC)
4
Grafos – Definições (2)
• Def: O número de arestas incidentes num vértice diz-se o
grau desse vértice.
• Def: O subconjunto de arestas e vértices a elas associados
diz-se um sub-grafo do grafo original.
• Def: Uma sequência de vértices na qual os vértices
sucessivos estão ligados por arestas do grafo diz-se um
caminho.
AED (IST/DEEC)
5
Grafos – Definições (3)
• Def: Num caminho simples os vértices e arestas são
distintos.
• Def: Um caminho em que todos os vértices e arestas são
distintos, excepto para o primeiro e último que são iguais,
diz-se um ciclo.
• Def: Dois caminhos simples dizem-se disjuntos se não
possuírem vértices comuns, excepto possivelmente para os
vértices extremos.
AED (IST/DEEC)
6
Grafos – Definições (4)
• Def: Um grafo diz-se ligado se existir um caminho de cada
vértice para todos os outros vértices do grafo.
• Def: Um grafo que não seja ligado é constituído por
componentes ligadas, que se dizem sub-grafos ligados
máximos.
• Def: Um grafo ligado acíclico, i.e. sem ciclos, diz-se uma
árvore.
AED (IST/DEEC)
7
Grafos – Definições (5)
• Def: Um conjunto de árvores diz-se uma floresta.
• Def: A árvore de suporte de um grafo ligado é um
sub-grafo que contém todos os vértices e é uma árvore.
• A floresta de suporte de um grafo é um sub-grafo que
contém todos os seus vértices e é uma floresta.
AED (IST/DEEC)
8
Grafos – Propriedades em árvores
• Um grafo G de V vértices é uma árvore se e só se satisfizer
qualquer das seguintes condições:
– G tem V-1 arestas e nenhum ciclo.
– G tem V-1 arestas e é ligado.
– Existe apenas um caminho simples a unir quaisquer dois vértices.
– G é ligado mas retirando uma só aresta faz com que deixe de o ser.
AED (IST/DEEC)
9
Grafos – Exemplos (1)
G
1
2
4
6
3
5
8
7
• Os vértices 6 e 7 são adjacentes.
• Os vértices 4 e 6 não são adjacentes.
• O vértice 7 tem grau quatro.
AED (IST/DEEC)
10
Grafos – Exemplos (2)
G’
1
2
4
3
5
6
•
•
•
•
8
7
G’ é um sub-grafo de G, gerado a partir das arestas a cheio.
O vértice 5 não pertence a G’.
G é um grafo ligado; G’ não é.
O sub-grafo G’ é constituído por um grafo completo com três
vértices e por uma árvore com quatro vértices
AED (IST/DEEC)
11
Grafos – Exemplos (3)
G
1
2
4
6
3
5
8
7
• Caminho: 1-2-4-5-7-8
AED (IST/DEEC)
12
Grafos – Exemplos (4)
G
1
2
4
3
5
6
8
7
• Ciclo: 3-4-5-6-7-8-3
AED (IST/DEEC)
13
Grafos – Exemplos (5)
G’’
1
2
4
6
3
5
8
7
• G’’: árvore de suporte de G.
AED (IST/DEEC)
14
Grafos – Síntese da Aula 1
• Introdução
– Definição de grafo
– Motivação aplicacional
• Definições e notação
• Propriedades elementares em grafos
• Exemplos
AED (IST/DEEC)
15
Grafos - Definições e Propriedades (1)
• Def: Um grafo diz-se completo quando existe uma aresta
ligando qualquer par de vértices.
• Prop: Um grafo com V vértices possui, no máximo,
V(V-1)/2 arestas.
• Def: Um grafo G’ diz-se complemento do grafo G quando
se obtém a partir de um grafo completo com o mesmo
número de vértices de G, retirando-lhe todas as arestas de G.
AED (IST/DEEC)
16
Grafos - Definições e Propriedades (2)
• Def: Um grafo que possua um número de arestas próximo
do número máximo diz-se denso.
• Def: Um grafo cujo complemento seja denso diz-se
esparso.
• Def: Densidade de um grafo: 2E/V, em que E é o número
de arestas e V o de vértices.
• Def: A um sub-grafo completo dá-se o nome de clique.
AED (IST/DEEC)
17
Grafos - Definições e Propriedades (3)
• Def: Um grafo que possua a propriedade de ser possível
dividir os vértices em dois conjuntos tais que todas as
arestas apenas ligam vértices de um conjunto a vértices do
outro conjunto diz-se bipartido.
• Def: Quando existe um sentido atribuído às arestas, os
grafos dizem-se direccionados, dirigidos ou digrafos.
• Def: O primeiro vértice de uma aresta direccionada diz-se
fonte e o segundo diz-se destino.
AED (IST/DEEC)
18
Grafos - Definições e Propriedades (4)
• Prop: Apenas os vértices destino são adjacentes dos vértices fonte.
• Def: Um ciclo direccionado num digrafo é um ciclo em
que todos os pares de vértices adjacentes surgem pela
ordem especificada pelas arestas.
• Def: Um digrafo sem ciclos direccionados diz-se grafo
direccionado acíclico, ou DAG (Directed Acyclic Graph).
AED (IST/DEEC)
19
Grafos - Definições e Propriedades (5)
• Def: Quando se atribuem pesos às arestas, representando
custo, distância, etc., diz-se que o grafo é ponderado.
– Também é possível atribuir pesos aos próprios vértices, ou a pares
vértice/aresta.
• Def: Grafos ponderados direccionados, dizem-se redes.
AED (IST/DEEC)
20
Grafos - Interface ADT para Grafos (1)
• Os algoritmos para processamento de grafos serão
desenvolvidos no contexto de uma ADT que define as tarefas
de interesse.
• A nossa primeira interface elementar é tal que:
– O número de vértices e arestas são especificados por inteiros;
– Uma aresta é definida por um par de inteiros, designando os
vértices que une;
– O número de vértices é limitado superiormente.
• Esta interface irá sendo alargada à medida das necessidades.
AED (IST/DEEC)
21
Grafos - Interface ADT para Grafos (2)
typedef struct {int v; int w;} Edge;
Edge EDGE(int, int);
typedef struct graph *Graph;
Graph GRAPHinit(int);
void GRAPHinsertE(Graph, Edge);
void GRAPHremoveE(Graph, Edge);
int GRAPHedges(Edge a[], Graph G);
Graph GRAPHcopy(Graph);
void GRAPHdestroy(Graph);
AED (IST/DEEC)
Graphinit cria grafo com
o número final de vértices,
sem arestas.
GraphinsertE insere uma
aresta, caso não exista.
GraphremoveE retira uma
aresta, caso exista.
Graphedges conta o número de arestas.
Graphcopy cria uma segunda cópia do grafo.
Graphdestroy faz o inverso de Graphinit.
22
Grafos - Matriz de Adjacências (1)
• Matriz de Adjacências
– Matriz (V×V) de valores booleanos;
– A entrada correspondente à linha v e coluna w é 1
se existir uma aresta ligando estes dois vértices;
– A mesma entrada vale 0 caso contrário;
– A matriz é simétrica, excepto para digrafos, em
que poderá não sê-lo.
AED (IST/DEEC)
23
Grafos - Matriz de Adjacências (2)
• Matriz
• Grafo
G
1
2
4
6
3
5
8
7
1
2
3
4
5
6
7
8
1
1
1
0
1
0
0
0
0
2
1
1
0
1
0
0
0
0
3
0
0
1
1
0
0
1
1
4
1
1
1
1
1
0
0
0
5
0
0
0
1
1
1
1
0
6
0
0
0
0
1
1
1
0
7
0
0
1
0
1
1
1
1
8
0
0
1
0
0
0
1
1
Matriz V ×V simétrica
AED (IST/DEEC)
24
Grafos - Implementação de ADT (1)
#include <stdlib.h>
#include “GRAPH.h”
struct graph {int V; int E; int **adj;};
Graph GRAPHinit(int V){
Graph G = malloc(sizeof(struct graph));
G->V = V; G->E = 0;
G->adj = MATRIXint(V, V, 0);
return G;
}
void GRAPHinsertE(Graph G, Edge e){
int v = e.v, w = e.w;
if (G->adj[v][w] == 0) G->E++;
G->adj[v][w] = 1; G->adj[w][v] = 1;
}
AED (IST/DEEC)
25
Grafos - Implementação de ADT (2)
void GRAPHremoveE(Graph G, Edge e){
int v = e.v, w = e.w;
if (G->adj[v][w] == 1) G->E--;
G->adj[v][w] = 0; G->adj[w][v] = 0;
}
int GRAPHedges(Edge a[], Graph G){
int v, w, E = 0;
for (v = 0; v < G->V; v++)
for (w = v+1; w < G->V; w++)
if (G->adj[v][w] == 1)
a[E++] = EDGE(v, w);
return E;
}
AED (IST/DEEC)
26
Grafos – Síntese da Aula 2
• Definições e propriedades
– Grafos completos, complemento de um grafo, densidade, cliques,
grafos bipartidos, grafos direccionados, ciclos em grafos
direccionados, grafos ponderados, redes.
• Estrutura abstracta de dados para grafos
– Interface elementar
• Matrizes de adjacência
– Representação de um grafo
– Implementação da estrutura abstracta de dados
AED (IST/DEEC)
27
Grafos - Listas de Adjacências (1)
• Listas de Adjacências
– Cada vértice possui uma lista ligada;
– Os elementos constituintes da lista de um vértice são
os seus vértices adjacentes;
– Em grafos simples, se os vértices v e w são
adjacentes, então w pertence à lista de v e v pertence à
lista de w.
AED (IST/DEEC)
28
Grafos - Listas de Adjacências (2)
• Grafo
• Listas de Adjacências
G
1
2
4
6
3
5
8
7
1
2
3
4
5
6
7
8
4
1
4
3
4
5
5
3
2
4
8
1
6
7
3
7
7
2
7
5
6
8
Tabela com V listas de
arestas
AED (IST/DEEC)
29
Grafos - Implementação de ADT (1)
#include <stdlib.h>
#include “GRAPH.h”
typedef struct node *link;
struct node {int v; link next;};
struct graph{int V; int E; link *adj;};
link NEW(int v, link next){
link x = malloc(sizeof(struct node));
x->v = v; x ->next = next;
return x;
}
AED (IST/DEEC)
30
Grafos - Implementação de ADT (2)
Graph GRAPHinit(int V)}
int v; Graph G = malloc(sizeof(struct graph));
G->V = V; G->E = 0;
G->adj = malloc(V * sizeof(link));
for (v = 0; v < V; v++)
G->adj[v] = NULL;
return G;}
void GRAPHinsertE(Graph G, Edge e){
int v = e.v, w = e.w;
G->adj[v] = NEW(w, G->adj[v]);
G->adj[w] = NEW(v, G->adj[w]);
G->E++;}
AED (IST/DEEC)
31
Grafos - Implementação de ADT (3)
void GRAPHremoveE(Graph G, Edge e){
/* Fica como exercício */ }
int GRAPHedges(Edge a[], Graph G){
int v, E = 0; link t;
for (v = 0; v < G->V; v++)
for (t = G->adj[v]; t != NULL; t = t->next)
if (v < t->v )
a[E++] = EDGE(v, t->v);
return E;
}
AED (IST/DEEC)
32
Grafos - Vantagens das M. de Adj.
• Representação de eleição quando
– há espaço disponível;
– os grafos são densos;
– os algoritmos requerem mais que V2 operações.
• Adição e remoção de arestas é feita de forma eficiente;
• É fácil evitar a existência de arestas paralelas;
• É fácil determinar se dois vértices estão ou não ligados.
AED (IST/DEEC)
33
Grafos - Inconvenientes das M. de Adj.
• Grafos esparsos de grande dimensão requerem espaço de
memória proporcional a V2;
• Neste casos, a simples inicialização do grafo
(proporcional a V2) pode ser do-minante na execução
global do algoritmo;
• Pode nem sequer
armazenar a matriz.
AED (IST/DEEC)
existir
memória suficiente para
34
Grafos - Vantagens das L. de Adj.
• Inicialização é proporcional a V.
• Utiliza sempre espaço proporcional a V+E
– adequado para grafos esparsos.
– algoritmos que assentem na análise de arestas em grafos esparsos.
• Adição de arestas é feita de forma eficiente.
AED (IST/DEEC)
35
Grafos - Inconvenientes das L. de Adj.
• Arestas paralelas e adjacência entre vértices
– requer que se pesquise as listas de adjacências, o que pode levar
um tempo proporcional a V.
• Remoção de arestas
– pode levar um tempo proporcional a V (este problema pode ser
contornado).
• Não aconselhável para
– grafos de grande dimensão que não podem ter arestas paralelas;
– grande utilização de remoção de arestas.
AED (IST/DEEC)
36
Grafos - Variantes e Extensões (1)
• Outros tipos de grafos
– Digrafos
• ambas facilmente extensíveis;
• arestas representadas só uma vez;
– Grafos ponderados e redes
• M. de Adj. preenchida com pesos;
• L. De Adj. com campos extra para representação dos
pesos.
AED (IST/DEEC)
37
Grafos - Variantes e Extensões (2)
• Alteração da estrutura de dados
– Tipo “EDGE” contendo informação adicional, para
além dos vértices que liga.
– Vectores indexados pelos vértices
• Manutenção da informação do grau do vértice.
– Vector de arestas
• Forma alternativa de representação de grafos.
AED (IST/DEEC)
38
Grafos - Representações alternativas
• Três mecanismos básicos de representação de grafos
– Vector de arestas;
– Matriz de adjacências;
– Listas de adjacências.
• Produzem diferentes desempenhos ao nível das operações de manipulação.
• Escolha deverá depender do problema a resolver.
AED (IST/DEEC)
39
Grafos – Desempenho Relativo
Espaço
V. de Arestas M. de Adj. L. de Adj.
V2
V+E
E
Inicialização
1
V2
V
Cópia
E
V2
E
Destruição
1
V
E
Inserir aresta
1
1
1
Encontrar aresta
E
1
V
Remover aresta
E
1
V
Vértice isolado?
E
V
1
Caminho de u a v?
Elg*V
V2
E
AED (IST/DEEC)
40
Grafos - Encontrar e remover arestas (1)
• Eficientes em representações por matriz de adjacências.
• Como torná-las eficientes para as outras representações?
• Atribuir um símbolo inteiro a cada aresta
– Aresta v-w fica com o símbolo v*V+w.
• Por exemplo, fazer uso de tabelas de dispersão (“hashtables”)
• Quando uma aresta é inserida, é fácil testar se o símbolo
já foi usado.
AED (IST/DEEC)
41
Grafos - Encontrar e remover arestas (2)
• Remoção em digrafos
– ponteiro na tabela de dispersão para a sua representação
na lista de adjacências;
– requer listas duplamente ligadas.
• Remoção em grafos simples
– colocação de ambos os ponteiros na tabela de dispersão;
– ou ponteiro entre os vértices.
AED (IST/DEEC)
42
Grafos – Síntese da Aula 3
• Listas de adjacência
– Representação de um grafo
– Implementação da estrutura abstracta de dados
• Comparação das representações alternativas
– Vantagens e inconvenientes das matrizes de adjacência
– Vantagens e inconvenientes das listas de adjacência
• Variantes e extensões
– Grafos direccionados, ponderados e redes
– Outras representações
• Comparação das representações alternativas
– Memória e tempo de execução
AED (IST/DEEC)
43

Documentos relacionados

emergência e fluxo de informação em redes complexas

emergência e fluxo de informação em redes complexas V – Conjunto de vértices; – Conjunto de pares ordenados especificados por vértices; A – Conjunto de arestas; – Grafo genérico; – Vértice genético i; – Aresta genérica i; – Conjunto vazio; § – Parág...

Leia mais