Árvore Geradora de Peso Mínimo

Slides:



Advertisements
Apresentações semelhantes
Algoritmos de Caminho Mínimo em Grafos
Advertisements

Grafos eulerianos 1.
Cortes (cut-sets)‏ 1.
Algoritmo de Caminho Mínimo
Árvores 2010/1 Teoria dos Grafos (INF 5037/INF2781)
Árvores CC/EC/Mestrado Teoria dos Grafos ‏ 1.
Grafo k-conexo Seja k um inteiro positivo. Diz-se que um grafo G é k-conexo em vértices quando não existe corte de vértices de tamanho menor que k Analogamente,
Algoritmos em Grafos.
Algoritmos em Grafos (Parte 2)
Prof. M.Sc. Fábio Francisco da Costa Fontes Maio
Antonio Dirceu Rabelo de Vasconcelos Filho
Gustavo Sant´Anna Ferreira Rodrigo Ribeiro de Souza
Teoria dos Grafos Loana Tito Nogueira.
Inteligência Artificial
Celso C. Ribeiro Caroline T. Rocha
Fluxo em Redes Prof. Ricardo R. Santos.
Análise de Decisão Aplicada a Gerência Empresarial – UVA Grafos - V
O Problema do Passeio mais Curto
Exercícios PAA- Grafos
Exercícios PAA- Grafos
Celso C. Ribeiro Caroline T. Rocha
Cortes (cut-sets)‏ 2010/2 Teoria dos Grafos (INF 5037/INF2781)‏ 1.
Pontes Seja (G) o número de componentes conexas de G. Uma ponte é uma aresta a tal que (G - a) > (G)
Percursos em um grafo 2010/1 Teoria dos Grafos (INF 5037/INF2781)
UFES CC/EC/Mestrado Teoria dos Grafos Árvores. UFES CC/EC/Mestrado Teoria dos Grafos Árvores Grafo Acíclico: não possui ciclos.
Grafo k-conexo Seja k um inteiro positivo. Diz-se que um grafo G é k-conexo em vértices quando não existe corte de vértices de tamanho menor que k.
Algoritmo polinomial para geração de uma Árvore Geradora Mínima
Problemas de fluxo numa rede
CONCEITOS BÁSICOS DE GRAFOS
Prof. M.Sc. Fábio Francisco da Costa Fontes Abril
Teoria dos Grafos – Aula 6
Teoria dos Grafos – Aula 3 Árvores
Teoria dos Grafos Loana T. Nogueira Aula 5.
Árvores.
FACENS – Engenharia da Computação Lógica Computacional II
Classificação e Pesquisa de Dados
Métodos de Classificação por Seleção: HeapSort
Árvore Geradora Mínima
Listas e algoritmos (em Scratch)
Buscas em Grafos Prof. André Renato 1º Semestre/2012
Grafos Msc. Cintia Carvalho Oliveira Doutoranda em Computação – UFU
Baseado em: The Algorithm Design Manual Steven S. Skiena
Algoritmos em Grafos.
Algoritmos em Grafos Conceitos principais Prof. André Renato
Grafos Árvores Geradoras.
Informática Teórica Engenharia da Computação
Algoritmos em Grafos Árvores Geradoras Prof. André Renato
Exercícios: Alg Gulosos Eduardo Laber. Cap 4-Exercício 2 a)Verdadeiro, já que trocando cada elemento pelo seu quadrado não altera a ordem das arestas.
Exercícios PAA- Grafos
Celso C. Ribeiro Caroline T. Rocha
Análise e Síntese de Algoritmos
Busca com informação e exploração
Algoritmos Gulosos em Grafos
Problema do menor Caminho
Conceitos básicos em grafos
ÁRVORES Def.: Um grafo é acíclico se não possui ciclos.
UNIVERSIDADE CATÓLICA DE PELOTAS ESCOLA DE INFORMÁTICA MESTRADO EM CIÊNCIA DA COMPUTAÇÃO Disciplina:Estruturas de Dados Aluno:Christiano Otero Avila Prof.
Ceça Moraes – Introdução à Programação SI1
Universidade Federal de Mato Grosso do Sul Departamento de Computação e Estatística Circuitos de Euler em Paralelo Universidade Federal de Mato Grosso.
Conexidade 1.
Disciplina Análise de Algoritmos Bacharelado em CC
Katia S. Guimarães Busca em Grafos Katia S. Guimarães

