Árvore Geradora Mínima

Slides:



Advertisements
Apresentações semelhantes
Grafos eulerianos 1.
Advertisements

Caminhamento em Grafos
Algoritmo de Caminho Mínimo
Árvores 2010/1 Teoria dos Grafos (INF 5037/INF2781)
Árvores CC/EC/Mestrado Teoria dos Grafos ‏ 1.
Algoritmos em Grafos (Parte 2)
Antonio Dirceu Rabelo de Vasconcelos Filho
Gustavo Sant´Anna Ferreira Rodrigo Ribeiro de Souza
Celso C. Ribeiro Caroline T. Rocha
Fluxo em Redes Prof. Ricardo R. Santos.
Grafos – Parte 2 Projeto e Análise de Algoritmos Aline Vasconcelos
Análise de Decisão Aplicada a Gerência Empresarial – UVA Grafos - V
Exercícios PAA- Grafos
Exercícios PAA- Grafos
Pontes Seja (G) o número de componentes conexas de G. Uma ponte é uma aresta a tal que (G - a) > (G)
UFES CC/EC/Mestrado Teoria dos Grafos Árvores. UFES CC/EC/Mestrado Teoria dos Grafos Árvores Grafo Acíclico: não possui ciclos.
CC/EC/PPGI/UFES CC/EC/MestradoTeoria dos Grafos Algoritmo de Caminho Mínimo.
Estruturas de Dados Árvores Binárias
Pesquisa em profundidade
Estrutura de Dados e Algoritmos e Programação e Computadores II
Prof. M.Sc. Fábio Francisco da Costa Fontes Abril
Teoria dos Grafos – Aula 3 Árvores
Árvores.
David Menotti Algoritmos e Estruturas de Dados I DECOM – UFOP
David Menotti Estruturas de Dados I DECOM – UFOP
David Menotti Algoritmos e Estruturas de Dados I DECOM – UFOP
Árvore Geradora de Peso Mínimo
Ronaldo Celso Messias Correia –
Pesquisa Operacional - Profa Úrsula L. F. Ribeiro
Capítulo 3 - Russell e Norvig
Robson Godoi / Sandra Siebra
Grafos Msc. Cintia Carvalho Oliveira Doutoranda em Computação – UFU
Algorítmos e estrutura de dados III
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
Caminhos e caminhamentos em Grafos
Algoritmos em Grafos.
Grafos Árvores Geradoras.
Informática Teórica Engenharia da Computação
Teoria dos Grafos Caminhos e Noção de Grafos com pesos
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.
Caminhamento em Grafos: Busca em Largura e Busca em Profundidade
Exercícios PAA- Grafos
Prova AA.
Celso C. Ribeiro Caroline T. Rocha
Algorítmos e estrutura de dados III
Histórico, exemplos e problemas
Teoria dos Grafos Coloração
Introdução e Busca Cega
Algoritmos Gulosos em Grafos
Katia S. Guimarães Busca em Grafos Katia S. Guimarães
Conceitos básicos em grafos
Ronaldo Celso Messias Correia –
Busca Combinatorial e Métodos de Heurística

Estruturas de Dados Aula 15: Árvores
Aula 06 – 05/04 Árvores binárias.
Disciplina Análise de Algoritmos Bacharelado em CC
Msc. Daniele Carvalho Oliveira
Katia S. Guimarães Busca em Grafos Katia S. Guimarães
Aula de Monitoria – Miniprova

Introdução a Algoritmos em Grafos.

Celso C. Ribeiro Caroline T. Rocha
Árvores (introdução) Anjolina Grisi de Oliveira Obs: vários slides foram cedidos por Adolfo Almeida Duran (UFBA)
© 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 Mínima

O problema Admita que tenhamos que conectar vértices de forma eficiente, onde os vértices podem ser: computadores, telefones, etc. Uma árvore geradora mínima deve fornecer uma solução econômica, que precise de pouco cabo, tubulação, ou pouca quantidade de qualquer que seja o meio de conexão (arestas)

Definição Uma árvore geradora de um grafo é uma árvore não-enraizada cujo conjunto de vértices coincide com o conjunto de vértices do grafo cujas arestas são (algumas das) arestas do grafo.

