Análise e Síntese de Algoritmos

Slides:



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

Grafos Orientados (digrafos)
Árvores 2010/1 Teoria dos Grafos (INF 5037/INF2781)
Árvores CC/EC/Mestrado Teoria dos Grafos ‏ 1.
Ford Fulkerson Teoria dos Grafos.
Algoritmos em Grafos.
Algoritmos em Grafos (Parte 2)
Celso C. Ribeiro Caroline T. Rocha
Fluxo em Redes Prof. Ricardo R. Santos.
Exercícios PAA- Grafos
Exercícios PAA- Grafos
Celso C. Ribeiro Caroline T. Rocha
UFES CC/EC/Mestrado Teoria dos Grafos Árvores. UFES CC/EC/Mestrado Teoria dos Grafos Árvores Grafo Acíclico: não possui ciclos.
Algoritmo polinomial para geração de uma Árvore Geradora Mínima
Análise e Síntese de Algoritmos
Pesquisa em profundidade
Problemas de fluxo numa rede
Grafos Grafo G = (V, E) V — conjunto de vértices
Algoritmos de ordenação e estruturas de dados Baseado em progrProlog4.
Teoria dos Grafos – Aula 3 Árvores
Árvores.

Pesquisa em Memória Primária
Pesquisa em Memória Primária
Árvore Geradora de Peso Mínimo
Prof. Ernesto Lindstaedt
Árvore Geradora Mínima
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.
Alberto Rodrigues Costa Junior - (arcj)
Heaps de Fibonacci Lino Alves.
Algoritmos em Grafos Árvores Geradoras Prof. André Renato
Análise e Síntese de Algoritmos
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
Algorítmos e estrutura de dados III
Operações com grafos União Exemplo
Análise e Síntese de Algoritmos
1. Se este nó é raiz de uma árvore QuasiEquilibrada de ordem k, e
Algoritmos Gulosos 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.
Universidade Federal de Mato Grosso do Sul Departamento de Computação e Estatística Circuitos de Euler em Paralelo Universidade Federal de Mato Grosso.
Algoritmo de PRIM para MST
Análise de Complexidade do Algoritmo de Dijkstra
Análise e Síntese de Algoritmos
Disciplina Análise de Algoritmos Bacharelado em CC
CAMINHOS MAIS CURTOS EM GRAFOS
Heaps Binomiais Rômulo de Almeida Bruno Mestrando em Ciência da Computação Professora Liliane Salgado Disciplina - Algoritmos.

Análise e Síntese de Algoritmos
Problema MST Método Genérico Guloso usando Estratégia do Corte
Mestrado em Informática
Geometria Computacional Prof. Walter Mascarenhas Segundo semestre de 2004 Aula 9.
Análise e Síntese de Algoritmos
Análise e Síntese de Algoritmos Estruturas de Dados p/ Conjuntos DisjuntosCLRS, Cap. 21.
Redes de transporte Uma rede ou grafo consiste num número finito de pontos chamados nós ou vértices interligados por arcos. Muitos sistemas, físicos ou.
Celso C. Ribeiro Caroline T. Rocha
Análise e Síntese de Algoritmos
Análise e Síntese de Algoritmos
Algoritmos em Grafos Celso C. Ribeiro Caroline T. Rocha.
Análise e Síntese de Algoritmos
Análise e Síntese de Algoritmos Algoritmos GreedyCLRS, Cap. 16.
Prof. Daniel Morais dos Reis
© Copyright 2003 Algoritmos e Estruturas de Dados - Todos os direitos reservados Busca Gulosa em Grafos IF672 - Algoritmos e Estruturas de Dados CIn -
Abordagens para Problemas Intratáveis Katia S. Guimarães
Transcrição da apresentação:

Análise e Síntese de Algoritmos Árvores Abrangentes de Menor Custo CLRS, Cap. 23

