40
AED (IST/DEEC) 44 Grafos – Procura (1) 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. AED (IST/DEEC) 45 Grafos – Procura (2) 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 –Procura (1) - INESC-IDalgos.inesc-id.pt/aed06/downloads/Slides/12-GrafosB.pdf · Grafos –Procura (1) • Algumas propriedades simples em grafos são fáceis de determinar,

  • Upload
    others

  • View
    2

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Grafos –Procura (1) - INESC-IDalgos.inesc-id.pt/aed06/downloads/Slides/12-GrafosB.pdf · Grafos –Procura (1) • Algumas propriedades simples em grafos são fáceis de determinar,

AED (IST/DEEC) 44

Grafos – Procura (1)• 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.

AED (IST/DEEC) 45

Grafos – Procura (2)• 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”).

Page 2: Grafos –Procura (1) - INESC-IDalgos.inesc-id.pt/aed06/downloads/Slides/12-GrafosB.pdf · Grafos –Procura (1) • Algumas propriedades simples em grafos são fáceis de determinar,

AED (IST/DEEC) 46

Grafos – Exploração de labirintos (1)• Teseu 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.

AED (IST/DEEC) 47

• Estratégia – Exploração de Tremaux1. 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 – Exploração de labirintos (2)

Page 3: Grafos –Procura (1) - INESC-IDalgos.inesc-id.pt/aed06/downloads/Slides/12-GrafosB.pdf · Grafos –Procura (1) • Algumas propriedades simples em grafos são fáceis de determinar,

AED (IST/DEEC) 48

Grafos – Exemplo de execução (DFS)

AED (IST/DEEC) 49

Grafos – Exemplo de execução (DFS)

4

6

0 2

Page 4: Grafos –Procura (1) - INESC-IDalgos.inesc-id.pt/aed06/downloads/Slides/12-GrafosB.pdf · Grafos –Procura (1) • Algumas propriedades simples em grafos são fáceis de determinar,

AED (IST/DEEC) 50

Grafos – Exemplo de execução (DFS)

5

3

4

6

0 2

AED (IST/DEEC) 51

Grafos – Exemplo de execução (DFS)

5

3

4

6

0 2

Page 5: Grafos –Procura (1) - INESC-IDalgos.inesc-id.pt/aed06/downloads/Slides/12-GrafosB.pdf · Grafos –Procura (1) • Algumas propriedades simples em grafos são fáceis de determinar,

AED (IST/DEEC) 52

Grafos – Exemplo de execução (DFS)

5

3

4

6

0 2

AED (IST/DEEC) 53

Grafos – Exemplo de execução (DFS)

5

3

7

4

6

0 2

Page 6: Grafos –Procura (1) - INESC-IDalgos.inesc-id.pt/aed06/downloads/Slides/12-GrafosB.pdf · Grafos –Procura (1) • Algumas propriedades simples em grafos são fáceis de determinar,

AED (IST/DEEC) 54

Grafos – Exemplo de execução (DFS)

5

3

1 7

4

6

0 2

AED (IST/DEEC) 55

Grafos – Exemplo de execução (DFS)

5

3

1 7

4

6

0 2

Page 7: Grafos –Procura (1) - INESC-IDalgos.inesc-id.pt/aed06/downloads/Slides/12-GrafosB.pdf · Grafos –Procura (1) • Algumas propriedades simples em grafos são fáceis de determinar,

AED (IST/DEEC) 56

Grafos – Exemplo de execução (DFS)

5

3

1 7

4

6

0 2

AED (IST/DEEC) 57

Grafos – Exemplo de execução (DFS)

5

3

1 7

4

6

20

Page 8: Grafos –Procura (1) - INESC-IDalgos.inesc-id.pt/aed06/downloads/Slides/12-GrafosB.pdf · Grafos –Procura (1) • Algumas propriedades simples em grafos são fáceis de determinar,

AED (IST/DEEC) 58

Grafos – Estratégia de Tremaux• Prop: Quando se usa a estratégia de exploração de labirintos de

Tremaux abrem-se todas as portas, acendem-se todas as luzes e termina-se no local de partida.

• Demonstração (esboço):– Prova-se por indução, mostrando primeiro ser verdade para um labirinto

com apenas uma encruzilhada e nenhum corredor – basta acender a única luz.

– Para um labirinto com mais que uma encruzilhada assume-se ser verdade para todos os labirintos menores com menos encruzilhadas.

– Bastará mostrar que se visitam todas as intersecções, dado que se abrem todas as portas de cada uma delas.

– Considere-se o primeiro corredor tomado.– O grafo fica dividido em dois sub-grafos: as intersecções que se visitam

sem regressar à origem; e as que só são visitáveis regressando ao ponto de partida.

AED (IST/DEEC) 59

Grafos – DFS• Notar que a estratégia de procura de Tremaux, mais não é

que procura em profundidade primeiro.• O algoritmo procede sempre abrindo uma porta e

afastando-se da origem, até que chega a um ponto em que não pode abrir mais portas, tendo então que recuar até ao último ponto onde deixou, pelo menos, uma porta por abrir.

• Se ao recuar nunca encontrar portas por abrir, acabaráregressando ao ponto de partida, dado que o fio que desenrolou no caminho descendente, lhe permite esse regresso.

Page 9: Grafos –Procura (1) - INESC-IDalgos.inesc-id.pt/aed06/downloads/Slides/12-GrafosB.pdf · Grafos –Procura (1) • Algumas propriedades simples em grafos são fáceis de determinar,

AED (IST/DEEC) 60

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

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

AED (IST/DEEC) 61

Grafos – Descrição da Implementação• 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.

Page 10: Grafos –Procura (1) - INESC-IDalgos.inesc-id.pt/aed06/downloads/Slides/12-GrafosB.pdf · Grafos –Procura (1) • Algumas propriedades simples em grafos são fáceis de determinar,

AED (IST/DEEC) 62

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

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

}

AED (IST/DEEC) 63

Grafos – Comparação• Na implementação por matriz de adjacências, para cada

vértice examinam-se todos as arestas que lhe são incidentes por ordem de numeração dos vértices de saída.– Avança sempre pelo primeiro (de índex mais baixo) que não tenha

