• Nenhum resultado encontrado

AED Algoritmos eestruturasde Dados LEEC -2004/2005. Teoria de Grafos e Algoritmos em Grafos

N/A
N/A
Protected

Academic year: 2022

Share "AED Algoritmos eestruturasde Dados LEEC -2004/2005. Teoria de Grafos e Algoritmos em Grafos"

Copied!
22
0
0

Texto

(1)

AED

Algoritmos e Estruturas de Dados LEEC - 2004/2005

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

(2)

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.

(3)

AED (IST/DEEC) 5

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.

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.

(4)

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.

(5)

AED (IST/DEEC) 9

Grafos – Propriedades em árvores

• Um grafo G de Vvé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

7 6

5 8

3

G

(6)

AED (IST/DEEC) 11

Grafos – Exemplos (2)

• 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

1

4 2

7 6

5 8

3

G’

Grafos – Exemplos (3)

1

4 2

7 6

5 8

3

G

• Caminho: 1-2-4-5-7-8

(7)

AED (IST/DEEC) 13

Grafos – Exemplos (4)

1

4 2

7 6

5 8

3

G

• Ciclo: 3-4-5-6-7-8-3

Grafos – Exemplos (5)

1

4 2

7 6

5 8

3

G’’

• G’’: árvore de suporte de G.

(8)

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.

(9)

AED (IST/DEEC) 17

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.

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.

(10)

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.

(11)

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.

Graphcopycria uma segun- da cópia do grafo.

Graphdestroy faz o inver-

(12)

AED (IST/DEEC) 23

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.

Grafos - Matriz de Adjacências (2)

• Matriz

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

• Grafo

1

4 2

6 7

5 8

3

G

(13)

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);

Grafos - Implementação de ADT (2)

(14)

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

– Interface elementar

• 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

(15)

AED (IST/DEEC) 29

Grafos - Listas de Adjacências (2)

• Grafo

1

4 2

6 7

5 8

3

G

• Listas de Adjacências

1 4

2

4 8 7

3

1

3 2 5

4

4 6 7

5

6 5 7

7 5 3 6 8

8 3 7

4 2

1

Tabela com V listas de arestas

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;

(16)

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)

(17)

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 V2operaçõ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 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 existir memória suficiente para armazenar a matriz.

Grafos - Inconvenientes das M. de Adj.

(18)

AED (IST/DEEC) 35

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.

• 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;

Grafos - Inconvenientes das L. de Adj.

(19)

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)

(20)

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 V2 V+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

(21)

AED (IST/DEEC) 41

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 (“hash- tables”)

• Quando uma aresta é inserida, é fácil testar se o símbolo já foi usado.

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.

(22)

AED (IST/DEEC) 43

• 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

Grafos – Síntese da Aula 3

Referências

Documentos relacionados

Agrupamento de Escolas de Carnaxide Agrupamento de Escolas de Carnaxide Agrupamento de escolas de José Relvas Agrupamento de Escolas de Miraflores Agrupamento de Escolas

A questão central carreada pelas Partes a este Tribunal Arbitral versa sobre a apreciação da legalidade do ato de liquidação de IRS de 2015, emitido pela AT

2º Ficam criadas 30 (trinta) vagas para o cargo de Auxiliar de Desenvolvimento Infantil – ADI, conforme as condições e características de que dispõe esta Lei,

1.3 - A inscrição poderá ser realizada por correspondência via SEDEX, desde que postada até a data de encerramento das inscrições (23/05 a 10/06/16), não

Em 1935, Philip Hall apresenta um teorema (conhecido como o teorema de Hall ou dos casamentos) onde estabelece uma condição necessária e suficiente para a existência de um

Além da utilização do sistema de envio de professores adicionais, há uma necessidade de se pensar na situação das escolas que não possuem este sistema para a orientação e ensino

1 – Para efeitos da titularidade dos direitos e benefício dos apoios previstos na presente lei, as associações juvenis são reconhecidas pelo IPDJ, IP, mediante inscrição

Amostra Ti-13Nb-13Zr: moagem de alta energia em álcool isopropílico por 4 horas: As micrografias exibidas na Figura 19 são referentes às amostras de pós moídos em