Grafos - O que é um grafo? - fenix.tecnico.ulisboa.pt · grafos dizem-se direccionados, dirigidos...

50
Algoritmos e Estruturas de Dados - C 1 Algoritmos e Estruturas de Dados LEE – 2014/15 Teoria de Grafos e Algoritmos em Grafos Grafos - O que é um grafo? AED (IST/DEEC) 2 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

Transcript of Grafos - O que é um grafo? - fenix.tecnico.ulisboa.pt · grafos dizem-se direccionados, dirigidos...

Page 1: Grafos - O que é um grafo? - fenix.tecnico.ulisboa.pt · grafos dizem-se direccionados, dirigidos ou digrafos. Definição – O primeiro vértice de uma aresta direccionada diz-se

Algoritmos e Estruturas de Dados - C

1

Algoritmos e Estruturas de Dados LEE – 2014/15

Teoria de Grafos e Algoritmos em Grafos

Grafos - O que é um grafo?

AED (IST/DEEC) 2

}  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

Page 2: Grafos - O que é um grafo? - fenix.tecnico.ulisboa.pt · grafos dizem-se direccionados, dirigidos ou digrafos. Definição – O primeiro vértice de uma aresta direccionada diz-se

Algoritmos e Estruturas de Dados - C

2

Grafos - Motivação

AED (IST/DEEC) 3

}  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.

}  Emparelhamento }  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;

Grafos – Definições (1)

AED (IST/DEEC) 4

}  Definição – 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).

}  Definição – Dois vértices ligados por uma aresta dizem-se adjacentes.

}  Definição – Uma aresta que ligue dois vértices diz-se incidente de cada um dos vértices.

Page 3: Grafos - O que é um grafo? - fenix.tecnico.ulisboa.pt · grafos dizem-se direccionados, dirigidos ou digrafos. Definição – O primeiro vértice de uma aresta direccionada diz-se

Algoritmos e Estruturas de Dados - C

3

Grafos – Definições (2)

AED (IST/DEEC) 5

}  Definição – O número de arestas incidentes num vértice diz-se o grau desse vértice.

}  Definição – O subconjunto de arestas e vértices a elas associados diz-se um sub-grafo do grafo original.

}  Definição – 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)

AED (IST/DEEC) 6

}  Definição – Num caminho simples os vértices e arestas são distintos.

}  Definição – 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.

}  Definição – Dois caminhos simples dizem-se disjuntos se não possuírem vértices comuns, excepto possivelmente para os vértices extremos.

Page 4: Grafos - O que é um grafo? - fenix.tecnico.ulisboa.pt · grafos dizem-se direccionados, dirigidos ou digrafos. Definição – O primeiro vértice de uma aresta direccionada diz-se

Algoritmos e Estruturas de Dados - C

4

Grafos – Definições (4)

AED (IST/DEEC) 7

}  Definição – Um grafo diz-se ligado se existir um caminho de cada vértice para todos os outros vértices do grafo.

}  Definição – Um grafo que não seja ligado é constituído por componentes ligadas, que se dizem sub-grafos ligados máximos.

}  Definição – Um grafo ligado acíclico, i.e. sem ciclos, diz-se uma árvore.

Grafos – Definições (5)

AED (IST/DEEC) 8

}  Definição – Um conjunto de árvores diz-se uma floresta.

}  Definição – A árvore de suporte de um grafo ligado é um sub-grafo que contém todos os vértices e é uma árvore.

}  Definição – A floresta de suporte de um grafo é um sub-grafo que contém todos os seus vértices e é uma floresta.

Page 5: Grafos - O que é um grafo? - fenix.tecnico.ulisboa.pt · grafos dizem-se direccionados, dirigidos ou digrafos. Definição – O primeiro vértice de uma aresta direccionada diz-se

Algoritmos e Estruturas de Dados - C

5

Grafos – Propriedades em árvores

AED (IST/DEEC) 9

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

AED (IST/DEEC) 10

}  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

Page 6: Grafos - O que é um grafo? - fenix.tecnico.ulisboa.pt · grafos dizem-se direccionados, dirigidos ou digrafos. Definição – O primeiro vértice de uma aresta direccionada diz-se

Algoritmos e Estruturas de Dados - C

6

Grafos – Exemplos (2)

AED (IST/DEEC) 11

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

AED (IST/DEEC) 12

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

1

4

2

7 6

5 8

3

G

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

1

4

2

7 6

5 8

3

G

Page 7: Grafos - O que é um grafo? - fenix.tecnico.ulisboa.pt · grafos dizem-se direccionados, dirigidos ou digrafos. Definição – O primeiro vértice de uma aresta direccionada diz-se

Algoritmos e Estruturas de Dados - C

7

Grafos – Exemplos (4)

AED (IST/DEEC) 13

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

1

4

2

7 6

5 8

3

G’’

Grafos - Definições e Propriedades (1)

AED (IST/DEEC) 14

}  Definição – Um grafo diz-se completo quando existe uma aresta ligando qualquer par de vértices.

}  Propriedade – Um grafo com V vértices possui, no máximo, V(V-1)/2 arestas.

}  Definição – 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.

Page 8: Grafos - O que é um grafo? - fenix.tecnico.ulisboa.pt · grafos dizem-se direccionados, dirigidos ou digrafos. Definição – O primeiro vértice de uma aresta direccionada diz-se

Algoritmos e Estruturas de Dados - C

8

Grafos - Definições e Propriedades (2)

AED (IST/DEEC) 15

}  Definição – Um grafo que possua um número de arestas próximo do número máximo diz-se denso.

}  Definição – Um grafo cujo complemento seja denso diz-se esparso.

}  Definição – Densidade de um grafo: 2E/(V(V-1)), em que E é o número de arestas e V o de vértices.

}  Definição – A um sub-grafo completo dá-se o nome de clique.

Grafos - Definições e Propriedades (3)

AED (IST/DEEC) 16

}  Definição – 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.

}  Definição – Quando existe um sentido atribuído às arestas, os grafos dizem-se direccionados, dirigidos ou digrafos.

}  Definição – O primeiro vértice de uma aresta direccionada diz-se fonte e o segundo diz-se destino.

Page 9: Grafos - O que é um grafo? - fenix.tecnico.ulisboa.pt · grafos dizem-se direccionados, dirigidos ou digrafos. Definição – O primeiro vértice de uma aresta direccionada diz-se

Algoritmos e Estruturas de Dados - C

9

Grafos - Definições e Propriedades (4)

AED (IST/DEEC) 17

}  Propriedade – Apenas os vértices destino são adjacentes dos vértices fonte.

}  Definição – Um ciclo direccionado num digrafo é um ciclo em que todos os pares de vértices adjacentes surgem pela ordem especificada pelas arestas.

}  Definição – Um digrafo sem ciclos direccionados diz-se grafo direccionado acíclico, ou DAG (Directed Acyclic Graph).