sido visitado e lhe é adjacente.

• Na implementação por listas de adjacências, são imediatamente considerados os vértices adjacentes e a ordem de inspecção pode não coincidir com a numeração.– Avança sempre pelo primeiro da lista de adjacências que não tenha

sido ainda visitado.

Page 11: Grafos –Procura (1) - INESC-IDalgos.inesc-id.pt/aed06/downloads/Slides/12-GrafosB.pdf · Grafos –Procura (1) • Algumas propriedades simples em grafos são fáceis de determinar,

AED (IST/DEEC) 64

Grafos – ADT para procurastatic int cnt, pre[maxV];

void GRAPHsearch(Graph G){int v;cnt = 0;for (v = 0; v < G->V; v++)pre[v] = -1;

for (v = 0; v < G->V; v++)if (pre[v] == -1)search(G, EDGE(v, v));

}

GRAPH search é uma função ADT para procura genérica em grafos, realizando os seguintes passos:

1. Encontra um vértice não marcado.

2. Visita (e marca como visi-tados) todos os vértices no sub-grafo ligado a que o primeiro vértice pertence.

A função de procura não éespecificada a este nível de abstracção.

AED (IST/DEEC) 65

Grafos – Propriedades da procura

• Prop: Uma função de procura em grafos marca cada vértice do grafo se e só se a função de procura que usa marcar cada vértice do sub-grafo ligado que contiver o vértice inicial.– Demonstração trivial por indução no número de sub-grafos ligados

máximos.• Prop: A DFS num grafo representado por matriz de adja-

cências requer um tempo proporcional a V2.– Cada entrada da matriz de adjacências é inspeccionada uma só vez.

• Prop: A DFS num grafo representado por listas de adja-cências requer um tempo proporcional a V + E.– Inicialização proporcional a V, V chamadas recursivas e cada

elemento das listas de adjacências inspeccionado uma só vez.

Page 12: Grafos –Procura (1) - INESC-IDalgos.inesc-id.pt/aed06/downloads/Slides/12-GrafosB.pdf · Grafos –Procura (1) • Algumas propriedades simples em grafos são fáceis de determinar,

AED (IST/DEEC) 66

Grafos – Tabelas indexadas por vértices• Muitas funções sobre grafos requerem a existência, o uso

ou construção de tabelas indexadas pelos vértices dos grafos que processam.

• Tais tabelas são incluídas em vários níveis de abstracção– Como variáveis globais – ex: pre em DFS.– Na representação do próprio grafo – ex: grau de um vértice– Como parâmetros passados, fornecidos pelos próprios clientes –

ex: ao calcular alguma tabela que seja função dos vértices.

• A inicialização destas tabelas é tipicamente feita colocando todas as entradas a –1, por forma a poderem paralelamente ser usadas com a mesma utilidade da tabela pre, atrás apresentada.

AED (IST/DEEC) 67

Grafos - BFS• Se o objectivo for encontrar o caminho mais curto entre

um par de vértices, caso exista, a DFS não é muito útil.• A DFS poderá encontrar um caminho, mas não dá

garantias de que seja o mais curto, a menos que se determinem todos explicitamente para posterior avaliação.

• A procura em largura primeiro (“BFS – Breadth FirstSearch”) é baseada exactamente nesse objectivo.

• Quando temos mais que uma aresta para percorrer, escolhemos uma e guardamos as outras para explorar mais tarde.– Em DFS usamos uma pilha (LIFO) – avança para longe da entrada

enquanto puder.– Em BFS usamos um fila (FIFO) – só avança para longe da entrada

depois de ter investigado todos corredores que dela saem.

Page 13: Grafos –Procura (1) - INESC-IDalgos.inesc-id.pt/aed06/downloads/Slides/12-GrafosB.pdf · Grafos –Procura (1) • Algumas propriedades simples em grafos são fáceis de determinar,

AED (IST/DEEC) 68

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

# define bfs searchvoid 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.

AED (IST/DEEC) 69

Grafos – Exemplo de execução (BFS)

20

Page 14: Grafos –Procura (1) - INESC-IDalgos.inesc-id.pt/aed06/downloads/Slides/12-GrafosB.pdf · Grafos –Procura (1) • Algumas propriedades simples em grafos são fáceis de determinar,

AED (IST/DEEC) 70

Grafos – Exemplo de execução (BFS)

2

5

0

AED (IST/DEEC) 71

Grafos – Exemplo de execução (BFS)

2

5

7

0

Page 15: Grafos –Procura (1) - INESC-IDalgos.inesc-id.pt/aed06/downloads/Slides/12-GrafosB.pdf · Grafos –Procura (1) • Algumas propriedades simples em grafos são fáceis de determinar,

AED (IST/DEEC) 72

Grafos – Exemplo de execução (BFS)

6

2

5

7

0

AED (IST/DEEC) 73

Grafos – Exemplo de execução (BFS)

6

2

3

45

7

0

Page 16: Grafos –Procura (1) - INESC-IDalgos.inesc-id.pt/aed06/downloads/Slides/12-GrafosB.pdf · Grafos –Procura (1) • Algumas propriedades simples em grafos são fáceis de determinar,

AED (IST/DEEC) 74

Grafos – Exemplo de execução (BFS)

6

2

3

45

1 7

0

AED (IST/DEEC) 75

Grafos – Exemplo de execução (BFS)

6

2

3

45

1 7

0

Page 17: Grafos –Procura (1) - INESC-IDalgos.inesc-id.pt/aed06/downloads/Slides/12-GrafosB.pdf · Grafos –Procura (1) • Algumas propriedades simples em grafos são fáceis de determinar,

AED (IST/DEEC) 76

Grafos – Síntese da aula 4• Procura em grafos

– Analogia com a exploração de labirintos– Estratégia de Tremaux

• Procura em profundidade - DFS– Exemplo de execução– Implementação para matrizes de adjacências e por listas de adjacências– Comparação– Propriedades

• Procura em largura – BFS– Implementação por matrizes de adjacências– Exemplo de execução

AED (IST/DEEC) 77

Grafos – Propriedades da BFS (1)• Prop: Durante a BFS, os vértices entram e saem da fila

FIFO por ordem crescente da sua distância ao vértice inicial.

