Divisão e Conquista: Par de Pontos mais Próximo



Documentos relacionados
Divisão e Conquista. Fernando Lobo. Algoritmos e Estrutura de Dados II. É uma técnica para resolver problemas (veremos outras técnicas mais adiante).

Análise e Complexidade de Algoritmos

Comparação com Divisão e Conquista

Algoritmos de Ordenação: MergeSort

O termo Programação Dinâmica é um bocado infeliz.

Divisão e Conquista. Norton T. Roman. Apostila baseada nos trabalhos de Cid de Souza, Cândida da Silva e Delano M. Beder

Algoritmos de Ordenação

Análise de Problemas Recursivos. Algoritmos e Estruturas de Dados Flavio Figueiredo (

Solução de Recorrências

Algoritmos de ordenação Quicksort

Divisão e conquista. Há divisão quando o algoritmo tem pelo menos 2 chamadas recursivas no corpo

Análise de Complexidade para algoritmos iterativos e recursivos

Subsequência comum mais longa Em inglês, Longest Common Subsequence (LCS)

Mergesort. Aula 04. Algoritmo Mergesort. Divisão e Conquista. Divisão e Conquista- MergeSort

Fernando Lobo. Algoritmos e Estrutura de Dados. Outra técnica de concepção de algoritmos, tal como Divisão e Conquista.

Algoritmos de Ordenação: QuickSort

Divisão e conquista. Eficiência de divisão e conquista

Algoritimos e Estruturas de Dados III CIC210

Estruturas de Dados 2

Projeto e Análise de Algoritmos Aula 4: Dividir para Conquistar ou Divisão e Conquista ( )

Quick Sort. Considerações Sobre Algoritmos de Ordenação. Estagiário PAE: Jesimar da S. Arantes Professor: ClaudioQuick F. M.

Ordenação: QuickSort. Prof. Túlio Toffolo BCC202 Aula 15 Algoritmos e Estruturas de Dados I

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

Análise de algoritmos

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

Divisão-e-Conquista ( ) CAL ( ) MIEIC/FEUP. ./rr (1) Técnicas de Concepção de Algoritmos

Estruturas de Dados, Análise de Algoritmos e Complexidade Estrutural. Carlos Alberto Alonso Sanches

INE5403 FUNDAMENTOS DE MATEMÁTICA DISCRETA

Estruturas de Dados 2

Aula 06: Análise matemática de algoritmos recursivos

BCC202 - Estrutura de Dados I

5. Invólucros Convexos no Plano (cont )

Jorge Figueiredo, DSC/UFCG. Análise e Técnicas de Algoritmos divisão. divisão. combina. combina. Jorge Figueiredo, DSC/UFCG

07 Ordenação em Memória Interna (parte 2) quicksort SCC201/501 - Introdução à Ciência de Computação II

Análise e Síntese de Algoritmos

Algoritmos Greedy. Pedro Ribeiro 2014/2015 DCC/FCUP. Pedro Ribeiro (DCC/FCUP) Algoritmos Greedy 2014/ / 40

Algoritmos e Estrutura de Dados. Aula 04 Recorrência Prof. Tiago A. E. Ferreira

Busca Binária. Aula 05. Busca em um vetor ordenado. Análise do Busca Binária. Equações com Recorrência

Algoritmos e Estrutura de Dados. Algoritmos Prof. Tiago A. E. Ferreira

Tópico 5 Algoritmos de Ordenação. Parte I - métodos de ordenação: inserção, mergesort, heapsort e quicksort.

Geometria Computacional p.1/14. Geometria Computacional p.1/14

ESTRUTURAS DE DADOS E ALGORITMOS ALGORITMOS DE ORDENAÇÃO POR COMPARAÇÃO - II

Desafios de Programação

Aula 03: Análise de algoritmos melhor caso, pior caso e caso médio

Marcelo Keese Albertini Faculdade de Computação Universidade Federal de Uberlândia

Análise e Complexidade de Algoritmos

Análise e Síntese de Algoritmos. Programação Dinâmica CLRS, Cap. 15

Recursividade. Objetivos do módulo. O que é recursividade

CAL ( ) MIEIC/FEUP Técnicas de Concepção de Algoritmos, CAL MIEIC/FEUP, Fev. de Técnicas de Concepção de Algoritmos. .

CAL - Concepção e Análise de Algoritmos

Paradigmas de Projetos de Algoritmos

Análise de Algoritmos

Caminho mais curto a partir de um nó Algoritmos de Dijkstra e Bellman-Ford. O problema tem subestrutura óptima

Introdução Paradigmas

Projeto de Algoritmos e Indução Matemática

Programação I Aula 15 Definições recursivas

Caminho mais curto a partir de um nó Algoritmos de Dijkstra e Bellman-Ford

Problema de seleção de atividades. Aula 14. Exemplo. Algoritmos Gulosos. Algoritmos Gulosos. Intervalo: par ordenado de números

AED-II, 2011/2012 Trabalho prático 1

Análise e Síntese de Algoritmos. Revisão CLRS, Cap. 4, 6

Mediana. Aula 09. Menor. i-ésimo menor elemento. Algoritmo de Seleção. -ésimo menor elemento. Mediana é o n+1. -ésimo menor ou o n+1

Teoria dos Conjuntos. (Aula 6) Ruy de Queiroz. O Teorema da. (Aula 6) Ruy J. G. B. de Queiroz. Centro de Informática, UFPE

Programação I Aula 16 Mais exemplos de recursão Pedro Vasconcelos DCC/FCUP

Análise e Síntese de Algoritmos. Revisão CLRS, Cap. 7-10

Complexidade de Algoritmos

Programação Dinâmica I SCC0210 Algoritmos Avançados (2/2011) Lucas Schmidt Cavalcante

Algoritmos e Estruturas de Dados I Linguagem C

QuickSort CI/2015. Análise e Projeto de Algoritmos. - Prof. Lucídio A. F. Cabral

CIC 110 Análise e Projeto de Algoritmos I

ESTRUTURA DE DADOS E ALGORITMOS. Árvores Binárias de Busca. Cristina Boeres

Programação Estruturada

Análise e Projeto de Algoritmos

MAC121 ALGORITMOS E ESTRUTURAS DE DADOS I 2O. SEMESTRE DE 2017

Lógica de Hoare. Abordagem que usaremos: aplicar o método de Hoare sobre uma linguagem de programação imperativa simplificada.

Ordenação: MergeSort. Prof. Túlio Toffolo BCC202 Aula 14 Algoritmos e Estruturas de Dados I

AED2 - Aula 11 Problema da separação e quicksort

Estruturas Discretas

Técnicas de Desenho de Algoritmos

Técnicas de Desenho de Algoritmos

Programação I Aula 15 Definições recursivas Pedro Vasconcelos DCC/FCUP

Teoria dos Grafos Aula 14

ALGORITMOS DE ORDENAÇÃO RECURSIVOS

Algoritmos e Estrutura de Dados

Luís Fernando Schultz Xavier da Silveira. 12 de maio de 2010

QuickSort. Estrutura de Dados II Jairo Francisco de Souza

Normalização: 3 a Forma Normal

ALGORITMOS AVANÇADOS. UNIDADE III Algoritmo de Ordenação por Intercalação (Mergesort) Luiz Leão

Classes, Herança e Interfaces

Quicksort. David Menotti Algoritmos e Estruturas de Dados II DInf UFPR

Planificação Anual da disciplina de Programação e Sistemas de Informação 10º 1PI

Análise de Algoritmos

Resposta da pergunta 2: Θ(n 3 ). Resposta da pergunta 8: 1. 7 O(n). Sim. 22. n log n O(1). Não. 3. n + 7 O(n). Sim. 4. n + 7 O(1). Não.

Medida do Tempo de Execução de um Programa. David Menotti Algoritmos e Estruturas de Dados II DInf UFPR

FICHA de AVALIAÇÃO de MATEMÁTICA A 10.º Ano de escolaridade Versão 2

INF111 Programação II Aulas 11, 12, 13 Ordenação

Universidade Federal de Santa Maria Colégio Agrícola de Frederico Westphalen Curso Superior de Tecnologia em Sistemas para Internet

Bubble Sort. Tempo total O(n 2 )

Recursividade. Estrutura de Dados. Prof. Kleber Rezende

Transcrição:

Divisão e Conquista: Par de Pontos mais Próximo Fernando Lobo Algoritmos e Estrutura de Dados II 1 / 18 Divisão e Conquista (cont.) Problema: Dado um conjunto de pontos no plano, obter o par de pontos mais próximo. Input: P = {p 1, p 2,..., p n} com p i = (x i, y i). Output: Um par de pontos p i e p j cuja distância seja mínima. 2 / 18

É fácil fazer um algoritmo de complexidade Θ(n 2 ), basta calcular a distância entre cada par de pontos e escolher o par com a distância mínima. Vamos ver um algoritmo de complexidade Θ(n lg n) obtido com a técnica de divisão e conquista. 3 / 18 Aplicações Computação gráfica. Sistemas de informação geográfica. Controlo de tráfego aéreo. etc. 4 / 18

Alguma ideia? 5 / 18 Divisão Divide o conjunto P em dois conjuntos, Q e R, cada qual com n/2 pontos. A divisão é feita através de mediana da coordenada x. 6 / 18

Conquista Resolve recursivamente o problema para Q e R. Se o n. o de pontos for suficientemente pequeno (por exemplo n <= 3) calcula-se à força bruta entre cada par de pontos. 7 / 18 Combinar: a parte difícil Temos de o fazer em Θ(n) para obtermos uma complexidade total de Θ(n lg n). A distância mínima será o mínimo de três coisas: d Q, d R, d QR (distância mínima entre um ponto de Q e um ponto de R). 8 / 18

Combinar (cont.) Seja δ = min(d Q, d R ) Para sabermos se existe algum par de pontos p i e p j, tal que p i Q, p j R e dist(p i, p j) < δ, basta verificar os pontos que estão a uma distância máxima de δ da linha L. Chamemos a esse conjunto de pontos S. 9 / 18 Reparem que potencialmente, S poderá conter os n pontos iniciais. Ou seja, até aqui ainda não garantimos que não tenhamos de calcular as distâncias entre cada ponto de Q com cada ponto de R, o que daria Θ(n 2 ). 10 / 18

Não pode haver mais do que um ponto por caixa. Se houvesse, estariam do mesmo lado (ambos em Q ou ambos em R) e teriam uma distância inferior a δ = uma contradição. 11 / 18 Se s 1 e s 2 são elementos de S e dist(s 1, s 2) < δ, então s 1 e s 2 têm de estar no máximo a 11 posições um do outro na sequência S y (S ordenado por y). Porquê? Só pode haver um ponto por caixa. Logo, 12 posições ou mais em y implica a existência de pelo menos 2 linhas horizontais entre s 1 e s 2 = dist(s 1, s 2) > δ. 12 / 18

Não é necessário estar a ordenar S em cada chamada recursiva. Se o fizéssemos obteríamos a recorrência T (n) = 2T (n/2) + Θ(n lg n). Não dá para aplicar o Teorema Mestre. Mas pode-se provar que T (n) = Θ(n lg n lg n). O objectivo é obtermos a recorrência T (n) = 2T (n/2) + Θ(n). Ou seja, o passo Combinar tem de ser feito em Θ(n). 13 / 18 A ideia é pré-ordenar o array P pela coordenada x (obtendo o array P x) e pela coordenada y (obtendo o array P y ). Depois cada chamada recursiva recebe dois arrays de pontos (ordenados por x e por y). Closest-Pair(P, n) P x = P ordenado por x / Θ(n lg n) P y = P ordenado por y / Θ(n lg n) (p1, p2) = Closest-Pair-Rec(P x, P y, n) 14 / 18

Closest-Pair-Rec(P x, P y, n) if n 3 Calcula a distância entre cada par de pontos e retorna o par cuja distância é mínima. else // divide P em Q e R Constrói Q x, Q y, R x, R y / Θ(n) (q1, q2) = Closest-Pair-Rec(Q x, Q y, nq) (r1, r2) = Closest-Pair-Rec(R x, R y, nr) dq = dist(q1, q2) dr = dist(r1, r2) δ = min(dq, dr) x = coordenada x do último ponto do array Q x // linha L : x == x // S = pontos em P que estão a uma distância // máxima de δ de L. Constrói S y a partir de P y / Θ(n) 15 / 18 (continuação...) Para cada s S y, calcular a distância de s a cada um dos próximos 11 pontos em S y. Seja (s1, s2) o par que obtém a distância mínima. if dist(s1, s2) < δ return (s1, s2) elseif dq < dr return (q1, q2) else return (r1, r2) 16 / 18

Para uma implementação concreta ainda faltam alguns detalhes Como obter Q x, Q y, R x, R y em Θ(n)? A divisão do problema em dois subproblemas foi feita através da mediana da coordenada x. Será que funciona se houver pontos com a mesma coordenada x? É trabalho para vocês pensarem. 17 / 18 Notas adicionais Este algoritmo foi inventado em inícios dos anos 70 por Shamos e Hoey. O limite dos 11 pontos pode ser reduzido. O livro CLRS refere apenas a verificação de 7 pontos. Em 2011, José Luís Pereira (um colega vosso que estava a fazer AED-II tal e qual como vós) demonstrou que com algumas modificações ao algoritmo, basta apenas verificar 2 pontos. (os interessados podem ler http://arxiv.org/abs/1010.5908) 18 / 18