Grafos - Definições e Propriedades (5)

AED (IST/DEEC) 18

}  Definição – 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.

}  Definição – Grafos ponderados direccionados, dizem-se redes.

Page 10: Grafos - O que é um grafo? - fenix.tecnico.ulisboa.pt · grafos dizem-se direccionados, dirigidos ou digrafos. Definição – O primeiro vértice de uma aresta direccionada diz-se

Algoritmos e Estruturas de Dados - C

10

Grafos - Interface ADT para Grafos (1)

AED (IST/DEEC) 19

}  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.

Grafos - Interface ADT para Grafos (2)

AED (IST/DEEC) 20

typedef struct edge Edge; Edge *EDGE(int, int); typedef struct graph Graph; Graph *GRAPHinit(int); void GRAPHinsertE(Graph *G, Edge*); void GRAPHremoveE(Graph *G, Edge*); int GRAPHedges(Edge a[], Graph *G); Graph *GRAPHcopy(Graph G*); void GRAPHdestroy(Graph G*);

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.

Page 11: Grafos - O que é um grafo? - fenix.tecnico.ulisboa.pt · grafos dizem-se direccionados, dirigidos ou digrafos. Definição – O primeiro vértice de uma aresta direccionada diz-se

Algoritmos e Estruturas de Dados - C

11

Grafos - Matriz de Adjacências (1)

AED (IST/DEEC) 21

}  Matriz de Adjacências }  Matriz (VxV) 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)

AED (IST/DEEC) 22

1

4

2

7 6

5 8

3

G

}  Grafo 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

Matriz V ×V simétrica

Page 12: Grafos - O que é um grafo? - fenix.tecnico.ulisboa.pt · grafos dizem-se direccionados, dirigidos ou digrafos. Definição – O primeiro vértice de uma aresta direccionada diz-se

Algoritmos e Estruturas de Dados - C

12

Grafos - Implementação de ADT (1)

AED (IST/DEEC) 23

#include <stdlib.h> #include “GRAPH.h” struct graph {int V; int E; int **adj;}; struct edge {int v; int w;}; Graph *GRAPHinit(int V) { Graph *G = (Graph*) 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; }

Grafos - Implementação de ADT (2)

AED (IST/DEEC) 24

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

Page 13: Grafos - O que é um grafo? - fenix.tecnico.ulisboa.pt · grafos dizem-se direccionados, dirigidos ou digrafos. Definição – O primeiro vértice de uma aresta direccionada diz-se

Algoritmos e Estruturas de Dados - C

13

Grafos - Listas de Adjacências (1)

AED (IST/DEEC) 25

}  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.

Tabela com V listas* de arestas

Grafos - Lista de Adjacências (2)

AED (IST/DEEC) 26

1

4

2

7 6

5 8

3

G

}  Grafo }  Lista de Adjacências

4 1 2 4 1 2

3 8 7

8 4 3 7 2 1 3 4 5

6 4 5 7 5 6 7

6 3 5 7 8

* V ponteiros para lista

Page 14: Grafos - O que é um grafo? - fenix.tecnico.ulisboa.pt · grafos dizem-se direccionados, dirigidos ou digrafos. Definição – O primeiro vértice de uma aresta direccionada diz-se

Algoritmos e Estruturas de Dados - C

14

Grafos - Implementação de ADT (1)

AED (IST/DEEC) 27

#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 = (link *) malloc(sizeof(struct node)); x->v = v; x ->next = next; return x; }

Grafos - Implementação de ADT (2)

AED (IST/DEEC) 28

Graph GRAPHinit(int V) { int v; Graph *G = (Graph*) malloc(sizeof(struct graph)); G->V = V; G->E = 0; G->adj = (link **) 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++; }

Page 15: Grafos - O que é um grafo? - fenix.tecnico.ulisboa.pt · grafos dizem-se direccionados, dirigidos ou digrafos. Definição – O primeiro vértice de uma aresta direccionada diz-se

Algoritmos e Estruturas de Dados - C

15

Grafos - Implementação de ADT (3)

AED (IST/DEEC) 29

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 - Vantagens das M. de Adj.

AED (IST/DEEC) 30

}  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.

Page 16: Grafos - O que é um grafo? - fenix.tecnico.ulisboa.pt · grafos dizem-se direccionados, dirigidos ou digrafos. Definição – O primeiro vértice de uma aresta direccionada diz-se

Algoritmos e Estruturas de Dados - C

16

Grafos - Inconvenientes das M. de Adj.

AED (IST/DEEC) 31

}  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 dominante na execução global do algoritmo;

}  Pode nem sequer existir memória suficiente para armazenar a matriz.

Grafos - Vantagens das L. de Adj.

AED (IST/DEEC) 32

}  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.

Page 17: Grafos - O que é um grafo? - fenix.tecnico.ulisboa.pt · grafos dizem-se direccionados, dirigidos ou digrafos. Definição – O primeiro vértice de uma aresta direccionada diz-se

Algoritmos e Estruturas de Dados - C

17

Grafos - Inconvenientes das L. de Adj.

AED (IST/DEEC) 33

}  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.

Grafos – Procura (1)

AED (IST/DEEC) 34

}  Algumas propriedades simples em grafos são fáceis de determinar, independentemente da ordem pela qual se examinam as arestas. }  Ex: grau de todos os vértices.

}  Outras propriedades estão associadas a caminhos, pelo que se torna necessário identificá-las através de pesquisa feita de vértice em vértice ao longo das arestas.

}  A maioria dos algoritmos em grafos que consideraremos usam este modelo abstracto básico.

}  Torna-se então necessário analisar o essencial dos algoritmos de procura em grafos e suas propriedades estruturais.

Page 18: Grafos - O que é um grafo? - fenix.tecnico.ulisboa.pt · grafos dizem-se direccionados, dirigidos ou digrafos. Definição – O primeiro vértice de uma aresta direccionada diz-se

Algoritmos e Estruturas de Dados - C

18

Grafos – Procura (2)

AED (IST/DEEC) 35

}  Procurar em grafos é equivalente a percorrer labirintos }  Necessário marcar pontos já visitados }  Ser-se capaz de recuar, num caminho efectuado, até ao ponto de partida.

}  Os vários algoritmos de procura em grafos mais não fazem que executar uma determinada estratégia de procura em labirintos. }  Procura em profundidade primeiro (DFS – “Depth-first-search”). }  Admite duas implementações: recursiva e com uso de pilha explícita. }  Substituindo a pilha por uma fila FIFO, transforma-se em procura em

largura primeiro (BFS – “Breadth-first-search”).

Grafos – Exploração de labirintos (1)