• Demonstração: Verifica-se uma propriedade mais forte: a fila consiste sempre de zero ou mais vértices distando kpassos do vértice inicial, seguidos de zero ou mais vértices distando k+1 passos dos vértice inicial, para algum valor de k.– É fácil provar esta propriedade por indução.

Page 18: Grafos –Procura (1) - INESC-IDalgos.inesc-id.pt/aed06/downloads/Slides/12-GrafosB.pdf · Grafos –Procura (1) • Algumas propriedades simples em grafos são fáceis de determinar,

AED (IST/DEEC) 78

Grafos – Propriedades da BFS (2)• Prop: A BFS visita todos os vértices e arestas de um grafo em

tempo proporcional a V2 para a representação por matriz de adjacências e proporcional a V+E para a representação por listas de adjacências.

• Demonstração:– Tal como em DFS, a implementação inspecciona completamente a

linha da matriz de adjacências ou a lista de pares adjacentes associada com cada vértice visitado.

– Basta mostrar que todos os vértices são visitados.– Todos os vértices que podem ser alcançados a partir do início estão

• (i) Na árvore criada pela procura, (ii) na fila, ou (iii) são alcançáveis a partir dos vértices que estão na fila.

• Todos os vértices se deslocam de (iii) para (ii) e depois para (i), sendo que em cada iteração do ciclo while (i) aumenta a sua cardinalidade.

AED (IST/DEEC) 79

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

void bfs(Graph G, Edge e){int v, w;QUEUEput(e); pre[e.w] = cnt++;while (!QUEUEempty()){e = QUEUEget();w = e.w; st[w] = e.v;for (v = 0; v < G->V; v++)if ((G->adj[w][v] == 1) && (pre[v] == -1)){QUEUEput(EDGE(w, v));pre[v] = cnt++;

}}

}

Guarda

apenas

vértices

por

visitar

Page 19: Grafos –Procura (1) - INESC-IDalgos.inesc-id.pt/aed06/downloads/Slides/12-GrafosB.pdf · Grafos –Procura (1) • Algumas propriedades simples em grafos são fáceis de determinar,

AED (IST/DEEC) 80

Grafos – Problemas que BFS resolve• Caminho mais curto entre v e w

– Tomar v como o vértice inicial e aplicar BFS até que pre[w]deixe de ser –1.

• Caminhos mais curtos a partir de um vértice fonte– Tomar o vértice fonte como inicial e executar a BFS até ao fim.

• Todos os caminhos mais curtos– Como a BFS permite encontrar o caminho mais curto de um

vértice inicial para todos os outros, basta aplicar BFS para cada um dos vértices do grafo dado como ponto de partida.

– A complexidade desta solução é cúbica no número de vértices para representação por matrizes de adjacências.

AED (IST/DEEC) 81

Grafos – Procura generalizada (1)• Tanto a DFS como a BFS são casos particulares de procura

generalizada em grafos.• A implementação da BFS que se apresentou, introduz a

pista essencial de resolução de qualquer outro mecanismo de procura.– Isto é, tudo depende da forma como se inserem novos vértices na

fila, assumindo que se retira sempre o vértice que encabeça a fila.• Substitua-se o conceito de fila pelo conceito de “franja”,

ou fronteira.– Todos os vértices que estão na franja são os não visitados,

candidatos à próxima visita.

Page 20: Grafos –Procura (1) - INESC-IDalgos.inesc-id.pt/aed06/downloads/Slides/12-GrafosB.pdf · Grafos –Procura (1) • Algumas propriedades simples em grafos são fáceis de determinar,

AED (IST/DEEC) 82

Grafos – Procura generalizada (GS) (2)• Assim sendo, a estratégia genérica de procura em grafos é

a seguinte:– Tomar um qualquer vértice como inicial e criar a “franja”

colocando lá esse vértice.– Enquanto a “franja” não estiver vazia

• Mover ao longo de uma aresta a partir da “franja”.• Se o vértice a que se chega não tiver sido visitado, visitá-lo a colocar

na “franja” todos os vértices não visitados que lhe são adjacentes.

• Esta estratégia garante que todos os vértices de um grafo ligado serão visitados.– Quando usamos uma pilha para modelar a “franja” temos DFS.– Quando usamos uma fila, temos BFS.

AED (IST/DEEC) 83

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

#define pfs searchvoid pfs(Graph G, Edge e){link t; int v, w;GQput(e); pre[e.w] = cnt++;while (!GQempty()){e = GQget();w = e.w; st[w] = e.v;for (t = G->adj[w]; t != NULL; t = t->next)if (pre[v = t->v] == -1){ GQput(EDGE(w, v)); pre[v] = cnt++;}

else if (st[v] == -1)GQupdate(EDGE(w, v));

}}

Page 21: Grafos –Procura (1) - INESC-IDalgos.inesc-id.pt/aed06/downloads/Slides/12-GrafosB.pdf · Grafos –Procura (1) • Algumas propriedades simples em grafos são fáceis de determinar,

AED (IST/DEEC) 84

Grafos – Propriedade da GS• Prop:

– Procura generalizada em grafos visita todos os vértices e arestas de um grafo num tempo proporcional a V2 para matrizes de adjacências e proporcional a V+E para listas de adjacências;

– mais, no pior caso, o tempo necessário para V inserções, Vremoções e E actualizações numa fila generalizada de tamanho V.

• Demonstração:– A primeira parte não depende da implementação da fila

generalizada, pelo que se aplica trivialmente.– O tempo extra explicitado decorre naturalmente da implementação

de uma fila generalizada.

AED (IST/DEEC) 85

Grafos – Árvores mínimas de suporte• Def: Uma árvore mínima de suporte (MST) de um grafo

ponderado é o conjunto de arestas ligando todos os vértices, tais que a soma dos pesos das arestas é, pelo menos, tão baixa quanto a soma dos pesos de qualquer outro conjunto de arestas ligando todos os vértices.

– Deverá ser evidente pela definição que estamos apenas interessados em conjuntos de arestas que constituam uma árvore de suporte.

– Como se mostra que a definição assim o estabelece?

