Algoritmo de Kruskal. Algoritmo de Kruskal. Floresta geradora 26. Subfloresta S 20.3

Documentos relacionados
Demonstração. Relação invariante chave. Implementações do algoritmo de Prim. Implementação grosseira

AULA 22. Algoritmos p.793/823

Conjuntos disjuntos dinâmicos

Melhores momentos AULA 22. Algoritmos p.824/855

Projeto e Análise de Algoritmos

Grafos. Exemplo de árvore geradora mínima. Notas. Notas. Notas. Notas. Árvores espalhadas mínimas. Como construir uma árvore geradora miníma

Melhores momentos AULAS 1-8

Aula 19 Conjuntos disjuntos (Union-find)

Algoritmo Floyd-Warshall. Problema dos caminhos mínimos entre todos os pares. Programação dinâmica

Melhores momentos AULA 14

Análise de Algoritmos

INF 1010 Estruturas de Dados Avançadas

Calculando distâncias

Melhores momentos AULA 1

Sub-grafo. Árvore Geradora Mínima

Na última aula... Procurando um caminho. Certificados. Procurando um caminho

Na última aula... Algoritmos em Grafos 1º sem / 80

Na última aula... Procurando um caminho. Certicados. Problema: dados um digrafo G e dois vértices s e t decidir se existe um caminho de s a t

Na última aula... Algoritmos em Grafos 1º sem / 1

INF 1010 Estruturas de Dados Avançadas

Melhores momentos AULA 12

Estruturas de Dados para Conjuntos Disjuntos. Estruturas de dados para conjuntos disjuntos

Melhores momentos AULA 4

Melhores momentos AULA 5

Algoritmos e Estruturas de Dados LEE 2015/16. Teoria de Grafos e Algoritmos em Grafos 2ª Parte

Algoritmos e Estruturas de Dados LEE 2013/14. Teoria de Grafos e Algoritmos em Grafos 2ª Parte

Representações de Grafos

Grafos Procura (1) AED (IST/DEEC) 44. Grafos Procura (2) Procurar em grafos é equivalente a percorrer labirintos

Estruturas de dados para conjuntos disjuntos. Estruturas de Dados para Conjuntos Disjuntos. Estruturas de dados para conjuntos disjuntos

INF 1010 Estruturas de Dados Avançadas

Melhores momentos AULA 15

Árvore Geradora Mínima

2006/2007 Análise e Síntese de Algoritmos 2

MAC328 Algoritmos em grafos (14/5/2004) Componentes fortemente conexos

AULA 14. Problema. Melhores momentos. Simulação. Simulação. Simulação. Simulação

Melhores momentos AULA 4

Estruturas de Dados para Conjuntos Disjuntos: Union-find Letícia Rodrigues Bueno

Otimização em Grafos

Grafos: árvores geradoras mínimas. Graça Nunes

Análise e Síntese de Algoritmos. Algoritmos em Grafos CLRS, Cap. 22

Grafos - Representação

Grafos: componentes fortemente conexos, árvores geradoras mínimas

Acessibilidade e Fecho Transitivo de Grafos Dirigidos

AULA 4. Procurando um caminho. Melhores momentos. Certicados. Certicado de inexistência

Grafos Msc. Daniele Carvalho Oliveira. Doutoranda em Computação UFU Mestre em Computação - UFU Bacharel em Computação - UFJF 1

Algoritmo de Prim Wikipédia, a enciclopédia livre

UNIVERSIDADE DE SÃO PAULO INSTITUTO DE CIÊNCIAS MATEMÁTICAS E DE COMPUTAÇÃO Departamento de Ciências de Computação

Árvores Árvores Geradoras de Custo Mínimo 0/16

Otimização em Grafos

INF1007: Programação 2 6 Ordenação de Vetores. 01/10/2015 (c) Dept. Informática - PUC-Rio 1

Aula 08. Estruturas de dados Árvore e Grafo

Projeto e Análise de Algoritmos. Método Guloso

Teoria dos Grafos Aula 5

Grafos tipo abstrato de dados

O estudo utilizando apenas este material não é suficiente para o entendimento do conteúdo. Recomendamos a leitura das referências no final deste

Prova Didática Grafos: Árvores Geradoras e Caminhos Mínimos, Análise de Complexidade