AED (IST/DEEC) 36

}  Teseu, Ariadne e o seu pequeno problema com o Minotauro }  Desenrolar um rolo de fio para poder voltar ao princípio }  Marcar os lugares já visitados para evitar repetição.

}  Nós e os grafos }  Existem lâmpadas, inicialmente apagadas, em cada encruzilhada – vértice. }  Cada corredor – aresta – possui um par de portas, inicialmente fechadas,

no início e no fim deste. }  As portas têm janelas que nos permitem ver se a porta do lado oposto

está ou não fechada e se a luz da encruzilhada correspondente está ou não acesa.

}  O objectivo é regressar à encruzilhada inicial tendo aberto todas as portas e acendido todas as luzes.

}  Necessitamos um conjunto de regras que garanta que tal acontece.

Page 19: Grafos - O que é um grafo? - fenix.tecnico.ulisboa.pt · grafos dizem-se direccionados, dirigidos ou digrafos. Definição – O primeiro vértice de uma aresta direccionada diz-se

Algoritmos e Estruturas de Dados - C

19

Grafos – Exploração de labirintos (2)

AED (IST/DEEC) 37

}  Estratégia – Exploração de Tremaux 1. Abrir uma qualquer porta que esteja fechada e dê acesso a uma saída da

presente encruzilhada (deixá-la aberta). Se todas as portas estiverem abertas, saltar para 3.

2. Se a partir da porta que foi aberta for visível que a encruzilhada em que o corredor termina foi acesa, abrir outra porta (passo 1). Caso contrário (a encruzilhada está às escuras), seguir o corredor, desenrolando o fio, até essa encruzilhada, acender a luz e voltar ao passo 1.

3. Se todas as portas estão abertas na presente encruzilhada, verificar se é a primeira visitada. Se sim, parar. Se não, usar o fio para recuar até à última encruzilhada visitada e voltar ao passo 1.

Grafos – Exemplo de execução (DFS)

AED (IST/DEEC) 38

Page 20: Grafos - O que é um grafo? - fenix.tecnico.ulisboa.pt · grafos dizem-se direccionados, dirigidos ou digrafos. Definição – O primeiro vértice de uma aresta direccionada diz-se

Algoritmos e Estruturas de Dados - C

20

Grafos – Exemplo de execução (DFS)

AED (IST/DEEC) 39

2

6

4

0

Acende a luz no primeiro vértice e abre a primeira porta (do vértice 0 para o vértice 2) e segue em frente abrindo sempre a única porta existente (até ao vértice 4).

Grafos – Exemplo de execução (DFS)

AED (IST/DEEC) 40

2

6

4

3

0

Escolhe uma das portas e continua seguindo em frente enquanto não houver escolha.

Page 21: Grafos - O que é um grafo? - fenix.tecnico.ulisboa.pt · grafos dizem-se direccionados, dirigidos ou digrafos. Definição – O primeiro vértice de uma aresta direccionada diz-se

Algoritmos e Estruturas de Dados - C

21

Grafos – Exemplo de execução (DFS)

AED (IST/DEEC) 41

2

6

4

3

5

0

No vértice 5 todas as portas conduzem a corredores que dão acesso a vértices de luz acesa.

Grafos – Exemplo de execução (DFS)

AED (IST/DEEC) 42

2

6

4

3

5

0

Recua até ao último vértice que ainda possui portas por abrir.

Page 22: Grafos - O que é um grafo? - fenix.tecnico.ulisboa.pt · grafos dizem-se direccionados, dirigidos ou digrafos. Definição – O primeiro vértice de uma aresta direccionada diz-se

Algoritmos e Estruturas de Dados - C

22

Grafos – Exemplo de execução (DFS)

AED (IST/DEEC) 43

2

6

4

3

5

7

0

Neste vértice (4), a única porta que dá acesso a pontos não visitados leva-nos para o vértice 7.

Grafos – Exemplo de execução (DFS)

AED (IST/DEEC) 44

2

6

4

3

5

7 1

0

Chegados ao vértice 1, não há mais portas por abrir, pelo que inicia o processo de recuo.

Page 23: Grafos - O que é um grafo? - fenix.tecnico.ulisboa.pt · grafos dizem-se direccionados, dirigidos ou digrafos. Definição – O primeiro vértice de uma aresta direccionada diz-se

Algoritmos e Estruturas de Dados - C

23

Grafos – Exemplo de execução (DFS)

AED (IST/DEEC) 45

2

6

4

3

5

7 1

0

No vértice 4 já estão todas as portas abertas, pelo que tem que continuar a recuar.

Grafos – Exemplo de execução (DFS)

AED (IST/DEEC) 46

2

6

4

3

5

7 1

0

No vértice 0 ainda há portas por abrir.

Page 24: Grafos - O que é um grafo? - fenix.tecnico.ulisboa.pt · grafos dizem-se direccionados, dirigidos ou digrafos. Definição – O primeiro vértice de uma aresta direccionada diz-se

Algoritmos e Estruturas de Dados - C

24

Grafos – Exemplo de execução (DFS)

AED (IST/DEEC) 47

2

6

4

3

5

7 1

0

No vértice 0 já não há portas por abrir.

Grafos – Implementação de DFS (matriz de adjacências)

AED (IST/DEEC) 48

#define dfsR search void dfsR(Graph *G, Edge *e) { int t, w = e->w; pre[w] = cnt++; for (t = 0; t < G->V; t++) if (G->adj[w][t] != 0) if (pre[t] == -1) dfsR(G, EDGE(w, t)); } Função a ser chamada a

partir de uma função de procura genérica (“ADT style”) que inicializa o contador cnt a zero e todas as entradas da tabela indexada pelos vértices pre a –1.

Page 25: Grafos - O que é um grafo? - fenix.tecnico.ulisboa.pt · grafos dizem-se direccionados, dirigidos ou digrafos. Definição – O primeiro vértice de uma aresta direccionada diz-se

Algoritmos e Estruturas de Dados - C

25

Grafos – Descrição da Implementação

AED (IST/DEEC) 49

}  A tabela pre está associada com as lâmpadas. Se pre[i] valer –1, significa que a luz está apagada para esse vértice.

}  Quando se encontra uma aresta para um vértice em que pre não vale –1, um vértice já visitado, essa aresta não é seguida.

}  Finalmente, a própria estrutura da recursão estabelece o mecanismo equivalente a desenrolar o novelo de fio.

}  Quando um vértice não possui mais vértices adjacentes com pre igual a –1, a chamada recursiva termina, devolvendo o controlo de execução para o vértice que o antecedeu na recursão.

}  O retorno da recursão é equivalente a voltar a enrolar o fio.

#define dfsR search void dfsR(Graph *G, Edge *e) { int t, w = e->w; pre[w] = cnt++; for (t = 0; t < G->V; t++) if (G->adj[w][t] != 0) if (pre[t] == -1) dfsR(G, EDGE(w, t)); }