Page 22: Grafos –Procura (1) - INESC-IDalgos.inesc-id.pt/aed06/downloads/Slides/12-GrafosB.pdf · Grafos –Procura (1) • Algumas propriedades simples em grafos são fáceis de determinar,

AED (IST/DEEC) 86

Grafos – Representação de grafos ponderados (1)

• A representação dos pesos associados às arestas em grafos ponderados pode ser feita por:– A matriz de adjacências deixa de ser booleana, para passar a conter

o valor associado às arestas – requer sentinela para vértices não adjacentes.

– Cada elemento da lista de adjacências passa a conter um campo adicional com o peso da aresta, para além do campo identificador do vértice.

– No caso da representação das arestas ter-se-á que adicionar um campo para o peso.• typedef struct {int v, int w, double wt;} Edge;• Edge EDGE(int, int, double);• Estas definições são incluídas no ficheiro GRAPH.h anteriormente

introduzido.

AED (IST/DEEC) 87

Grafos - Implementação de ADT(matrizes de adjacência)

#include <stdlib.h>#include “GRAPH.h”struct graph {int V; int E; double **adj;};Graph GRAPHinit(int V){ Graph G = malloc(sizeof (*G));

G->V = V; G->E = 0;G->adj = MATRIXdouble(V, V, maxWT);return G;

}void GRAPHinsertE(Graph G, Edge e){ if (G->adj[e.v][e.w] == maxWT) G->E++;

G->adj[e.v][e.w] = e.wt;G->adj[e.w][e.v] = e.wt;

}

Grafos

Ponderados

Page 23: Grafos –Procura (1) - INESC-IDalgos.inesc-id.pt/aed06/downloads/Slides/12-GrafosB.pdf · Grafos –Procura (1) • Algumas propriedades simples em grafos são fáceis de determinar,

AED (IST/DEEC) 88

Grafos – Propriedades das MST (1)• Prop. 1: Dada uma divisão de vértices de um grafo em dois

conjuntos, qualquer árvore mínima de suporte (MST) desse grafo contém uma aresta de menor peso que liga um vértice de um dos conjuntos a algum dos vértices do outro.

• Demonstração:– Por redução ao absurdo.– Suponha-se que não há ou que não é de menor peso.– Se não existir, não é uma árvore de suporte.– Se não for de menor peso, então seja s a aresta de menor peso que

liga vértices dos dois conjuntos. Esta aresta não pertence à MST.– Adicione-se a aresta s. O grafo obtido possui agora um ciclo e esse

ciclo contém também a aresta t que liga os dois conjuntos.– Retirando a aresta t obtém-se uma MST de menor peso. Não é?

AED (IST/DEEC) 89

Grafos – Exemplo (1)

1

4

2

76

5 8

3

G1

4

2

76

5 8

3

G

Aresta mais curta ligando os vértices amarelos aos verdes.

Page 24: Grafos –Procura (1) - INESC-IDalgos.inesc-id.pt/aed06/downloads/Slides/12-GrafosB.pdf · Grafos –Procura (1) • Algumas propriedades simples em grafos são fáceis de determinar,

AED (IST/DEEC) 90

Grafos – Propriedades das MST (2)• Prop. 2: Dado um grafo G, considere-se o grafo G’ que se

obtém adicionando uma aresta e a G. Adicionar e à MST de G e retirar a maior aresta do ciclo assim criado, gera a MST de G’.

• Demonstração:– Se e é maior que todos as outras arestas do ciclo, não pode

pertencer à MST de G’ (ver propriedade anterior): retirando e de tal MST partiria o grafo em dois e e não seria a mais curta aresta entre essas duas partes, porque alguma outra aresta do ciclo fazessa ligação e possui menor peso.

– Caso contrário, seja t a maior aresta do ciclo criado com a adição de e. Retirando t à MST original gera duas partes em que todas as restantes arestas são menores que t.

– Logo, a menor aresta que liga essas duas partes é a aresta e.

AED (IST/DEEC) 91

Grafos – Exemplo (2)

1

4

2

76

58

3

G

Nova aresta

CicloMaior aresta do ciclo

1

4

2

76

58

3

G

Árvore Mínima de Suporte

As arestas que não pertencem à árvore mínima de suporte são as de maior peso em algum ciclo do grafo original.

Page 25: Grafos –Procura (1) - INESC-IDalgos.inesc-id.pt/aed06/downloads/Slides/12-GrafosB.pdf · Grafos –Procura (1) • Algumas propriedades simples em grafos são fáceis de determinar,

AED (IST/DEEC) 92

Grafos – Uma solução para a MST• Ideia 1: Construir a árvore mínima de suporte adicionando

arestas, tais que cada aresta adicionada é a de menor peso de todas as que ligam um vértice que já está na árvore a um outro que ainda não esteja.

• Este método é conhecido como o Algoritmo de Algoritmo de PrimPrim.

• Prop: O algoritmo de Prim calcula correctamente a MST.

• Demonstração: Aplicar a Prop. 1, usando os vértices já na árvore parcial como o primeiro conjunto e os que não pertencem a essa árvore como o segundo conjunto.

AED (IST/DEEC) 93

Grafos – Outra solução para a MST• Ideia 2: Construir a árvore mínima de suporte adicionando

arestas por ordem crescente do seu valor, desde que a nova aresta não forme um ciclo, parando assim que se tiverem adicionado V-1 arestas.

• Este método é conhecido com o Algoritmo de Algoritmo de KruskalKruskal.• Prop: O algoritmo de Kruskal calcula correctamente a MST.• Demonstração (esboço):

– Mostra-se por indução que o método constrói uma floresta de sub-MST’s.

– Sempre que se adiciona uma aresta que feche um ciclo, só pode ser a maior desse ciclo – Prop. 2.

– Caso contrário, a aresta adicionada liga duas árvores e é a menor a fazer essa ligação – Prop. 1.

Page 26: Grafos –Procura (1) - INESC-IDalgos.inesc-id.pt/aed06/downloads/Slides/12-GrafosB.pdf · Grafos –Procura (1) • Algumas propriedades simples em grafos são fáceis de determinar,

AED (IST/DEEC) 94

Grafos – Outra mais...• Ideia 3: Começar por ligar cada vértice ao seu vizinho mais