Análise e Síntese de Algoritmos Resumo Árvores Abrangentes de Menor Custo Minimum-Spanning Trees (MSTs) Algoritmo (greedy) genérico Prova de optimalidade Algoritmo de Kruskal Algoritmo de Borůvka Algoritmo de Prim Exemplo 2003/2004 Análise e Síntese de Algoritmos

Análise e Síntese de Algoritmos Definições Um grafo não dirigido G = (V, E), diz-se ligado se para qualquer par de vértices existe um caminho que liga os dois vértices Dado grafo não dirigido G = (V, E), ligado, uma árvore abrangente é sub-conjunto acíclico T  E, que liga todos os vértices T é necessariamente uma árvore 2003/2004 Análise e Síntese de Algoritmos

Árvores Abrangente de Menor Custo Dado grafo G = (V, E), ligado, não dirigido, com uma função de pesos w : E  R, identificar uma árvore abrangente T, tal que a soma dos pesos dos arcos de T é minimizada 2003/2004 Análise e Síntese de Algoritmos

Análise e Síntese de Algoritmos Construção de uma MST Abordagem Greedy: Manter conjunto A que é um subconjunto de uma MST T A cada passo do algoritmo identificar arco (u,v) que pode ser adicionado a A sem violar a invariante A  {(u,v)} é sub-conjunto de uma MST T (u,v) é declarado um arco seguro para A Algoritmo: function MST-Genérico(G,w) A =  while A não forma árvore abrangente identificar arco seguro (u,v) para A A = A  {(u,v)} return A 2003/2004 Análise e Síntese de Algoritmos

Optimalidade — Definições Um corte (S,V-S) de um grafo não dirigido G=(V,E) é uma partição de V Um arco (u,v)E cruza o corte (S,V-S) se um dos extremos está em S e o outro está em V-S Um corte respeita um conjunto de arcos A se nenhum arco de A cruza o corte Um arco diz-se um arco leve que cruza um corte se o seu peso é o menor de todos os arcos que cruzam o corte 2003/2004 Análise e Síntese de Algoritmos

Análise e Síntese de Algoritmos Optimalidade Seja G=(V,E) um grafo não dirigido, ligado, com função de pesos w. Seja A um sub-conjunto de E incluído numa MST T, seja (S,V-S) qualquer corte de G que respeita A, e seja (u,v) um arco leve que cruza (S,V-S). Então (u,v) é um arco seguro para A Prova: MST T, com A  T, e arco leve (u,v)T Objectivo: Construir outra MST T’ que inclui A  {(u,v)}  (u,v) é um arco seguro para A 2003/2004 Análise e Síntese de Algoritmos

Análise e Síntese de Algoritmos Optimalidade (Cont.) O arco (u,v) forma ciclo com arcos do caminho p, definido em T, que liga u a v Dado u e v estarem nos lados opostos do corte (S,V-S), então existe pelo menos um arco do caminho p em T que cruza o corte Arco (x,y) (x,y)  A, porque (S, V-S) respeita A Remoção de (x,y) divide T em dois componentes Inclusão de (u,v) permite formar T’ = T - {(x,y)}  {(u,v)} Dado que (u,v) é um arco leve que cruza o corte (S,V-S), e porque (x,y) também cruza o corte: w(u,v)  w(x,y) 2003/2004 Análise e Síntese de Algoritmos

Análise e Síntese de Algoritmos Optimalidade (Cont.) Conclusão: w(T’) = w(T) - w(x,y) + w(u,v)  w(T) Mas T é MST, pelo que w(T)  w(T’)  w(T’) = w(T), e T’ também é MST (u,v) é seguro para A: Verifica-se A  T’, dado que por construção A  T, e (x,y)  A Assim, verifica-se também A  {(u,v)}  T’ T’ é MST, pelo que (u,v) é seguro para A 2003/2004 Análise e Síntese de Algoritmos