#define dfsR search void dfsR(Graph *G, Edge *e) { link t; int w = e->w; pre[w] = cnt++; for (t = G->adj[w]; t != NULL; t = t->next) if (pre[t->v] == -1) dfsR(G, EDGE(w, t->v)); }

Grafos – Implementação de DFS (lista de adjacências)

AED (IST/DEEC) 50

Page 26: Grafos - O que é um grafo? - fenix.tecnico.ulisboa.pt · grafos dizem-se direccionados, dirigidos ou digrafos. Definição – O primeiro vértice de uma aresta direccionada diz-se

Algoritmos e Estruturas de Dados - C

26

Grafos – Implementação de BFS (matriz de adjacências)

AED (IST/DEEC) 51

# define bfs search

void bfs(Graph *G, Edge *e)

{

int v;

QUEUEput(e);

while (!QUEUEempty())

if (pre[(e = QUEUEget())->w] == -1)

{

pre[e->w] = cnt++;

st[e->w] = e->v;

for (v = 0; v < G->V; v++)

if (G->adj[e->w][v] == 1)

if (pre[v] == -1)

QUEUEput(EDGE(e->w, v));

}

}

Cria uma fila (FIFO) com todas as arestas incidentes de vértices visitados e de vértices ainda não visitados. Toma a primeira aresta da fila até encontrar uma que aponte para um vértice não visitado. Visita esse vértice, colocando na fila todas as arestas que apontam para vértices não visitados. Tabela st guarda informação sobre o vértice antecessor.

Grafos – Exemplo de execução (BFS)

AED (IST/DEEC) 52

Page 27: Grafos - O que é um grafo? - fenix.tecnico.ulisboa.pt · grafos dizem-se direccionados, dirigidos ou digrafos. Definição – O primeiro vértice de uma aresta direccionada diz-se

Algoritmos e Estruturas de Dados - C

27

Grafos – Exemplo de execução (BFS)

AED (IST/DEEC) 53

0

5

2

7

Grafos – Exemplo de execução (BFS)

AED (IST/DEEC) 54

0

5

2

6 7

Page 28: Grafos - O que é um grafo? - fenix.tecnico.ulisboa.pt · grafos dizem-se direccionados, dirigidos ou digrafos. Definição – O primeiro vértice de uma aresta direccionada diz-se

Algoritmos e Estruturas de Dados - C

28

Grafos – Exemplo de execução (BFS)

AED (IST/DEEC) 55

0

5

2

3

6 7

4

Grafos – Exemplo de execução (BFS)

AED (IST/DEEC) 56

0

5

2

1

3

6 7

4

Page 29: Grafos - O que é um grafo? - fenix.tecnico.ulisboa.pt · grafos dizem-se direccionados, dirigidos ou digrafos. Definição – O primeiro vértice de uma aresta direccionada diz-se

Algoritmos e Estruturas de Dados - C

29

Grafos – Exemplo de execução (BFS)

AED (IST/DEEC) 57

0

5

2

1

3

6 7

4

Grafos – Exemplo de execução (BFS)

AED (IST/DEEC) 58

0

5

2

1

3

6 7

4

Page 30: Grafos - O que é um grafo? - fenix.tecnico.ulisboa.pt · grafos dizem-se direccionados, dirigidos ou digrafos. Definição – O primeiro vértice de uma aresta direccionada diz-se

Algoritmos e Estruturas de Dados - C

30

Grafos – Exemplo de execução (BFS)

AED (IST/DEEC) 59

0

5

2

1

3

6 7

4

Grafos – Exemplo de execução (BFS)

AED (IST/DEEC) 60

0

5

2

1

3

6 7

4

Page 31: Grafos - O que é um grafo? - fenix.tecnico.ulisboa.pt · grafos dizem-se direccionados, dirigidos ou digrafos. Definição – O primeiro vértice de uma aresta direccionada diz-se

Algoritmos e Estruturas de Dados - C

31

Grafos – Caminhos mais curtos

AED (IST/DEEC) 61

}  Cada caminho num digrafo ponderado possui um peso - a soma dos pesos das arestas que o constituem.

}  Esta característica origina directamente problemas como: determinar o caminho de menor peso entre dois vértices.

}  Este e uma série de outros semelhantes são conhecidos como problemas de caminhos mais curtos - “shortest path problems”.

}  Ir-se-á considerar grafos ponderados e direccionados, os quais serão designados como redes.

Lista de adjacências

Matriz de adjacências Vector de arestas Representação gráfica

Grafos – Uma rede e suas representações

AED (IST/DEEC) 62

0-1 .41 1-2 .51 2-3 .50 4-3 .36 3-5 .38 3-0 .45 0-5 .29 5-4 .21 1-4 .32 4-2 .32 5-1 .29

0 1 2 3 4 5 0 0 .41 .29 1 0 .51 .32 2 0 .50 3 .45 0 .38 4 .32 .36 0 5 .29 .21 0

.41 1 0 .29 5 1 .51 2 .32 4 2 .50 3 3 .45 0 .38 5 4 .32 2 .36 3 5 .29 1 .21 4

0.50

0.29

0.45

0.29

0.51

0.41

0.38

0.21

0.36

0.32

0.32

2 3

4

1

5

G 0

Page 32: Grafos - O que é um grafo? - fenix.tecnico.ulisboa.pt · grafos dizem-se direccionados, dirigidos ou digrafos. Definição – O primeiro vértice de uma aresta direccionada diz-se

Algoritmos e Estruturas de Dados - C

32

Grafos – Caminhos mais curtos (1)

AED (IST/DEEC) 63

2 3

4

1

5

G 0

0.50

0.29

0.45

0.29

0.51

0.41

0.38

0.21

0.36

0.32

0.32

0 1.13 1-4-3-0 0.95 2-3-0 0.45 3-0 0.81 4-3-0 1.02 5-4-3-0

Grafos – Caminhos mais curtos (2)

AED (IST/DEEC) 64

2 3

4

1

5

G 0

0.50

0.29

0.45

0.29

0.51

0.41

0.38

0.21

0.36

0.32

0.32

0.41 0-1 1 1.17 2-3-5-1 0.67 3-5-1 1.03 4-3-5-1 0.29 5-1

Page 33: Grafos - O que é um grafo? - fenix.tecnico.ulisboa.pt · grafos dizem-se direccionados, dirigidos ou digrafos. Definição – O primeiro vértice de uma aresta direccionada diz-se

Algoritmos e Estruturas de Dados - C

33

Grafos – Caminhos mais curtos (3)

AED (IST/DEEC) 65

2 3

4

1

5

G 0

0.50

0.29

0.45

0.29

0.51

0.41

0.38

0.21

0.36

0.32

0.32

0.82 0-5-4-2 0.51 1-2 2 0.91 3-5-4-2 0.32 4-2 0.53 5-4-2

Grafos – Caminhos mais curtos (4)