AED Algoritmos e Estruturas de Dados LEEC /2007. Teoria de Grafos e Algoritmos em Grafos

PAA-DCC-UFAM. Grafos. Universidade Federal do Amazonas Departamento de Eletrônica e Computação

INF 1010 Estruturas de Dados Avançadas

Análise e Síntese de Algoritmos

Árvores Binárias e Busca. Jeane Melo

Problema da Árvore Geradora Mínima (The Minimum Spanning Tree Problem-MST)

Análise de Algoritmos

SSC 0721 Teste e Inspeção de Software

INF 1010 Estruturas de Dados Avançadas. Árvores binárias

Implementação do TAD DiGrafo Ponderado usando Matriz de Adjacência. Profa. Dra. Denise Guliato FACOM - UFU

Análise e Síntese de Algoritmos. Caminhos Mais Curtos para Todos os Pares CLRS, Cap. 25

Grafos parte 2. Percorrendo um grafo. Correção. Eficiência. Percorrendo um Grafo. Percorrendo um Grafo. Percorrendo um Grafo

Tipo de Dados em Linguagem C

CAL ( ) MIEIC/FEUP Estruturas de Dados ( )

Grafos Parte 1. Aleardo Manacero Jr.

Análise e Síntese de Algoritmos

INSTITUTO SUPERIOR TÉCNICO Análise e Síntese de Algoritmos. RESOLUÇÃO DA REPESCAGEM DO 1 o TESTE

Árvores & Árvores Binárias

Ciclos hamiltonianos e o problema do caixeiro viajante

Teoria dos Grafos. Edson Prestes

Árvores de Suporte de Custo Mínimo

Aula T19 BCC202 Pesquisa (Parte 1) Pesquisa Binária. Túlio Toffolo

03 Grafos: percurso, ponderação e caminhos SCC0503 Algoritmos e Estruturas de Dados II

5COP096 TeoriadaComputação

Grafos. Notas. Notas. Notas. Notas. Caminhos mais curtos de única origem. Subestrutura ótima. Propriedades de caminhos mais curtos

Estruturas de Dados. Grafos VIII: Árvores Geradoras Mínimas. Prof. Ricardo J. G. B. Campello

Teoria dos Grafos. Árvores Geradoras

Estruturas de Dados Grafos

AULA 11 PROJETO E ANÁLISE DE ALGORITMOS. Conceitos básicos e representação de grafos Karina Valdivia Delgado

Volmir Eugênio Wilhelm Departamento de Engenharia de Produção UFPR 45

AED2 - Aula 04 Vetores ordenados e árvores de busca

Busca em largura. Algoritmos em Grafos. Marco A L Barbosa

ESTRUTURA DE DADOS. Árvores, árvores binárias e percursos. Cristina Boeres

Grafos - O que é um grafo? Algoritmos e Estruturas de Dados LEE 2013/14. Objecto abstracto Dois tipos de entidades. Vértices representam

Grafos - O que é um grafo? Algoritmos e Estruturas de Dados MEEC 2012/13. Objecto abstracto Dois tipos de entidades. Vértices representam

Grafos - Representação

ESTRUTURA DE DADOS E ALGORITMOS HEAPS E LISTAS DE PRIORIDADES

Algoritmos e Estrutura de Dados II. Árvore. Prof a Karina Oliveira.

Caminhos mínimos de única origem

Caminhos em Grafos. Grafos - Caminho Simples (1) (Cliente para M. de Adj.) static int visited[maxv];

INF 1010 Estruturas de Dados Avançadas

Grafos parte 2* Algoritmos e Estruturas de Dados II SCC-203 Rosane 2010/2011. *Baseado em material de professores dos anos anteriores

grafo nós vértices arcos arestas

Transcrição:

Algoritmo de Kruskal Algoritmo de Kruskal S. Algoritmos em Grafos º sem / Subfloresta Uma subfloresta de G é qualquer floresta F que seja subgrafo de G. Exemplo: As arestas vermelhas que ligam os vértices verdes e amarelos e formam uma subfloresta Algoritmos em Grafos º sem / Floresta geradora Algoritmos em Grafos º sem / Uma floresta geradora de G é qualquer subfloresta de G que tenha o mesmo conjunto de vértices que G. Exemplo: Arestas vermelhas ligando os vértices verdes e amarelos, junto com os vértices azul e vermelho, forma uma floresta geradora Algoritmos em Grafos º sem /