Portanto... Uma árvore geradora conecta todos os vértices de um grafo sem formar ciclos. Um dos algoritmos utilizados é o PRIM. Ele é parecido com o algoritmo para o caminho mínimo, sendo que, um grafo poderá ter mais de uma árvore geradora mínima.

Exemplo

Algoritmo PRIM Cria-se um conjunto IN que inicialmente terá um vértice arbitrário (z) Para cada vértice de (z) que não esteja em IN, avaliamos a menor distância. A aresta que realiza a distância mínima é então incluída na árvore geradora mínima. O algoritmo termina quando todos os vértices do grafo pertençam a IN.

Algoritmo PRIM(execução) Exemplo: 4 C B 3 4 6 D 7 A 8 2 1 M L E 5 4 4 I J 3 6 3 2 2 H G F 7 c(F) = 21 c(F) = 25 c(F) = 33 c(F) = 17 c(F) = 28 c(F) = 1 c(F) = 3 c(F) = 6 c(F) = 9 c(F) = 11 c(F) = 13

Algoritmo (Pseudo-código) função Prim(G) { T := {} B := Um vértice de G Enquanto B não contém todos os vértices (u,v) :=   aresta de menor peso saindo de todos os vértices em B T :=   T U {(u,v)} B :=   B U {u} }

Algoritmos de busca Os problemas vistos até agora baseavam-se em alguma premissa do tipo: não passar pela mesma aresta, não passar pelo mesmo vértice, minimizar a distância percorrida, etc. Agora veremos algoritmos onde podemos percorrer todos os vértices em uma ordem particular, mas listando todos os vértice.

Busca em profundidade Neste procedimento, partimos de um vértice a e marcamos ele como visitado, prosseguindo para o ponto mais longe possível, até que nenhum vértice seja mais encontrado pelo caminho escolhido.

Busca em profundidade Para um grafo simples e conexo Procedure profundidade(G, a) { marque a como visitado escreva a for (cada vertice n adjacente de a) if n não foi visitado profundidade(G, n) }

Busca em largura Neste caso partimos do vértice a e seguimos por todos os seus adjacentes, em seguida seguimos cada um desses adjacentes, realizando a mesma operação.

Busca em Largura (usando lista) Procedure largura(G, a) { Q: Fila de vertices marque a escreva(a) inclui(a) na fila Enquanto Q não está vazia for cada vértice n adjacente a Q if n não foi visitado marque n como visitado escreva(n) incluiNa Fila (n,Q) TiraDaFila(q) }

Análises A vantagem de se utilizar lista de adjacências no lugar de matriz, é interessante para a implementação, uma vez que torna o algoritmo muito mais simples. (como seria percorrer todos os adjacentes de a, em uma matriz?) Varrer a lista de adjacências o grafo determina a quantidade de trabalho a ser realizada em cada lado. Como existem n listas de adjacências, a quantidade de trabalho é pelo menos O(n), pois mesmo que ela esteja vazia, precisa ser verificada. Como existem M arestas, o trabalho para percorrer todas as arestas de uma lista é o(m). Portanto, os algoritmos são O(max(n,m)). O caso mais comum provavelmente é O(m) pois em geral temos mais arestas do que vértices.

Busca em arvores Os algoritmos de busca em largura e em profundidade se aplicam a quaisquer grafos, porém, existem 3 outros algoritmos apenas para árvores que são úteis. Pré-ordem InOrdem PosOrdem

Pré-Ordem ABDCEGFHI

IN-Ordem DBAEGCHFI

Pós-Ordem DBGEHIFCA

PreOrdem Procedure PreOrdem(N:Pno); If N <> nil Then Processa(N); {p. ex. imprime} PreOrdem(N^.esq); PreOrdem(N^.dir); End;

InOrdem Procedure InOrdem(N:Pno); If N <> nil Then InOrdem(N^.esq); Processa(N); {p. ex: imprime} InOrdem(N^.dir); End;

PosOrdem Procedure PosOrdem(N:Pno) If N <> nil Then PosOrdem(N^.esq); PosOrdem(N^.dir); Processa(N); {p.ex.: imprime} End;

Exercícios Crie o grafo a1(1,2,5); a2(2,5,3); a3(2,3,3); a4(4,2,3); a5(3,1,3) e faça a conexão utilizando o algoritmo PRIM Percorra a árvore ao lado das 3 formas possíveis