próximo, criando, no máximo, V/2 árvores. Depois, ligar cada árvore à outra árvore que lhe estiver mais próxima. Etc.

• Este método é conhecido como o Algoritmo de Algoritmo de BoruvkaBoruvka.

• Prop: O algoritmo de Boruvka calcula correctamente a MST.

• Demonstração: Cada aresta escolhida é a mais pequena que liga dois conjuntos disjuntos – Prop. 1.

AED (IST/DEEC) 95

Grafos – Síntese da aula 5• Procura em largura

– Propriedades– Implementação alternativa para matrizes de adjacências

• Procura generalizada em grafos– Descrição– Implementação– Propriedades

• Árvores de suporte mínimas – MST– Representação e implementação de ADT para grafos ponderados– Propriedades das MST’s – exemplos– Propostas de solução para cálculo de MST’s

Page 27: Grafos –Procura (1) - INESC-IDalgos.inesc-id.pt/aed06/downloads/Slides/12-GrafosB.pdf · Grafos –Procura (1) • Algumas propriedades simples em grafos são fáceis de determinar,

AED (IST/DEEC) 96

Grafos – Alg. de Prim (1)(Implementação)

• É o algoritmo mais simples de implementar e é a escolha acertada para grafos densos.

• Constrói-se a árvore adicionando o vértice que estiver mais próximo da árvore já construída.

• A definição do método aponta para uma implementação de força bruta, que não é aconselhável para que seja eficiente.

• Através da definição de uma estrutura de dados complementar adequada é possível evitar cálculos excessivos.

• Precisamos– Indicação do vértice pai, para cada vértice já na árvore.– Para cada vértice fora da árvore, indicação de qual o vértice na árvore

que lhe está mais próximo.– Para cada vértice fora da árvore, qual a distância ao vértice da árvore

mais próximo.

AED (IST/DEEC) 97

Grafos – Alg. de Prim (2)(Implementação)

• A implementação mais simples daquele conjunto de dados éatravés de uma tabela indexada pelos vértices.

• Pode-se usar uma estrutura para representar toda a informação identificada acima. Vamos usar tabelas independentes para maior clareza e generalidade.

• Para determinar o próximo vértice a adicionar, inspeccionam-se todos os vértices fora da árvore, usando cada um como um índice para a terceira tabela com o objectivo de determinar a suadistância à árvore e saber qual o mais próximo.

• Quando se adiciona um vértice, v, examina-se cada uma das suas arestas v-w, e se w não estiver na árvore actualiza-se a sua distância à árvore, caso v-w tenha um peso inferior à presente distância de w à árvore.

Page 28: Grafos –Procura (1) - INESC-IDalgos.inesc-id.pt/aed06/downloads/Slides/12-GrafosB.pdf · Grafos –Procura (1) • Algumas propriedades simples em grafos são fáceis de determinar,

AED (IST/DEEC) 98

Grafos – Alg. de Prim (3)(Implementação)

static int fr[maxV];#define P G->adj[v][w]void GRAPHmstV(Graph G, int st[], double val[]){ int v, w, min;for (v = 0; v < G->V; v++){ st[v] = -1; fr[v] = v; val[v] = maxWT;}

min = 0; st[0] = 0; val[G->V] = maxWT;for (v = 0; min != G->V; st[v = min] = fr[v])for (w = 0, min = G->V; w < G->V; w++)if (st[w] == -1){ if (P < val[w])

{ val[w] = P; fr[w] = v;}if (val[w] < val[min]) min = w;

}}

fr - frente (franja) provisória de cada nó

st - aresta final na MST

val - distância pro-visória do nó à MST

min - nó à menor distância da MST

AED (IST/DEEC) 99

Grafos – Exemplo de execução (1)val[*] ← maxWTCiclo for interior:v ← 0, st[0] ← 00-0 – min ← V

st[0] == -1 X ←→ já na árvore0-1 – adj[0][1] < val[1] ü

val[1] ← 4, fr[1] ← 0val[1] < val[min] ümin ← 1

0-2 – adj[0][2] < val[2] X ← → não adjacentes0-3 – adj[0][3] < val[3] ü

val[3] ← 3, fr[3] ← 0val[3] < val[min] ümin ← 3

0-4;5;6;7 – não adjacentesv ← min, st[3] ← fr[3]

0

3

1

65

4 7

2

G

3

4

5

2

6

6

7

3

7

3

4

Page 29: Grafos –Procura (1) - INESC-IDalgos.inesc-id.pt/aed06/downloads/Slides/12-GrafosB.pdf · Grafos –Procura (1) • Algumas propriedades simples em grafos são fáceis de determinar,

AED (IST/DEEC) 100

Grafos – Exemplo de execução (2)Ciclo for interior:v ← min = 3, st[3] ← fr[3]3-0 – min ← V

já na árvore3-1 – adj[3][1] < val[1] X

val[1] < val[min] ümin ← 1

3-2 – adj[3][2] < val[2] üval[2] ← 6, fr[2] ← 3

val[2] < val[min] X3-3 – já na árvore3-4 – adj[3][4] < val[4] ü

val[4] ← 2, fr[4] ← 3val[4] < val[min] ümin ← 4

3-5;6;7 – não adjacentesv ← min, st[4] ← fr[4]

0

3

1

65

4 7

2

G

3

4

5

2

6

6

7

3

7

3

4

AED (IST/DEEC) 101

Grafos – Exemplo de execução (3)

0

3

1

65

4 7

2

G

3

4

5

2

6

6

7

3

7

3

4

0

3

1

65

4 7

2

G

3

4

5

2

6

6

7

3

7

3

4

0

3

1

65

4 7

2

G

3

4

5

2

6

6

7

3

7

3

4

0

3

1

65

4 7

2

G

3

4

5

2

6

6

7

3

7

3

4

0

3

1

65

4 7

2

G

3

4

5

2

6

6

7

3

7

3

4

Page 30: Grafos –Procura (1) - INESC-IDalgos.inesc-id.pt/aed06/downloads/Slides/12-GrafosB.pdf · Grafos –Procura (1) • Algumas propriedades simples em grafos são fáceis de determinar,

AED (IST/DEEC) 102