Arestas externas Uma aresta de G é externa em relação a uma subfloresta F de G se tem pontas em árvores distintas de F. Exemplo: As aresta -, -, -... são externas Algoritmos em Grafos º sem / Otimalidade Algoritmo de Kruskal O algoritmo de Kruskal iterativo. Cada iteração começa com uma floresta geradora F. No início da primeira iteração cada árvore de F tem apenas vértice. Cada iteração consiste em: Caso : não existe aresta externa a F Devolva F e pare. Caso : existe aresta externa a F Seja e uma aresta externa a F de custo mínimo Atualize: F F+e Algoritmos em Grafos º sem / Arcos Duas demonstrações: Usando um invariante, igualzinho à prova do Prim: a cada iteração, existe uma MST contendo F. Usando o critério já provado que caracteriza MST: toda aresta e F tem custo máximo em C(F, e). Um objeto do tipo Arc representa um arco com ponta inicial v e ponta final w. typedef struct { Vertex v; Vertex w; double cst; Arc; Algoritmos em Grafos º sem 7 / Algoritmos em Grafos º sem /

Arestas Implementação grosseira Um objeto do tipo Edge representa uma aresta com ponta inicial v e ponta final w. #define Edge Arc Na função abaixo para decidir se uma aresta v-w é externa a uma floresta geradora temos que () em cada componente da floresta geradora, é eleito um dos vértices para ser o representante da componente; () é mantido um vetor cor[..v-] de representantes, sendo cor[v] o representante da componente que contém o vértice v; () v-w é externa se e somente se cor[v] é diferente de cor[w]. Algoritmos em Grafos º sem 9 / Kruskal na força bruta A função armazena as arestas das MSTs no vetor mst[..k-] e devolve k. int bruteforcekruskal(graph G, Edge mst[]) { Vertex cor[maxv], v, w, v, w; int k=; for (v=;v < G->V;v++) cor[v] = v; Algoritmos em Grafos º sem / Algoritmos em Grafos º sem / Implementação grosseira while() { double mincst = INFINITO; for (v = ; v < G->V; v++) 7 for (w = ; w < G->V; w++) if (cor[v]!= cor[w] && mincst> G->adj[v][w]) mincst = G->adj[v=v][w=w]; if (mincst == INFINITO) break; mst[k].v = v; mst[k].w = w; k++; for (v = ; v < G->V; v++) if (cor[v] == cor[w]) cor[v] = cor[v]; return k; Algoritmos em Grafos º sem /

Algoritmo de Kruskal Union-Find As as funções UFinit, UFfind e UFunion têm o seguinte papel: UFinit(V) inicializa a floresta de conjuntos disjuntos com cada árvore contendo apenas elemento; UFfind(v, w) tem valor se e somente se v e w estão em componentes distintas da floresta; UFunion(v, w) promove a união das componentes que contêm v e w respectivamente. Implementações eficientes Algoritmos em Grafos º sem / A função recebe um grafo G com custos nas arestas e calcula uma MST em cada componente de G. A função armazena as arestas das MSTs no vetor mst[..k-] e devolve k. #define maxe Algoritmos em Grafos º sem / Algoritmos em Grafos º sem / Kruskal int GRAPHmstK (Graph G, Edge mst[ ]){ int i, k, E = G->A/; Edge a[maxe]; GRAPHedges(a, G); sort(a,, E-); UFinit(G->V); for (i= k= ; i < E && k< G->V-; i++) if (!UFfind(a[i].v, a[i].w)) { 7 UFunion(a[i].v, a[i].w); mst[k++] = a[i]; 9 return k; Algoritmos em Grafos º sem /

Coleção disjunta dinâmica Conjuntos são modificados ao longo do tempo Exemplo: grafo dinâmico a b e f h j Operações básicas S coleção de conjuntos disjuntos. Cada conjunto tem um representante. G MAKESET: (x): x é elemento novo S S {{x aresta (b, c) c d g i componentes {a, b, c, d {e, f, g {h, i {j UNION: (x, y): FINDSET: (x): x e y em conjuntos diferentes S S {S x, S y {S x S y x está em S x e y está em Sy devolve representante do conjunto que contém x Algoritmos em Grafos º sem 7 / Conjuntos disjuntos dinâmicos Algoritmos em Grafos º sem / Estrutura disjoint-set forest Seqüência de operações MAKESET, UNION, FINDSET a b e f h j M M M U F U U F U F F F U F {{ n {{ m G c d g i Que estrutura de dados usar? Compromissos (trade-off s). Algoritmos em Grafos º sem 9 / cada conjunto tem uma raiz, que é o seu representate cada nó x tem um pai pai[x] = x se e só se x é uma raiz Algoritmos em Grafos º sem /

Estrutura disjoint-set forest MakeSet e FindSet b e h j b e h j a d g f i a d g f i c c cada conjunto tem uma raiz cada nó x tem um pai pai[x] = x se e só se x é uma raiz MAKESET (x) pai[x] x FINDSET (x) enquanto pai[x] x faça x pai[x] devolva x Algoritmos em Grafos º sem / Algoritmos em Grafos º sem / Union Melhoramento : union by rank b x UNION (a, f ) h j x y a d e y i c g f UNION (x, y) x FINDSET (x) y FINDSET (y) pai[y ] x rank[x] = no. de nós de x MAKESET (x) pai[x] x rank[x] Algoritmos em Grafos º sem / Algoritmos em Grafos º sem /

Melhoramento : union by rank Melhoramento : union by rank UNION (x, y) x UNION (x, y) 7 x y y rank[x] = posto de nós de x MAKESET (x) pai[x] x rank[x] rank[x] = posto de nós de x MAKESET (x) pai[x] x rank[x] Algoritmos em Grafos º sem / Melhoramento : union by rank Algoritmos em Grafos º sem / Melhoramento : union by rank rank[x] rank[y] rank[x] + rank[y] rank[y] UNION (x, y) com union by rank x FINDSET (x) y FINDSET (y) supõe que x y se rank[x ] > rank[y ] então pai[y ] x rank[y ] rank[y ] + rank[x ] senão pai[x ] y 7 rank[x ] = rank[x ] + rank[y ] Algoritmos em Grafos º sem 7 / Algoritmos em Grafos º sem /

Consumo de tempo Se conjuntos disjuntos são representados através de disjoint-set forest com union by rank, então uma seqüência de m operações MAKESET, UNION e FINDSET, sendo que n são MAKESET, consome tempo O(m lg n). UFinit e UFfind static Vertex cor[maxv]; static int sz[maxv]; void UFinit (int N) { Vertex v; for (v = ;v < N;v++) { cor[v] = v; sz[v] = ; int UFfind (Vertex v, Vertex w) { return (find(v) == find(w)); Algoritmos em Grafos º sem 9 / find static Vertex find(vertex v) { while (v!= cor[v]) v = cor[v]; return v; Algoritmos em Grafos º sem / Algoritmos em Grafos º sem / UFunion void UFunion (Vertex v, Vertex w) { Vertex v = find(v), w = find(w); if (v == w) return; if (sz[v] < sz[w]) { cor[v] = w; sz[w] += sz[v]; else { cor[w] = v; sz[v] += sz[w]; Algoritmos em Grafos º sem /

Consumo de tempo Conclusão Graças à maneira com duas union-find trees são unidas por UFunion, a altura de cada union-find tree é limitada por lg V. Assim, UFfind e UFunion consomem tempo O(lg V). Podemos supor que a função sort consome tempo proporcional a Θ(E lg E). O restante do código de GRAPHmstK consome tempo proporcional a O(E lg V). O consumo de tempo da função GRAPHmstK é O(E lg V). Algoritmos em Grafos º sem / Algoritmos Algoritmos em Grafos º sem / Algoritmo de Boruvka função consumo de observação tempo bruteforceprim O(V ) alg. de Prim GRAPHmstP O(V ) grafos densos matriz adjacência GRAPHmstP O(E lg V) grafos esparsos listas de adjacência bruteforcekruskal O(V ) alg. de Kruskal GRAPHmstK O(E lg V) alg. de Kruskal disjoint-set forest Os algoritmos funcionam para arestas com custos Algoritmos quaisquer. em Grafos º sem / S. Algoritmos em Grafos º sem /

Algoritmo de Boruvka Algoritmos em Grafos º sem 7 /