Baixe Teoria dos Grafos e outras Notas de estudo em PDF para Matemática, somente na Docsity!
AED
Algoritmos e Estruturas de Dados
LEEC - 2005/
Teoria de Grafos e
Algoritmos em Grafos
Grafos - O que é um grafo?
- Objecto abstracto
- Dois tipos de entidades
- Nós ou Vértice s
- 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) 3
Grafos - Motivação
- Mapas
- caminhos mais curtos; ca- minhos mais baratos.
- Circuitos Eléctricos
- existência de curto-circui- tos; existência de cruzamen- to entre ligações.
- Sequenciamento
- tarefas a executar por um conjunto de recursos sujei- tas a restrições de carácter tecnológico. - Emparelhamento - processamento de imagem estéreo; atribuição de pes- soas a lugares. - Redes de dados - computadores ligados entre si, enviando e recebendo mensagens; existência de li- gação entre quaisquer nós; redundância. - Estrutura de Programas - grafos gerados por compila- dores representando a estru- tura de chamadas;
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) 7
- 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.
Grafos – Definições (4)
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) 9
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.
Grafos – Exemplos (1)
- 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.
1
4
2
6 7
5 8
3
G
AED (IST/DEEC) 13
Grafos – Exemplos (4)
1
4
2
(^67)
5 8
3
G
Grafos – Exemplos (5)
1
4
2
6 7
5 8
3
G’’
- G’’: árvore de suporte de G.
AED (IST/DEEC) 15
• Introdução
- Definição de grafo
- Motivação aplicacional
• Definições e notação
• Propriedades elementares em grafos
• Exemplos
Grafos – Síntese da Aula 1
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) 19
Grafos - Definições e Propriedades (4)
- Prop: Apenas os vértices destino são adjacentes dos vérti- ces 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).
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) 21
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.
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);
Grafos - Interface ADT para Grafos (2)
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úme- ro de arestas. Graphcopy cria uma segun- da cópia do grafo. Graphdestroy faz o inver- so de Graphinit.
AED (IST/DEEC) 25
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; }
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; }
Grafos - Implementação de ADT (2)
AED (IST/DEEC) 27
- 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
- Matrizes de adjacência
- Representação de um grafo
- Implementação da estrutura abstracta de dados
Grafos – Síntese da Aula 2
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) 31
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++;}
Grafos - Implementação de ADT (2)
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; }
Grafos - Implementação de ADT (3)
AED (IST/DEEC) 33
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 V^2 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.
- Grafos esparsos de grande dimensão requerem espaço de memória proporcional a V^2 ;
- Neste casos, a simples inicialização do grafo
(proporcional a V^2 ) pode ser do-minante na execução
global do algoritmo;
- Pode nem sequer existir memória suficiente para armazenar a matriz.
Grafos - Inconvenientes das M. de Adj.
AED (IST/DEEC) 37
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.
- 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.
Grafos - Variantes e Extensões (2)
AED (IST/DEEC) 39
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.
Grafos – Desempenho Relativo
V. de Arestas M. de Adj. L. de Adj. Espaço E V^2 V+E Inicialização 1 V^2 V Cópia E V^2 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? ElgV V*^2 E