AED (IST/DEEC) 66

2 3

4

1

5

G 0

0.50

0.29

0.45

0.29

0.51

0.41

0.38

0.21

0.36

0.32

0.32 0.86 0-5-4-3 0.68 1-4-3 0.50 2-3 3 0.36 4-3 0.57 5-4-3

Page 34: Grafos - O que é um grafo? - fenix.tecnico.ulisboa.pt · grafos dizem-se direccionados, dirigidos ou digrafos. Definição – O primeiro vértice de uma aresta direccionada diz-se

Algoritmos e Estruturas de Dados - C

34

Grafos – Caminhos mais curtos (5)

AED (IST/DEEC) 67

2 3

4

1

5

G 0

0.50

0.29

0.45

0.29

0.51

0.41

0.38

0.21

0.36

0.32

0.32

0.50 0-5-4 0.32 1-4 1.09 2-3-5-4 0.59 3-5-4 4 0.21 5-4

Grafos – Caminhos mais curtos (6)

AED (IST/DEEC) 68

2 3

4

1

5

G 0

0.50

0.29

0.45

0.29

0.51

0.41

0.38

0.21

0.36

0.32

0.32

0.29 0-5 1.06 1-4-3-5 0.88 2-3-5 0.38 3-5 0.74 4-3-5 5

Page 35: Grafos - O que é um grafo? - fenix.tecnico.ulisboa.pt · grafos dizem-se direccionados, dirigidos ou digrafos. Definição – O primeiro vértice de uma aresta direccionada diz-se

Algoritmos e Estruturas de Dados - C

35

Grafos – Caminhos mais curtos

AED (IST/DEEC) 69

2 3

4

1

5

G 0

0.50

0.29

0.45

0.29

0.51

0.41

0.38

0.21

0.36

0.32

0.32

0 1.13 1-4-3-0 0.95 2-3-0 0.45 3-0 0.81 4-3-0 1.02 5-4-3-0

0.41 0-1 1 1.17 2-3-5-1 0.67 3-5-1 1.03 4-3-5-1 0.29 5-1

0.82 0-5-4-2 0.51 1-2 2 0.91 3-5-4-2 0.32 4-2 0.53 5-4-2

0.86 0-5-4-3 0.68 1-4-3 0.50 2-3 3 0.36 4-3 0.57 5-4-3

0.50 0-5-4 0.32 1-4 1.09 2-3-5-4 0.59 3-5-4 4 0.21 5-4

0.29 0-5 1.06 1-4-3-5 0.88 2-3-5 0.38 3-5 0.74 4-3-5 5

Grafos – Definição e problemas

AED (IST/DEEC) 70

}  Definição – Um caminho mais curto entre dois vértices s e t numa rede é um caminho direccionado de s para t com a propriedade de não existir outro caminho direccionado com menor peso.

}  Problema 1 - Caminho mais curto fonte-destino }  Dado um vértice inicial s e um vértice destino t, qual o caminho mais

curto no grafo de s para t?

}  Problema 2 - Caminhos mais curtos de fonte única }  Dado um vértice inicial s, quais os caminhos mais curtos que ligam s a

todos os outros vértices?

}  Problema 3 - Caminhos mais curtos entre todos }  Quais os caminhos mais curtos ligando todos os vértices de um grafo?

Page 36: Grafos - O que é um grafo? - fenix.tecnico.ulisboa.pt · grafos dizem-se direccionados, dirigidos ou digrafos. Definição – O primeiro vértice de uma aresta direccionada diz-se

Algoritmos e Estruturas de Dados - C

36

Grafos – Motivação (1)

AED (IST/DEEC) 71

}  Mapas de estrada }  Serão os grafos de estradas entre cidades necessariamente não

direccionados? }  É igual ir até à torre da Serra da Estrela e vir de lá? }  Igual em distância e/ou custo?

}  Sabendo a posição presente e o destino, pretende-se saber qual a próxima cidade a tomar.

}  Rotas aéreas }  Minimização do tempo necessário para viajar entre duas cidades? }  Minimização do custo para viajar entre duas cidades?

}  Minimização de custo é mais complexo que minimização de distâncias. }  Pode ser mais económico fazer uma escala do que o vôo directo.

Grafos – Motivação (2)

AED (IST/DEEC) 72

}  Os algoritmos que estudaremos têm aplicação para lá destes exemplos e de outros similares.

}  Existem problemas, aparentemente nada ligados com estes, para os quais os problemas de caminhos mais curtos podem ser relevantes.

}  Enquanto que os problemas de caminhos mais curtos possuem uma natural intuição gráfica, outros não a possuem.

}  Através de redução podem-se transformar alguns pro-blemas em versões generalizadas dos caminhos mais curtos.

Page 37: Grafos - O que é um grafo? - fenix.tecnico.ulisboa.pt · grafos dizem-se direccionados, dirigidos ou digrafos. Definição – O primeiro vértice de uma aresta direccionada diz-se

Algoritmos e Estruturas de Dados - C

37

Grafos – Princípios de funcionamento (1)

AED (IST/DEEC) 73

}  Os algoritmos de caminhos mais curtos a estudar assentam numa operação básica que dá pelo nome de relaxação.

}  Esta surge de várias formas nas diferentes implementações.

}  Em essência consiste no seguinte: }  Inicia-se um algoritmo conhecendo apenas as arestas e seus pesos. }  À medida que se avança, recolhe-se informação sobre os caminhos mais

curtos que unem vários pares de vértices. }  A informação é actualizada incrementalmente, realizando-se inferências

sobre os melhores caminhos a partir da informação recolhida. }  …

Grafos – Princípios de funcionamento (2)

AED (IST/DEEC) 74

}  … }  Em cada passo testa-se se existe um caminho mais curto do que algum

dos conhecidos. }  O termo “relaxação” é usado para descrever este último passo, porque

tem como efeito relaxar algumas das restrições impostas ao caminho mais curto até ao momento.

}  Pode-se imaginar um elástico esticado sobre o caminho mais curto entre dois vértices.

}  Uma relaxação bem sucedida tem como efeito relaxar a tensão desse elástico sobre o caminho mais curto.

Page 38: Grafos - O que é um grafo? - fenix.tecnico.ulisboa.pt · grafos dizem-se direccionados, dirigidos ou digrafos. Definição – O primeiro vértice de uma aresta direccionada diz-se

Algoritmos e Estruturas de Dados - C

38

Grafos – Princípios de funcionamento (3)

AED (IST/DEEC) 75

}  Os algoritmos são baseados na aplicação repetida de um dos seguintes tipos de relaxações }  Testar se uma dada aresta define um novo caminho mais curto para o

seu vértice destino. }  Testar se a passagem por um dado vértice define um novo caminho mais