Problema MST Método Genérico Guloso usando Estratégia do Corte
Mestrado em Informática
Celso C. Ribeiro Caroline T. Rocha
Algoritmos em Grafos Celso C. Ribeiro Caroline T. Rocha.
Grafos e Teoria da Complexidade Professor: Fabio Tirelo
© Copyright 2003 Algoritmos e Estruturas de Dados - Todos os direitos reservados Busca Gulosa em Grafos IF672 - Algoritmos e Estruturas de Dados CIn -
Transcrição da apresentação:

Árvore Geradora de Peso Mínimo Davi Martins Fábio Ávila

Introdução Apresentação do problema Idéia geral do algoritmo Diferenciação do problema de distâncias Idéia geral do algoritmo Algoritmo de Prim Leve modificação do algoritmo de distâncias Algoritmo de Kruskal Idéia alternativa - menor aresta disponível, se esta não fechar ciclo Custos

Apresentação do problema Partindo de um Grafo G=(V,E) Conexo Não-direcionado Deseja-se encontrar árvore geradora de peso mínimo (T) Minimum Cost Spanning Tree (MCST) Subgrafo de G Contém todos os vértices de G (conceito de árvore geradora) Possui (V-1) arestas

Exemplo 1 8 7 b c d 4 9 2 a i e 11 4 14 7 6 8 10 h g f 1 2 Peso total: 37 Árvore não-única. Removendo a aresta (b,c) e trocando-a pela (a,h) leva a outra árvore geradora com peso 37.

Exemplo 2 Peso total: 56 Árvore geradora de peso mínimo única. 1 2 6 3 16 1 2 5 21 11 6 3 19 6 33 14 10 5 4 18 Peso total: 56 Árvore geradora de peso mínimo única.

Idéia geral do algoritmo Algoritmo genérico 1 A  Ø 2 Enquanto A não forma uma árvore geradora faça 3 Ache uma aresta (u,v) segura para A 4 A  A U {(u,v)} 5 Retorne (A) Resta saber como achar arestas seguras

Partições Um corte (S,V-S) de um grafo não direcionado G=(V,E) é uma partição de V. Uma aresta pode atravessar um corte Um corte respeita um conjunto de arestas se o conjunto não possuir nenhuma aresta que atravesse o corte Uma aresta é leve se o seu peso é o mínimo de qualquer aresta atravessando o corte. 8 7 b c d 4 9 2 S a 11 i 4 14 e 7 6 8 10 V-S h g f 1 2

Teorema Seja G=(V,E) um grafo com pesos conexo e não direcionado. Seja A um subconjunto de E contido em alguma MCST para G. Seja (S,V-S) um corte que respeita A, e seja (u,v) uma aresta leve atravessando (S,V-S). Então, a aresta (u,v) é segura para A.

Achando uma MCST com partições parciais 8 7 b c d 4 9 2 a i e 11 4 14 7 6 8 10 h g f 1 2

Diferenciação do problema de distâncias No problema de distâncias, procurava-se sempre o caminho mais curto saindo de um vértice inicial. Guarda-se sempre a distância mínima de cada vértice ao vértice inicial A única diferença entre os dois algoritmos é que o mínimo não é mais tomado como o comprimento total do caminho, mas sim como o custo de uma aresta. Trabalha-se sempre com os vértices dentro da partição, buscando sempre um vértice fora da partição atual (formando uma aresta considerada segura) O resto do algoritmo é basicamente o mesmo

Algoritmo de Prim Algoritmo muito similar ao SSSP Árvore T definida inicialmente como uma árvore contendo apenas o vértice inicial Seguramente, um subgrafo da MCST Em cada iteração, procura-se achar a aresta de custo mínimo conectando T a vértices fora de T.

         b c d a i e h g f Algoritmo MCST-Prim (G) Entrada: G (um grafo conexo com pesos não direcionado) Saída: T (uma árvore geradora de peso mínimo de G) Início T  Ø; Para todo vértice w faça w.marca  Falso; w.custo  ; Atribua a (x,y) uma aresta de peso mínimo em G; x.marca  Verdadeiro; Para todas as arestas (x,z) faça z.aresta  (x,z); z.custo  custo(x,z); Enquanto existir um vértice não marcado faça w  vértice não marcado com menor w.custo; w.marca  Verdadeiro; Adicione w.aresta a T; Para todos os vértices (w,z) faça Se não z.marca então Se custo(w,z) < z.custo então z.aresta  (w,z); z.custo  custo(w,z); Fim  8  7  b c d 4 9 2    a 11 i 4 e 14 7 6 8    10 h g f 1 2