Grafos – Alg. de Prim(Propriedade)

• Prop: Com o algoritmo de Prim, pode-se determinar a MST de um grafo denso em tempo linear.

• Demonstração:– A simples observação do código permite concluir que o tempo de

execução é proporcional a V2, pelo que é linear para grafos densos.– Cada vez que se visita um vértice, uma passagem pelos vértices fora da

árvore serve o objectivo duplo de actualizar a distância mínima de cada vértice à árvore e de determinar qual está mais próximo. i.e., qual o próximo a visitar.

• Descrição:– Deslocar a aresta mais pequena da franja para a árvore. Visitar o

vértice a que conduz e colocar na franja todas as arestas que dele saem para vértices não visitados, substituindo a aresta mais comprida quandoduas arestas da franja apontam para o mesmo vértice.

AED (IST/DEEC) 103

Grafos – Alg. de Kruskal (1)(Implementação)

• O algoritmo de Prim adiciona uma aresta de cada vez a uma única árvore em construção.

• O algoritmo de Kruskal também adiciona uma aresta de cada vez, mas possui várias pequenas árvores que se vão agregando à medida que a execução evolui.

• Tem início numa floresta de V árvores – uma por vértice – e termina quando apenas existe uma árvore – a árvore mínima de suporte.

• Há que ordenar as arestas com um qualquer algoritmo de ordenação e posteriormente utilizar um dos algoritmos discutidos para o problema da conectividade.

Page 31: Grafos –Procura (1) - INESC-IDalgos.inesc-id.pt/aed06/downloads/Slides/12-GrafosB.pdf · Grafos –Procura (1) • Algumas propriedades simples em grafos são fáceis de determinar,

AED (IST/DEEC) 104

Grafos – Alg. de Kruskal (2)(Implementação)

void GRAPHmstE(Graph G, Edge mst[]){ int i, k; Edge a[maxE];int E = GRAPHedges(a, G);sort(a, 0, E-1);UFinit(G->V);for (i = 0, k = 0; i < E && k < G->V-1; i++)if (!UFfind(a[i].v, a[i].w)){UFunion(a[i].v, a[i].w);mst[k++] = a[i];

}}

1. Ordenação do vector de arestas, a.

2.Criação de V conjuntos com um vértice cada.

3. Se a menor aresta ainda não incluída não ligar dois pares que jáestão ligados, in-clui-la na árvore.

AED (IST/DEEC) 105

Grafos – Exemplo de execução (1)Ordenação das arestas:<(3,4); (2,7); (0,3); (4,6); (0,1); (6,7);(1,3); (2,3); (4,5); (5,6); (2,6)>

Partição inicial:{{0}, {1}, {2}, {3}, {4}, {5}, {6}, {7}}

i ← 0; k ← 0a[i].v = 3; a[i].w = 4{{0}, {1}, {2}, {3, 4}, {5}, {6}, {7}}mst[k] ← (3,4)k ← 1

i ← 1a[i].v = 2; a[i].w = 7{{0}, {1}, {2, 7}, {3, 4}, {5}, {6}}mst[k] ← (2,7)k ← 2

0

3

1

65

4 7

2

G

3

4

5

2

6

6

7

3

7

3

4

Page 32: Grafos –Procura (1) - INESC-IDalgos.inesc-id.pt/aed06/downloads/Slides/12-GrafosB.pdf · Grafos –Procura (1) • Algumas propriedades simples em grafos são fáceis de determinar,

AED (IST/DEEC) 106

Grafos – Exemplo de execução (2)

0

3

1

65

4 7

2

G

3

4

5

2

6

6

7

3

7

3

4

0

3

1

65

4 7

2

G

3

4

5

2

6

6

7

3

7

3

4

0

3

1

65

4 7

2

G

3

4

5

2

6

6

7

3

7

3

4

0

3

1

65

4 7

2

G

3

4

5

2

6

6

7

3

7

3

4

0

3

1

65

4 7

2

G

3

4

5

2

6

6

7

3

7

3

4

AED (IST/DEEC) 107

Grafos – Alg. de Kruskal(Propriedade)

• Prop: O algoritmo de Kruskal calcula a MST de um grafo num tempo proporcional a E lg E.

• Demonstração:– Esta propriedade é consequência do facto de o tempo de execução

incluir uma ordenação de E arestas seguida de E operações procura e V-1 operações de união.

• PORQUÊ?– Se utilizarmos os melhores algoritmos para cada uma das

operações identificadas, tais como “mergesort” para a ordenação e procura-união ponderada com “halving” para a conectividade, o custo da ordenação domina.

Page 33: Grafos –Procura (1) - INESC-IDalgos.inesc-id.pt/aed06/downloads/Slides/12-GrafosB.pdf · Grafos –Procura (1) • Algumas propriedades simples em grafos são fáceis de determinar,

AED (IST/DEEC) 108

Grafos – Alg. de Boruvka (1)(Implementação)

• Tal como o algoritmo de Kruskal, este algoritmo constrói a MST adicionando arestas a uma floresta de sub-árvores, todas elas MST’s.

• A diferença reside no facto de a adição se processar em fases, em que para cada fase se adicionam várias arestas.

• Em cada fase determinam-se as arestas mais curtas que ligam cada sub-árvore com outra.

• Em seguida adicionam-se todas essas arestas.

• Mais uma vez, as funções elementares procura e união serão cruciais para uma implementação eficiente.

AED (IST/DEEC) 109

Grafos – Alg. de Boruvka (2)(Implementação)

• Torna-se necessário permitir que a função de procura seja ligeiramente alterada para que associe um índice com cada uma das sub-árvores.

• Assim sendo, mantém-se uma tabela indexada por vértices indicando, para cada sub-árvore, qual a sua vizinha mais próxima.

• De seguida executam-se as seguintes operações em cada aresta do grafo:– Se ligar dois vértices na mesma árvore, ignorá-la.– Caso contrário, verificar as distâncias do vizinho mais próximo de cada

uma das árvores, actualizando-se se apropriado.

Page 34: Grafos –Procura (1) - INESC-IDalgos.inesc-id.pt/aed06/downloads/Slides/12-GrafosB.pdf · Grafos –Procura (1) • Algumas propriedades simples em grafos são fáceis de determinar,