curto ligando dois outros vértices dados.

}  Ao primeiro tipo dá-se o nome de relaxação de aresta e ao segundo o nome de relaxação de caminho.

Grafos – Relaxação de aresta (1)

AED (IST/DEEC) 76

}  Todos os algoritmos de fonte única considerados são baseados no seguinte passo.

}  Dada uma aresta, será que conduz a um caminho mais curto para o seu vértice destino?

}  Para responder a esta questão torna-se necessário utilizar uma estrutura de dados adequada.

Page 39: Grafos - O que é um grafo? - fenix.tecnico.ulisboa.pt · grafos dizem-se direccionados, dirigidos ou digrafos. Definição – O primeiro vértice de uma aresta direccionada diz-se

Algoritmos e Estruturas de Dados - C

39

Grafos – Relaxação de aresta (2)

AED (IST/DEEC) 77

}  Primeiro, é preciso calcular o comprimento de caminho mais curto do vértice fonte a todos os outros vértices.

}  Armazenar esses valores num vector indexado pelos vértices, wt.

}  Depois, para testar se uma dada aresta v-w com peso e.wt define um novo caminho mais curto do vértice destino até w, basta testar se wt[v] + e.wt é menor que wt[w].

}  Para ser possível calcular os caminhos, usa-se um outro vector indexado pelos vértices, st, que armazena o vértice antecessor no caminho mais curto a partir do vértice fonte para cada outro vértice.

Grafos – Relaxação de aresta (3)

AED (IST/DEEC) 78

}  Definição – Dada uma rede e um vértice fonte, s, a árvore de caminhos mais curtos (SPT*) para s define-se como sendo a união dos caminhos mais curtos de s para cada um dos restantes vértices da rede.

}  Código usado na relaxação de aresta:

}  Como gerar o caminho a partir de st?

if (wt[w] > wt[v] + e.wt) { wt[w] = wt[v] + e.wt; st[w] = v; }

* Shortest Path Tree

Page 40: Grafos - O que é um grafo? - fenix.tecnico.ulisboa.pt · grafos dizem-se direccionados, dirigidos ou digrafos. Definição – O primeiro vértice de uma aresta direccionada diz-se

Algoritmos e Estruturas de Dados - C

40

Grafos – SPT’s

AED (IST/DEEC) 79

}  A definição da SPT descreve um conjunto de arestas.

}  É uma árvore por ser um grafo ligado (todos os vértices estão ligados a s por um caminho) e não possui ciclos.

}  Todas as arestas direccionadas apontam no sentido descendente da árvore.

}  É uma árvore de suporte da sub-rede gerada pelos vértices atingíveis a partir do vértice fonte.

Grafos – Exemplo de SPT

AED (IST/DEEC) 80

2 3

4

1 5

0

SPT associada

2 3

4

1

5

G 0

Caminhos mais curtos a partir de 0

0.50

0.29

0.45

0.29

0.51

0.41

0.38

0.21

0.36

0.32

0.32

Page 41: Grafos - O que é um grafo? - fenix.tecnico.ulisboa.pt · grafos dizem-se direccionados, dirigidos ou digrafos. Definição – O primeiro vértice de uma aresta direccionada diz-se

Algoritmos e Estruturas de Dados - C

41

Grafos – Relaxação de caminho (1)

AED (IST/DEEC) 81

}  Todos os algoritmos de caminhos mais curtos entre todos considerados fazem uso da relaxação de caminho.

}  Ou seja, fazem a seguinte pergunta: }  A inclusão de e passagem por um dado vértice permite que o caminho

entre outros dois vértices seja encurtado?

}  Dados três vértices s, x e t, pretende-se saber se é mais económico ir de s a t passando por x ou não passando por x.

Grafos – Relaxação de caminho (2)

AED (IST/DEEC) 82

}  Mantém-se uma matriz d, em que d[s][t] é o comprimento do caminho mais curto entre s e t.

}  Mais uma matriz p, em que p[s][t] é o próximo vértice no caminho mais curto entre s e t.

}  À primeira dá-se o nome de matriz de distâncias e à segunda de matriz de caminhos, ou sucessores.

Page 42: Grafos - O que é um grafo? - fenix.tecnico.ulisboa.pt · grafos dizem-se direccionados, dirigidos ou digrafos. Definição – O primeiro vértice de uma aresta direccionada diz-se

Algoritmos e Estruturas de Dados - C

42

Grafos – Relaxação de caminho (3)

AED (IST/DEEC) 83

}  Código usado na relaxação de caminho:

}  Como gerar o caminho a partir de p?

}  Como ambas as relaxações se suportam nos operadores + e <, o resultado seguinte estabelece a correcção dos algoritmos nelas baseados.

if (d[s][t] > d[s][x] + d[x][t]) { d[s][t] = d[s][x] + d[x][t]; p[s][t] = p[s][x]; }

Grafos – Princípio de optimalidade

AED (IST/DEEC) 84

}  Propriedade – Se um vértice x pertence ao caminho mais curto entre s e t, então esse caminho consiste do caminho mais curto entre s e x, seguido do caminho mais curto entre x e t.

}  Demonstração }  Por redução ao absurdo. }  Imagine-se que um dos dois caminhos não é o mais curto. }  Então poder-se-ia usar o caminho mais curto entre s e x ou entre x e t

para construir um caminho mais curto entre s e t. }  O que contradiz a hipótese de ser óptimo o caminho original.

Page 43: Grafos - O que é um grafo? - fenix.tecnico.ulisboa.pt · grafos dizem-se direccionados, dirigidos ou digrafos. Definição – O primeiro vértice de uma aresta direccionada diz-se

Algoritmos e Estruturas de Dados - C

43

Grafos – Algoritmo de Dijkstra

AED (IST/DEEC) 85

}  Coloca-se o vértice fonte na raiz da árvore e constrói-se a árvore uma aresta de cada vez.

}  Toma-se sempre a aresta que estabelece o caminho mais curto do vértice fonte a algum vértice que ainda não esteja na SPT.

}  Por outras palavras, adicionam-se vértices à SPT por ordem crescente da sua distância (através da SPT) ao vértice de partida. }  Também um algoritmo “greedy”.

}  Este algoritmo pode ser visto como um método de procura generalizada, diferente da DFS, da BFS e do algoritmo de Prim apenas pela regra de entrada de arestas na árvore.

Grafos – Exemplo de execução (1)

AED (IST/DEEC) 86

}  Chamada à função para determinar os caminhos mais curtos tomando o vértice 0 como fonte. }  GRAPHpfs(G, 0, st, wt)

Lista de adjacências 0: 1 - 5 1: 4 - 2 2: 3 3: 0 - 5 4: 3 - 2 5: 1 - 4

0.50

0.29

0.45

0.29

0.51

0.41

0.38

0.21

0.36

0.32

0.32

2 3

4

1

5

G 0