Análise e Síntese de Algoritmos Algoritmo de Kruskal Algoritmo mantém floresta (de árvores) A Utilização de uma estrutura de dados para representar conjuntos disjuntos Cada conjunto representa uma sub-árvore de uma MST A cada passo é escolhido arco leve, seguro para A 2003/2004 Análise e Síntese de Algoritmos

Algoritmo de Kruskal (Cont.) function MST-Kruskal(G,w) A =  foreach v  V[G] Make_Set(v) // Criar conjunto para v Ordenar arcos de E por ordem de peso não decrescente foreach (u,v)  E[G], por ordem não decrescente de w if Find_Set(u)  Find_Set(v) // (u,v) é arco leve, seguro para A A = A  {(u,v)} Union (u,v) return A 2003/2004 Análise e Síntese de Algoritmos

Algoritmo de Kruskal (Cont.) Complexidade: Depende da implementação das operações sobre conjuntos disjuntos Inicialização: O(E lg E) devido à ordenação dos arcos Construção: Utilizando listas para representar conjuntos obtém-se O(E V) União das listas que definem conjuntos de cada vértice Obs: Com estruturas para conjuntos disjuntos adequadas é possível estabelecer O(E lg* E) ou O(E (E,V))  É possível assegurar O(E lg E)  Dado que E < V2, obtém-se também O(E lg V) Exemplo 2003/2004 Análise e Síntese de Algoritmos

Análise e Síntese de Algoritmos Algoritmo de Borůvka Começar com um N conjuntos de vértices (N árvores) Noção de arco marcado A cada passo do algoritmo, Para cada árvore T seleccionar arco de menor peso incidente em T marcar arco seleccionado (passa a estar incluído em T) arco pode ser duplamente seleccionado Juntar em árvores individuais árvores ligadas por arcos marcados Algoritmo termina quando existir apenas uma árvore Algoritmo correcto apenas se pesos com valores distintos Escolha de dois arcos de peso igual que ligam duas árvores ! Com pesos iguais é necessário estabelecer relação de ordem (artificial) entre todos os arcos (e.g. ordem lexicográfica) 2003/2004 Análise e Síntese de Algoritmos

Algoritmo de Borůvka (Cont.) Complexidade: O(E lg V) Número de passos do algoritmo: O(lg V) Número de arcos analisados em cada passo: O(E) Manutenção das árvores em cada passo: O(E) OBS: Adequado para processamento paralelo Exemplo 2003/2004 Análise e Síntese de Algoritmos

Análise e Síntese de Algoritmos Algoritmo de Prim MST construída a partir de um vértice raíz r Algoritmo mantém sempre uma árvore A Extendida a partir do vértice r A cada passo é escolhido arco leve, seguro para A Utilização de fila de prioridade Q key[v]: menor peso de qualquer arco que ligue v a um vértice na árvore [v]: antecessor de v na árvore 2003/2004 Análise e Síntese de Algoritmos

Algoritmo de Prim (Cont.) function MST-Prim(G,w,r) Q = V[G] // Fila de prioridade Q foreach u  Q // Inicialização key[u] =  key[r] = 0 [r] = NIL // Permite manter árvore A while Q   u = Extract_Min(Q) //  (u,v) que é arco leve, seguro para A foreach v  Adj[u] if v  Q and w(u,v) < key[v] [v] = u key[v] = w(u,v) // Q é actualizada! O(lg V) O(E) O(V) 2003/2004 Análise e Síntese de Algoritmos

Algoritmo de Prim (Cont.) Complexidade: O(E lg V) Fila de prioridade baseada em amontoado (heap) Para cada arco (i.e. O(E)) existe no pior-caso uma actualização de Q (em O(lg V)) Exemplo 2003/2004 Análise e Síntese de Algoritmos

Análise e Síntese de Algoritmos Revisão Árvores abrangentes de menor custo (MSTs) Algoritmo de Kruskal Algoritmo de Boruvka Algoritmo de Prim A seguir: Caminhos Mais Curtos (CLRS, Cap. 24) 2003/2004 Análise e Síntese de Algoritmos