AED (IST/DEEC) 110

Grafos – Alg. de Boruvka (3)(Implementação)

• Depois de fazer esta avaliação, a tabela dos vizinhos mais próximos contém a informação necessária para ligar sub-árvores.

• Para índice dos vértices faz-se uma união, ligando os seus vizinhos mais próximos.

• Em seguida, retiram-se as arestas mais longas que ligam outros pares de vértices nos pares de árvores MST ligadas.

AED (IST/DEEC) 111

Grafos – Alg. de Boruvka (4)(Implementação)

Edge nn[maxV];void GRAPHmstE(Graph G, Edge mst[]){ int h, i, j, k, v, w, N;Edge e, a[maxE];int E = GRAPHedges(a, G);for (UFinit(G->V); E != 0; E = N){for (k = 0; k < G->V; k++)nn[k] = EDGE(G->V, G->V, 1.0);

for (h = 0, N = 0; h < E; h++){ i = find(a[h].v); j = find(a[h].w);if (i == j) continue;if (a[h].wt < nn[i].wt) nn[i] = a[h];...

1. Tabela dos vizi-nhos mais próximos, nn.

2. Criação de tabela de arestas, a.

3. Inicialização da distância aos vizi-nhos.

4. Determinação da sub-árvore a que per-tencem as arestas.

5. Cálculo do vizi-nho mais próximo.

Page 35: Grafos –Procura (1) - INESC-IDalgos.inesc-id.pt/aed06/downloads/Slides/12-GrafosB.pdf · Grafos –Procura (1) • Algumas propriedades simples em grafos são fáceis de determinar,

AED (IST/DEEC) 112

Grafos – Alg. de Boruvka (5)(Implementação)

...if (a[h].wt < nn[j].wt) nn[j] = a[h];a[N++] = a[h];

}for (k = 0; k < G->V; k++){e = nn[k]; v = e.v; w = e.w;if ((v != G->V) && !UFfind(v, w)){ UFunion(v, w); mst[k] = e; }

}}

}

5. (continuação)

6. Deita fora de a as arestas que ligam vértices na mesma sub-árvore!!!

7. Funde duas sub-árvores, se ainda não associadas, usando a aresta mais curta, e.

AED (IST/DEEC) 113

Grafos – Exemplo de execução (1)Chamada a GRAPHedges produza =[(0,1,4);(0,3,3);(1,3,5);(2,3,6);(2,6,7);

(2,7,3);(3,4,2);(4,5,6);(4,6,3);(5,6,7); (6,7,4)]; E ← 11

Ciclo for exteriorUFinit ↔ [0, 1, 2, 3, 4, 5, 6, 7]Primeiro ciclo for produznn ← [8 vezes (8,8,7)] (custos não normalizados)

Segundo ciclo forh ← 0; N ← 0i ← 0; j ← 1 (diferentes conjuntos)a[h].wt < nn[i].wt ünn[0] ← (0,1,4)

a[h].wt < nn[j].wt ünn[1] ← (0,1,4)

a[N] ← a[h]; N ← 1h ← 1

0

3

1

65

4 7

2

G

3

4

5

2

6

6

7

3

7

3

4

Page 36: Grafos –Procura (1) - INESC-IDalgos.inesc-id.pt/aed06/downloads/Slides/12-GrafosB.pdf · Grafos –Procura (1) • Algumas propriedades simples em grafos são fáceis de determinar,

AED (IST/DEEC) 114

Grafos – Exemplo de execução (2)h ← 1i ← 0; j ← 3 (diferentes conjuntos)a[h].wt < nn[i].wt ünn[0] ←(0,3,3)

a[h].wt < nn[j].wt ünn[j] ←(0,3,3)

a[N] ← a[h]; N ← 2h ← 2i ← 1; j ← 3 (diferentes conjuntos)a[h].wt < nn[i].wt Xa[h].wt < nn[j].wt Xa[N] ← a[h]; N ← 3

...No final do segundo ciclo for tem-senn = [ (0,3,3);(0,1,4);(2,7,3);(3,4,2);

(3,4,2);(4,5,6);(4,6,3);(2,7,3)]N = 11;

0

3

1

65

4 7

2

G

3

4

5

2

6

6

7

3

7

3

4

AED (IST/DEEC) 115

Grafos – Exemplo de execução (3)Terceiro ciclo fork ← 0e ← nn[k]; v ← 0; w ← 3v != 8 && !UFfind(0,3) üUFunion(0,3); mst[k] ← (0,3,3)

k ← 1e ← nn[k]; v ← 0; w ← 1v != 8 && !UFfind(0,1) üUFunion(0,1); mst[k] ← (0,1,4)

k ← 2e ← nn[k]; v ← 2; w ← 7v != 8 && !UFfind(2,7) üUFunion(2,7); mst[k] ← (2,7,3)

k ← 3e ← nn[k]; v ← 3; w ← 4v != 8 && !UFfind(3,4) üUFunion(3,4); mst[k] ← (3,4,2)

0

3

1

65

4 7

2

G

3

4

5

2

6

6

7

3

7

3

4

Page 37: Grafos –Procura (1) - INESC-IDalgos.inesc-id.pt/aed06/downloads/Slides/12-GrafosB.pdf · Grafos –Procura (1) • Algumas propriedades simples em grafos são fáceis de determinar,

AED (IST/DEEC) 116

Grafos – Exemplo de execução (4)k ← 4e ← nn[k]; v ← 3; w ← 4v != 8 && !UFfind(3,4) Xk ← 5e ← nn[k]; v ← 4; w ← 5v != 8 && !UFfind(4,5) üUFunion(4,5); mst[k] ← (4,5,6)

k ← 6e ← nn[k]; v ← 4; w ← 6v != 8 && !UFfind(4,6) üUFunion(4,6); mst[k] ← (4,6,3)

k ← 7e ← nn[k]; v ← 2; w ← 7v != 8 && !UFfind(2,7) X

Fim do 3º ciclo for - Retorno ao ciclo for externo

0

3

1

65

4 7

2

G

3

4

5

2

6

6

7

3

7

3

4

AED (IST/DEEC) 117

Grafos – Exemplo de execução (5)