Page 44: Grafos - O que é um grafo? - fenix.tecnico.ulisboa.pt · grafos dizem-se direccionados, dirigidos ou digrafos. Definição – O primeiro vértice de uma aresta direccionada diz-se

Algoritmos e Estruturas de Dados - C

44

Grafos – Exemplo de execução (2)

AED (IST/DEEC) 87

Após a inicialização da fila tem-se Fila ← (0, 5, 4, 3, 2, 1) st ← [-1 –1 –1 –1 –1 –1] wt ← [0.0 100.0 100.0 100.0 100.0 100.0] Ciclo while v ← 0 wt[0] != 100.0 ü Fila ← (5, 4, 3, 2, 1) Ciclo for t ← 1 wt[1] > wt[0] + t->wt ü wt[1] ← 0.41 Fila ← (1, 5, 4, 3, 2), st[1] ← 0 t ← 5 wt[5] > wt[0] + t->wt ü wt[5] ← 0.29 Fila ← (5, 1, 4, 3, 2), st[5] ← 0 Não há mais adjacentes de 0

0.50

0.29

0.45

0.29

0.51

0.41

0.38

0.21

0.36

0.32

0.32

2 3

4

1

5

G 0

st vale [-1 0 –1 –1 –1 0]

Grafos – Exemplo de execução (3)

AED (IST/DEEC) 88

Ciclo while (continuação) v ← 5 wt[5] != 100.0 ü Fila ← (1, 4, 3, 2) Ciclo for t ← 1 wt[1] > wt[5] + t->wt X t ← 4 wt[4] > wt[5] + t->wt ü wt[4] ← 0.50 Fila ← (1, 4, 3, 2), st[4] ← 5 Não há mais adjacentes de 5 v ← 1 wt[1] != 100.0 ü Fila ← (4, 3, 2) Ciclo for t ← 4 wt[4] > wt[1] + t->wt X

st vale [-1 0 –1 –1 5 0]

0.50

0.29

0.45

0.29

0.51

0.41

0.38

0.21

0.36

0.32

0.32

2 3

4

1

5

G 0

Page 45: Grafos - O que é um grafo? - fenix.tecnico.ulisboa.pt · grafos dizem-se direccionados, dirigidos ou digrafos. Definição – O primeiro vértice de uma aresta direccionada diz-se

Algoritmos e Estruturas de Dados - C

45

Grafos – Exemplo de execução (4)

AED (IST/DEEC) 89

Ciclo for (continuação) t ← 2 wt[2] > wt[1] + t->wt ü wt[2] ← 0.91 Fila ← (4, 2, 3), st[2] ← 1 Não há mais adjacentes de 1 v ← 4 wt[4] != 100.0 ü Fila ← (2, 3) Ciclo for t ← 3 wt[3] > wt[4] + t->wt ü wt[3] ← 0.86 Fila ← (3, 2), st[3] ← 4 t ← 2 wt[2] > wt[4] + t->wt ü wt[2] ← 0.82 Fila ← (2, 3), st[2] ← 4 st vale [-1 0 4 4 5 0]

0.50

0.29

0.45

0.29

0.51

0.41

0.38

0.21

0.36

0.32

0.32

2 3

4

1

5

G 0

1

0.50

0.29

0.45

0.29

0.51

0.41

0.38

0.21

0.36

0.32

0.32

2 3

4

1

5

G 0

Grafos – Exemplo de execução (5)

AED (IST/DEEC) 90

Ciclo for (continuação) Não há mais adjacentes de 4 v ← 2 wt[2] != 100.0 ü Fila ← (3) Ciclo for t ← 3 wt[3] > wt[2] + t->wt X Não há mais adjacentes de 2 v ← 3 wt[3] != 100 ü Fila ← () Ciclo for t ← 0 wt[0] > wt[3] + t->wt X t ← 5 wt[5] > wt[3] + t->wt X Não há mais adjacentes de 3

Ciclo while termina!!! st vale [-1 0 4 4 5 0]

Page 46: Grafos - O que é um grafo? - fenix.tecnico.ulisboa.pt · grafos dizem-se direccionados, dirigidos ou digrafos. Definição – O primeiro vértice de uma aresta direccionada diz-se

Algoritmos e Estruturas de Dados - C

46

Grafos – Árvore de procura (Alg. Dijkstra)

AED (IST/DEEC) 91

0

2 ∞

3 4 5 ∞ 0.29

1

0.41

0.41+0.51

0.50+0.32 2 3

4

1

5

G 0

0.50

0.29

0.45

0.29

0.51

0.41

0.38

0.21

0.36

0.32

0.32

0.29+0.21 0.50 0.92

0.82 0.50+0.36 0.86

PQinit – inicializa uma fila baseada em prioridades (ver sec. 9.6). PQinsert – insere um novo elemento de acordo com a sua prioridade. PQdelmin – retira o elemento de mais baixa prioridade. PQdec – altera a posição do elemen-to, por ter baixado a sua prioridade.

Grafos – Implementação (listas de adjacências)

AED (IST/DEEC) 92

#define P (wt[v] + t->wt) void GRAPHpfs(Graph *G, int s, int st[], double wt[]) { int v, w; link t; PQinit(); for (v = 0; v < G->V; v++) { st[v] = -1; wt[v] = maxWT; PQinsert(v); } wt[s] = 0.0; PQdec(s); while (!PQempty()) if (wt[v = PQdelmin()] != maxWT) for (t = G->adj[v]; t != NULL; t = t->next) if (wt[w = t->v] > P) { wt[w] = P; PQdec(w); st[w] = v; } }

Page 47: Grafos - O que é um grafo? - fenix.tecnico.ulisboa.pt · grafos dizem-se direccionados, dirigidos ou digrafos. Definição – O primeiro vértice de uma aresta direccionada diz-se

Algoritmos e Estruturas de Dados - C

47

Grafos – Exemplo de execução (1)

AED (IST/DEEC) 93

}  Chamada à função para determinar todos os caminhos mais curtos. }  GRAPHspALL(G)

2 3

4

1

5

G 0

0.50

0.29

0.45

0.29

0.51

0.41

0.38

0.21

0.36

0.32

0.32

Grafos – Exemplo de execução (2)

AED (IST/DEEC) 94

p = 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6

d = ∞ ∞ ∞ ∞ ∞ ∞ ∞ ∞ ∞ ∞ ∞ ∞ ∞ ∞ ∞ ∞ ∞ ∞ ∞ ∞ ∞ ∞ ∞ ∞ ∞ ∞ ∞ ∞ ∞ ∞ ∞ ∞ ∞ ∞ ∞ ∞

Inicialização #1

p = 0 1 6 6 6 5 6 1 2 6 4 6 6 6 2 3 6 6 0 6 6 3 6 5 6 6 2 3 4 6 6 1 6 6 4 5