a b f c e d 16 5 21 11 19 6 33 14 10 18 Algoritmo MCST-Prim (G) Entrada: G (um grafo conexo com pesos não direcionado) Saída: T (uma árvore geradora de peso mínimo de G) Início T  Ø; Para todo vértice w faça w.marca  Falso; w.custo  ; Atribua a (x,y) uma aresta de peso mínimo em G; x.marca  Verdadeiro; Para todas as arestas (x,z) faça z.aresta  (x,z); z.custo  custo(x,z); Enquanto existir um vértice não marcado faça w  vértice não marcado com menor w.custo; w.marca  Verdadeiro; Adicione w.aresta a T; Para todos os vértices (w,z) faça Se não z.marca então Se custo(w,z) < z.custo então z.aresta  (w,z); z.custo  custo(w,z); Fim 16 a b 5 21 11 19 f 6 c 33 14 10 e d 18

Custo do Algoritmo de Prim Depende de como se implemente os procedimentos de busca do menor elemento. Usaremos heaps. O procedimento de extrair o menor elemento dos candidatos possíveis ao redor de um vértice leva no máximo (log |V|) operações, onde |V| é o número de vértices do grafo. Essa comparação acontece |V| vezes. Portanto, essa parte do algoritmo tem tempo de execução O(|V| log |V|) O último laço para é executado O(|E|) vezes no total. Sabemos que operações de atualização em heaps é O(log |V|), portanto esta última parte leva a O(|E| log |V|) Somando-se os tempos dos trechos, temos: O(|V| log |V|) + O(|E| log |V|) = O((|E| + |V|) log |V|)

Algoritmo de Kruskal Árvore T definida inicialmente como uma floresta contendo todos os vértices do grafo original G Seguramente, um subgrafo da MCST Primeiro ordena os pesos de cada aresta, partindo do menor peso para o maior Checa se os vértices que formam arestas candidatas não estão na mesma árvore (ou seja, se fecha um ciclo)

1 2 6 3 5 4 16 5 21 11 19 6 33 14 10 18 Algoritmo MCST-Kruskal (G) Entrada: G (um grafo conexo com pesos não direcionado) Saída: T (uma árvore geradora de peso mínimo de G) Início T  Ø; Para todo vértice w faça Adicione w a T; Ordene os pesos das arestas de T; Para todas as arestas (x,z), na ordem crescente, faça Se u e v não pertencem à mesma árvore então Adicione (u,v) a T; Fim 16 1 2 5 21 11 6 3 19 6 33 14 10 5 4 18

b c d a i e h g f Algoritmo MCST-Kruskal (G) Entrada: G (um grafo conexo com pesos não direcionado) Saída: T (uma árvore geradora de peso mínimo de G) Início T  Ø; Para todo vértice w faça Adicione w a T; Ordene os pesos das arestas de T; Para todas as arestas (x,z), na ordem crescente, faça Se u e v não pertencem à mesma árvore então Adicione (u,v) a T; Fim 8 7 b c d 4 9 2 a 11 i 4 e 14 7 6 8 10 h g f 1 2

Custo do Algoritmo de Kruskal O procedimento para ordenar as arestas é O(|E| log |E|), obedecendo os critérios de algoritmos de ordenação por comparação. Os tempos da parte de detecção dos vértices fazendo parte da mesma árvore e junção dos vértices são O(|E| log |E|), determinado usando as heurísticas de união por classificação e compressão de caminho. Portanto, o tempo do algoritmo de Kruskal é O(|E| log |E|)

Conclusão Tradução da parte de MCST do Manber disponível para consulta. Consultar livro “Introduction to Algorithms”, Thomas H. Cormen, Charles E. Leiserson e Ronald L. Rivest Apresentação mais amigável do assunto