0

3

1

65

4 7

2

G

3

4

5

2

6

6

7

3

7

3

4

No final desta iteração existem 2 sub-árvoresSejam 1* e 2* os seus identificadoresE ← N == 11Primeiro ciclo for produznn ← [8 vezes (8,8,7)] (custos não normalizados)

Segundo ciclo forN ← 0 h ← 0; i ← 1*; j ← 1* (mesmo conjunto)h ← 1: i ← 1*; j ← 1* (mesmo conjunto)h ← 2: i ← 1*; j ← 1* (mesmo conjunto)h ← 3: i ← 2*; j ← 1* (diferentes conjuntos)a[h].wt < nn[i].wt ünn[2*] ←(2,3,6)a[h].wt < nn[j].wt ünn[1*] ←(2,3,6)a[N] ← a[h]; N ← 1 (arestas fora...)

Page 38: Grafos –Procura (1) - INESC-IDalgos.inesc-id.pt/aed06/downloads/Slides/12-GrafosB.pdf · Grafos –Procura (1) • Algumas propriedades simples em grafos são fáceis de determinar,

AED (IST/DEEC) 118

Grafos – Exemplo de execução (6)

0

3

1

65

4 7

2

G

3

4

5

2

6

6

7

3

7

3

4

h ← 4: i ← 2*; j ← 1* (diferentes conjuntos)a[h].wt < nn[i].wt Xa[h].wt < nn[j].wt Xa[N] ← a[h]; N ← 2h ← 5: i ← 2*; j ← 2* (mesmo conjunto)h ← 6: i ← 1*; j ← 1* (mesmo conjunto)h ← 7: i ← 1*; j ← 1* (mesmo conjunto)h ← 8: i ← 1*; j ← 1* (mesmo conjunto)h ← 9: i ← 1*; j ← 1* (mesmo conjunto)h ← 10: i ← 1*; j ← 2* (diferentes conjuntos)a[h].wt < nn[i].wt ünn[1*] ← (6,7,4)a[h].wt < nn[j].wt ünn[2*] ← (6,7,4)a[N] ← a[h]; N ← 3

AED (IST/DEEC) 119

Grafos – Exemplo de execução (7)

0

3

1

65

4 7

2

G

3

4

5

2

6

6

7

3

7

3

4

No final do segundo ciclo for tem-senn = [ 6 vezes (8,8,7) e 2 vezes (6,7,4)]Porquê?...a = [(2,3,6);(2,6,7);(6,7,4); ...]Porquê?N = 3 Terceiro ciclo fork ← para alguns valorese ← nn[k]; v ← 8; w ← 8v != 8 && !UFfind(0,3) X

...k ← para outro – qual?e ← nn[k]; v ← 6; w ← 7v != 8 && !UFfind(6,7) üUFunion(6,7); mst[k] ← (6,7,4)

...

Page 39: Grafos –Procura (1) - INESC-IDalgos.inesc-id.pt/aed06/downloads/Slides/12-GrafosB.pdf · Grafos –Procura (1) • Algumas propriedades simples em grafos são fáceis de determinar,

AED (IST/DEEC) 120

Grafos – Alg. de Boruvka(Propriedade)

• Prop: O algoritmo de Boruvka calcula a MST de um grafo num tempo inferior a E lg V lg* V.

• Demonstração:– Dado que o número de sub-árvores na floresta se reduz, pelo

menos, a metade em cada fase, o número de fases não é maior que lg V.

– O tempo de cada fase é, no máximo, proporcional ao custo de Eoperações de procura.

• Observações:– A expressão acima é bastante conservadora, na medida em que ignora a

redução de arestas ocorrida em cada fase.– Concebido em 1926 e desde os anos 80 a base para o desenvolvimento de

algoritmos eficientes para MST’s, assim como para algoritmos paralelos

AED (IST/DEEC) 121

Grafos – Comparação dos métodos (1)Algoritmo Pior caso Comentário

Prim (padrão) V2 Óptimo para grafos densosPrim (com PFS)* E lg V Pior caso conservadorKruskal (padrão) E lg E Custo de ordenação dominaKruskal (ord. parcial)* E + X lg V Depende da aresta maiorBoruvka E lg V Pior caso muito conservador

* Variantes não discutidas* PFS – Priority-First Search* ord. parcial – evitar ordenar todas as arestas, dado que podem não ser

necessárias (via heapsort, por exemplo).

Page 40: Grafos –Procura (1) - INESC-IDalgos.inesc-id.pt/aed06/downloads/Slides/12-GrafosB.pdf · Grafos –Procura (1) • Algumas propriedades simples em grafos são fáceis de determinar,

AED (IST/DEEC) 122

Grafos – Comparação dos métodos (2)E V H P K K* e/E B e/E

Densidade - 220000 10000 22 9 11 1.00 14 3.3050000 25000 69 24 31 1.00 38 3.30

100000 50000 169 49 66 1.00 89 3.80200000 100000 389 108 142 1.00 189 3.60

Densidade - 2020000 1000 5 20 6 5 0.20 9 4.2050000 2500 12 130 16 15 0.28 25 4.60

100000 5000 27 34 31 0.30 55 4.60200000 10000 61 73 68 0.35 123 5.00

Densidade - 100100000 1000 17 24 30 19 0.06 51 4.60250000 2500 44 130 81 53 0.05 143 5.20500000 5000 93 181 113 0.06 312 5.50

1000000 10000 204 377 218 0.06 658 5.60Densidade - V/2.5

400000 1000 60 20 137 78 0.02 188 4.502500000 2500 409 128 1056 687 0.01 1472 5.50

H Prim - listas de adjacências/heapsort K* Kruskal com ordenação parcialP Prim - matriz de adjacências B BoruvkaK Kruskal e/E Arestas examinadas (uniões)

AED (IST/DEEC) 123

Grafos – Síntese da aula 6• Algoritmo de Prim

– Descrição– Implementação– Exemplo de execução– Análise de eficiência

• Algoritmo de Kruskal– Descrição– Implementação– Exemplo de execução– Análise de eficiência

• Algoritmo de Boruvka– Descrição; Implementação; Exemplo de execução; Análise de eficiência

• Comparação dos três métodos