d = 0 0.41 ∞ ∞ ∞ 0.29 ∞ 0 0.51 ∞ 0.32 ∞ ∞ ∞ 0 0.50 ∞ ∞ 0.45 ∞ ∞ 0 ∞ 0.38 ∞ ∞ 0.32 0.36 0 ∞ ∞ 0.29 ∞ ∞ 0.21 0

Inicialização #2 2 3

4

1

5

G 0

0.50

0.29

0.45

0.29

0.51

0.41

0.38

0.21

0.36

0.32

0.32

Page 48: Grafos - O que é um grafo? - fenix.tecnico.ulisboa.pt · grafos dizem-se direccionados, dirigidos ou digrafos. Definição – O primeiro vértice de uma aresta direccionada diz-se

Algoritmos e Estruturas de Dados - C

48

AED (IST/DEEC) 95

s = 0 Ciclo for interior não faz nada s = 3 Ciclo for interior t ← 0 nada t ← 1 d[3][1] > d[3][0] + d[0][1] ü t ← 2, 3, 4, 5 nada

d = 0 0.41 ∞ ∞ ∞ 0.29 ∞ 0 0.51 ∞ 0.32 ∞ ∞ ∞ 0 0.50 ∞ ∞ 0.45 ∞ ∞ 0 ∞ 0.38 ∞ ∞ 0.32 0.36 0 ∞ ∞ 0.29 ∞ ∞ 0.21 0

Ciclo for exterior com i = 0

d[s][i]

d[i][t]

Únicas entradas finitas

2 3

4

1

5

G 0

0.50

0.29

0.45

0.29

0.51

0.41

0.38

0.21

0.36

0.32

0.32

Grafos – Exemplo de execução (3)

AED (IST/DEEC) 96

d[3][1] ← 0.86

p[3][1] ← p[3][0] = 0

Alterações resultantes para i = 0

Quando i = 0 está-se a considerar se é mais económica a ligação directa ou via vértice 0. Neste caso, a ligação directa não existia e passou a ser possível atingir o vértice 1 a partir do vértice 3.

d = 0 0.41 ∞ ∞ ∞ 0.29 ∞ 0 0.51 ∞ 0.32 ∞ ∞ ∞ 0 0.50 ∞ ∞ 0.45 0.86 ∞ 0 ∞ 0.38 ∞ ∞ 0.32 0.36 0 ∞ ∞ 0.29 ∞ ∞ 0.21 0

p = 0 1 6 6 6 5 6 1 2 6 4 6 6 6 2 3 6 6 0 0 6 3 6 5 6 6 2 3 4 6 6 1 6 6 4 5

2 3

4

1

5

G 0

0.50

0.29

0.45

0.29

0.51

0.41

0.38

0.21

0.36

0.32

0.32

Grafos – Exemplo de execução (4)

Page 49: Grafos - O que é um grafo? - fenix.tecnico.ulisboa.pt · grafos dizem-se direccionados, dirigidos ou digrafos. Definição – O primeiro vértice de uma aresta direccionada diz-se

Algoritmos e Estruturas de Dados - C

49

Grafos – Exemplo de execução (5)

AED (IST/DEEC) 97

d = 0 0.41 0.92 ∞ 0.73 0.29 ∞ 0 0.51 ∞ 0.32 ∞ ∞ ∞ 0 0.50 ∞ ∞ 0.45 0.86 1.37 0 1.18 0.38 ∞ ∞ 0.32 0.36 0 ∞ ∞ 0.29 0.80 ∞ 0.21 0

Ciclo for exterior com i = 1 p = 0 1 1 6 1 5

6 1 2 6 4 6 6 6 2 3 6 6 0 0 0 3 0 5 6 6 2 3 4 6 6 1 1 6 4 5

d = 0 0.41 0.92 1.42 0.73 0.29 ∞ 0 0.51 1.01 0.32 ∞ ∞ ∞ 0 0.50 ∞ ∞ 0.45 0.86 1.37 0 1.18 0.38 ∞ ∞ 0.32 0.36 0 ∞ ∞ 0.29 0.80 1.30 0.21 0

Ciclo for exterior com i = 2

p = 0 1 1 1 1 5 6 1 2 2 4 6 6 6 2 3 6 6 0 0 0 3 0 5 6 6 2 3 4 6 6 1 1 1 4 5

Grafos – Exemplo de execução (6)

AED (IST/DEEC) 98

d = 0 0.41 0.92 1.42 0.73 0.29 1.46 0 0.51 1.01 0.32 1.39 0.95 1.36 0 0.50 1.68 0.88 0.45 0.86 1.37 0 1.18 0.38 0.81 1.22 0.32 0.36 0 0.74 1.75 0.29 0.80 1.30 0.21 0

Ciclo for exterior com i = 3

p = 0 1 1 1 1 5 2 1 2 2 4 2 3 3 2 3 3 3 0 0 0 3 0 5 3 3 2 3 4 3 1 1 1 1 4 5

d = 0 0.41 0.92 1.09 0.73 0.29 1.13 0 0.51 0.68 0.32 1.06 0.95 1.36 0 0.50 1.68 0.88 0.45 0.86 1.37 0 1.18 0.38 0.81 1.22 0.32 0.36 0 0.74 1.02 0.29 0.53 0.57 0.21 0

Ciclo for exterior com i = 4 p = 0 1 1 1 1 5

4 1 2 4 4 4 3 3 2 3 3 3 0 0 0 3 0 5 3 3 2 3 4 3 4 1 4 4 4 5

Page 50: Grafos - O que é um grafo? - fenix.tecnico.ulisboa.pt · grafos dizem-se direccionados, dirigidos ou digrafos. Definição – O primeiro vértice de uma aresta direccionada diz-se

Algoritmos e Estruturas de Dados - C

50

2 3

4

1

5

G 0

0.50

0.29

0.45

0.29

0.51

0.41

0.38

0.21

0.36

0.32

0.32

Grafos – Exemplo de execução (7)

AED (IST/DEEC) 99

p = 0 1 5 5 5 5 4 1 2 4 4 4 3 3 2 3 3 3 0 5 5 3 5 5 3 3 2 3 4 3 4 1 4 4 4 5

d = 0 0.41 0.82 0.86 0.50 0.29 1.13 0 0.51 0.68 0.32 1.06 0.95 1.17 0 0.50 1.09 0.88 0.45 0.67 0.91 0 0.59 0.38 0.81 1.03 0.32 0.36 0 0.74 1.02 0.29 0.53 0.57 0.21 0

Ciclo for exterior com i = 5

Qual o caminho mais curto entre o vértice 3 e o vértice 2? p[3][2] = 5 p[5][2] = 4 p[4][2] = 2 Qual o seu comprimento?

d[3][2] = 0.91 d[3][2] = adj[3][5] + adj[5][4] + adj[4][2] = 0.38 + 0.21 + 0.32