5. Invólucros Convexos no Plano (cont )

Documentos relacionados
5. Invólucros Convexos no Plano

Imagination is more important than knowledge A. Einstein. 4. Partição de Polígonos. Mestrado em Matemática e Aplicações

5. Invólucros Convexos no Plano (cont )

Geometria Computacional: Fecho convexo

Professor: Anselmo Montenegro Conteúdo (aula 6): - Fecho Convexo 2D. Instituto de Computação - UFF

Interseção de Semiplanos

Análise e Complexidade de Algoritmos

Ponto em Polígono. António Leslie Bajuelos Departamento de Matemática Universidade de Aveiro

Análise e Complexidade de Algoritmos

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

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

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

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

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

Solução de Recorrências

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

2.5 Triangulação de Delaunay

Algoritmos de Ordenação: MergeSort

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

Análise de complexidade

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

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

Transformações de Visualização 2D: Clipping. Antonio L. Bajuelos Departamento de Matemática Universidade de Aveiro

Algoritmos e Estruturas de Dados LEE 2013/2014. popular devido à facilidade de implementação e eficiência

Algoritmos de Ordenação: QuickSort

Estruturas de Dados 2

Projeto de Algoritmos e Indução Matemática

Particionamento de Polígonos João Comba. Problema da Galeria de Arte. The Walters Art Museum, Baltimore, EUA

Geometria Computacional

Análise de Complexidade para algoritmos iterativos e recursivos

Métodos de Ordenação Parte 3

BCC202 - Estrutura de Dados I

QuickSort. Algoritmos e Estruturas de Dados Verão Cátia Vaz 1

Algoritimos e Estruturas de Dados III CIC210

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

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

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

Arranjos. Claudio Esperança Paulo Roma LCG/UFRJ. All rights reserved.

AULA 19 AULA 20. Ordenação: algoritmo Quicksort. Resumo. Melhores momentos

GEOMETRIA DESCRITIVA A

Projeto e Análise de Algoritmos

SUMÁRIO. Fundamentos Árvores Binárias Árvores Binárias de Busca

Material Teórico - Módulo: Vetores em R 2 e R 3. Módulo e Produto Escalar - Parte 2. Terceiro Ano - Médio

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

Algoritmos de Ordenação

Algoritmos geométricos

5. Algoritmos de Ordenação

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

Prova 1 PMR2300 / PMR3201 1o. semestre 2015 Prof. Thiago Martins

Algoritmo MergeSort. Estrutura de Dados II Prof Jairo Francisco de Souza

Matemática A. Versão 2 RESOLUÇÃO GRUPO I. Teste Intermédio de Matemática A. Versão 2. Teste Intermédio. Duração do Teste: 90 minutos

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

Coordenadas Cartesianas

Estrutura de Dados. Algoritmos de Ordenação. Prof. Othon M. N. Batista Mestre em Informática

Algoritmos e Complexidade

Geometria Analítica. Geometria Analítica 28/08/2012

Métodos iterativos dão-nos uma valor aproximado para s. Sequência de valores de x que convergem para s.

ALGORITMOS DE ORDENAÇÃO RECURSIVOS

CES-11. Noções de complexidade de algoritmos. Complexidade de algoritmos. Avaliação do tempo de execução. Razão de crescimento desse tempo.

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

Prova 1 PMR3201 Computação para Automação 1o. semestre 2016 Prof. Thiago de Castro Martins

ALGORITMOS E ESTRUTURAS DE DADOS CES-11 Prof. Paulo André Castro Sala 110 Prédio da Computação IECE - ITA

ESCOLA E B 2,3/S MIGUEL LEITÃO DE ANDRADA - AGRUPAMENTO DE ESCOLAS DE PEDRÓGÃO GRANDE DEPARTAMENTO DAS CIÊNCIAS EXATAS 2015/2016

QuickSort. Estrutura de Dados II Jairo Francisco de Souza

É interessante comparar algoritmos para valores grandes de n. Para valores pequenos de n, mesmo um algoritmo ineficiente não custa muito para ser

Algoritmos de Ordenação

6. Pesquisa e Ordenação

Análise e Complexidade de Algoritmos

Algoritmos de Ordenação. Profº Carlos Alberto T. Batista

Visualização 2D: - Transformação window to viewport - Clipping

ALGORITMOS E ESTRUTURAS DE DADOS 2011/2012 ANÁLISE DE ALGORITMOS. Armanda Rodrigues 3 de Outubro 2011

Busca em Regiões Ortogonais

Projeto e Análise de Algoritmos

BCC402 Algoritmos e Programação Avançada Prof. Marco Antonio M. Carvalho Prof. Túlio Ângelo M. Toffolo 2011/1

A equação da circunferência

Matemática A. Versão 1 RESOLUÇÃO GRUPO I. Teste Intermédio de Matemática A. Versão 1. Teste Intermédio. Duração do Teste: 90 minutos

Análise e Complexidade de Algoritmos

Capacitação em Linguagem C Parte 2

Questões. 2ª Lista de Exercícios (Geometria Analítica e Álgebra Linear) Prof. Helder G. G. de Lima 1

Paradigmas de Projetos de Algoritmos

Professor: Anselmo Montenegro Conteúdo (aula 10): - Triangulações de Delaunay. Instituto de Computação - UFF

Estruturas de Dados Algoritmos de Ordenação

Ponto q está no polígono?

EXAME DE GEOMETRIA DESCRITIVA A - Código 708 / ª Fase EXERCÍCIO 1

Geometria Computacional

Computers do not solve problems, People do! E.R.Davidson

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

Deste modo, ao final do primeiro minuto (1º. período) ele deverá se encontrar no ponto A 1. ; ao final do segundo minuto (2º. período), no ponto A 2

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

XXVIII Olimpíada Brasileira de Matemática GABARITO Segunda Fase

Capítulo Coordenadas no Espaço. Seja E o espaço da Geometria Euclidiana tri-dimensional.

Árvores & Árvores Binárias

Estrutura de Dados Conceitos Iniciais

Complexidade de Algoritmos

Carlos Eduardo Batista. Centro de Informática - UFPB

Universidade Estadual de Mato Grosso do Sul Bacharelado em Ciência da Computação Algoritmos e Estruturas de Dados II Prof. Fabrício Sérgio de Paula

MÉTODOS DE ORDENAÇÃO. Introdução à Programação SI2

Transcrição:

5. Invólucros Convexos no Plano (cont ) António Leslie Bajuelos Departamento de Matemática Universidade de Aveiro Mestrado em Matemática e Aplicações Algoritmo Quickhull Foi proposto independentemente por várias pessoas quase ao mesmo tempo. Devido à semelhança com o algoritmo QuickSort, o algoritmo que estudaremos foi baptizado de QuickHull por Preparata e Shamos. Ideia básica do algoritmo: para a maioria dos conjuntos de pontos é mais fácil descartar muitos pontos que estão no interior do invólucro convexo e concentrar o trabalho nos pontos que estão próximos da fronteira 2 1

Algoritmo Quickhull Pré-Processamento Heurística simples e eficiente (S. Aki e G. Toussaint, 1978). Excluir (rapidamente) pontos que, de certeza, não fazem parte do invólucro convexo Heurística Nº1: Encontrar os pontos extremos nas direcções: mais alta, mais baixa, mais à esquerda e mais à direita (em caso de empate escolha, por exemplo, os pontos com a menor x-coordenadas ou y-coordenadas). A seguir podemos excluir os pontos interiores ao quadrilátero formado pelos pontos encontrados anteriormente, por não fazerem parte do invólucro convexo. 3 Algoritmo Quickhull Dividir o nosso problema se reduz a quatro subproblemas independentes: quatro regiões triangulares exteriores ao quadrilátero a b b a a b b a 4 2

Algoritmo Quickhull Conquistar Determinar o invólucro convexo dos pontos contidos nas quatro regiões ti triangulares exteriores ao quadrilátero 5 Algoritmo Quickhull Combinar Concatenar as quatro cadeias correspondentes às quatro regiões obtidas para obter o conv(s) 6 3

Algoritmo Quickhull Execução da fase Conquistar Seja S o conjunto de pontos de um desses subconjuntos. Sejam a e b os pontosextremosdes que formam a base do futuro triângulo. Basta procurar o ponto extremo c de S e descartar os pontos que estão no interior do Δ(a,b,c). Depois disto o nosso problema fica dividido em dois problemas idênticos menores (S 1 e S 2 ) 7 Algoritmo Quickhull Execução da fase Conquistar (cont ) Como determinar o ponto c? Escolher o ponto mais distante da recta de suporte do segmento ab. Seguidamente classificamos os outros pontos. Seja p um ponto de S Se A(Δ(a,c,p)) = 0 A(Δ( c,b,p)) = 0 p sobre a aresta descartar Se A(Δ(a,c,p)) < 0 A(Δ( c,b,p)) < 0 p dentro do triângulo descartar Senão, Se A(Δ(a,c,p)) > 0 p fora da aresta ac Se A(Δ( c,b,p)) > 0 p fora da aresta cb O algoritmo é aplicado recursivamente aos grupos das novas arestas assim formadas. 8 4

Algoritmo Quickhull resolução de cada sub-problema Dados de Entrada: dois pontos distintos a e b e um conjunto finito S ={p 1,,p k }dek pontos no plano tal que todos os pontos de S estãoà direita de ab Dados de Saída: as arestas que definem conv(s), orientadas no sentido positivo Algoritmo: if S = then return ab else c ponto com distância máxima S 1 pontos à direita de ca S 2 pontos à direita de bc return Quickhull (a,c,s 1 ) concatenado com Quickhull (c,b,s 2 ) Da união dos vértices resultantes dos 4 sub-problemas iniciais resulta o invólucro convexo de S 9 Algoritmo Quickhull Exemplo da execução do Algoritmo de Quickhull 10 5

Algoritmo Quickhull Análise: Encontrar os quatro pontos extremos que formam o quadrilátero inicial durante o pré-processamento é O(n) operações elementares onde n é o número de pontos de S. Então a complexidade do algoritmo só depende do número de pontos no conjunto S 1 e S 2.Seja S 1 =α e S 2 =β. Se T(n) - função complexidade de tempo do algoritmo QuickHull para encontrar o conv(s) com n pontos teremos que T(n) T(α) +T(β) +cn, onde o termo cn da desigualdade corresponde ao número de operações gastas pelo algoritmo para encontrarmos o ponto c e construirmos S 1 e S 2 Quando α + β = n e cada sub-problema tem aproximadamente o mesmo tamanho teremos que: T(n) T( n/2 ) + T( n/2 ) + cn = O(n log n) T(n) =O(n log n) é o melhor que pode ocorrer se tivermos α + β =n. No pior caso, a sua complexidade de tempo é O(n 2 ), isto ocorre quando α + β = n e α =1 e β =n-1 Nesse caso a nossa recorrência toma a forma: T(n) T(n-1) + cn = T(n-2) + c(n-1) +cn.repetindo a expansão nos chegaremos a: T(n) c+c2 + +c(n-2)+c(n-1)+cn = O(n 2 ). 11 Algoritmo Quickhull Exercício: Analisar a complexidade da seguinte função que representa um algoritmo recursivo, típicos de problemas resolvidos pelo método dividir-para conquistar. Paraocasogeral n > 1, o processo divide o problema em duas metades de aproximadamente o mesmo tamanho. Quando este processo termina necessita um tempo linear para combinar os resultados obtidos nas duas metades Solução: T(n) = 2T(n/2)+c 2 n sen>1 d sen 1 Para n > 2 temos que T(n/2) = 2T(n / 4) + c 2 n/2 Substituindo em T(n): T(n) = 2(2T(n / 2 2 )+c 2 n/2) + c 2 n=2 2 T(n / 2 2 )+2 c 2 n Para o termo i temos que T(n) = 2 i T(n / 2 i )+i c 2 n Deve existir k tal que 2 k n; k = log 2 n Por tanto T(n) = nt(n / n) + k c 2 n=nt(1)+c 2 nlog 2 n=n+nlog 2 n O(n log n) 12 6

Algoritmo Quickhull Exemplo do melhor caso do algoritmo QuickHull 13 Algoritmo Quickhull Outra forma de iniciar o algoritmo: Heurística Nº 2: Escolher apenas os pontos de maior e menor abcissa S 1 b a S 1 a b b a S 1 a b S 2 S 2 IMAGEM S 2 c S 1 S 1 S 1 b a a b c S 2 S 2 S 2 14 7

Algoritmo Quickhull Outra forma de iniciar o algoritmo: Heurística Nº 3: Escolher uma qualquer aresta de conv(s) pode ser obtida, por exemplo, através de uma iteração do algoritmo de Jarvis 15 Algoritmo de Graham (o primeiro algoritmo óptimo) Segundo O Rourke talvez o primeiro artigo na área de Geometria Computacional tenha sido o de Graham Ideia geral do algoritmo: 1ª Fase: consiste de um pré-processamento onde primeiramente, um ponto p 0 de S é seleccionado e depois os pontos restantes são ordenados (segundo os seus ângulos) ao redor de p 0 2ª Fase: o algoritmo processa iterativamente os pontos produzindo uma sequência de invólucros convexos que converge para conv(s) 16 8

Algoritmo de Graham (o primeiro algoritmo óptimo) A etapa de pre-processamento (ordenação) reduz o problema de encontrar o invólucro convexo de um conjunto de pontos ao problema de encontrar o invólucro convexo de um polígono estrelado 0 17 Algoritmo de Graham (o primeiro algoritmo óptimo) Dados de Entrada: um conjunto finito S ={p 1,,p n } de n pontos no plano Dados de Saída: um conjunto finito S={,,q n } de n pontos no plano Algoritmo Graham (1ª Fase): ponto de S com menor y-coordenada v vector horizontal que passa por e é orientado para a direita Ordenar os pontos p i em relação ao ângulo polar que v forma com p i Output: {,,q n } pela ordem definida v v 0 v 18 9

Algoritmo de Graham (o primeiro algoritmo óptimo) Dados de Entrada: um conjunto finito S={,,q n } de n pontos no plano previamente ordenados Dados de Saída: as arestas que definem conv(s), orientadas no sentido positivo Algoritmo Graham (2ª Fase): : T Empilhar, e (nesta ordem) na pilha T i 4 While i < n do p t ponto do topo de T p t-1 ponto abaixo de p t em T If p i está à esquerda do segmento p t-1 p t then empilhar p i em T i i +1 else desempilhar p t de T return T 0 19 Algoritmo de Graham (o primeiro algoritmo óptimo) Exemplo da execução (2ª Fase) q 3 q 0 0 0 0 0 0 20 10

Algoritmo de Graham (o primeiro algoritmo óptimo) Exemplo da execução (2ª Fase) q3 q3 0 0 0 q q q q 6 6 q 5 q 3 0 0 0 21 Algoritmo de Graham (o primeiro algoritmo óptimo) Exemplo da execução (2ª Fase) q 3 0 0 0 0 0 0 0 11

Algoritmo de Graham (o primeiro algoritmo óptimo) Análise do algoritmo (algumas observações) O número de operações DESEMPILHA é menor que o número de operações EMPILHA (já que, e q n nunca serão desempilhados de T). Como o número total de operações EMPILHA executadas durante todo o algoritmo será n, então o número de operações DESEMPILHA será menor que n. Logo o tempo total gasto com as operações EMPILHA e DESEMPILHA ao longo da execução do algoritmo é O(n) O número total de execuções do comando WHILE será O(n) 23 Algoritmo de Graham (o primeiro algoritmo óptimo) Complexidade: O(n log n) O(n) O(1) O(n log n) O(1) O(n) ponto de S com menor ordenada v vector horizontal que passa por e é orientado para a direita Ordenar os pontos p i em relação ao ângulo polar que v forma com p i Output: {,,q n } pela ordem definida T Empilhar, e (nesta ordem) na pilha T i 4 While i < n do p t ponto do topo de T p t-1 ponto abaixo de p t em T If p i está à esquerda do segmento p t-1 p t then empilhar p i em T i i + 1 else desempilhar p t de T Return T 24 12

Algoritmo de Graham (o primeiro algoritmo óptimo) Observações relevantes: 1. O algoritmo de Graham é óptimo O(n log n) 2. Salienta-se ainda a eficiência da estrutura de dados utilizada (pilha) 3. O algoritmo de Graham não se generaliza a dimensões superiores. 4. Não é um algoritmo on-line visto que todos os pontos devem estar disponíveis i no início i da execução do algoritmo. 5. Quando os pontos estão em posição convexa, nenhum ponto é eliminado através do algoritmo. 25 Algoritmo Incremental Ideia geral: Conhecendo conv(s ), onde S tem n-1 pontos, construir o conv(s { p n }) A cada novo ponto p n a considerar, pode acontecer um dos seguintes casos: (i) p n conv(s ) conv(s ) = conv(s {p n }) (ii) p n conv(s ) devemos construir um novo invólucro convexo encontrar duas rectas que passam pelo ponto p n e que são tangentes ao conv(s ), e então modificar o invólucro convexo de maneira conveniente. (i) (ii) 26 13

Algoritmo Incremental Observação: Como determinar que p Q? Para decidir se p Q, podemos utilizar a função primitiva Lefton. Este teste pode ser feito em tempo O(n). p Q sse está à esquerda ou sobre cada aresta (orientada positivamente) do polígono Q 27 Algoritmo Incremental Observação: Como determinar, quando p Q, os pontos de tangencia com o conv(q)? É possível utilizar o predicado Lefton para encontrar o ponto de tangencia mais baixo de p i. p está à esquerda de p i-1 p i eàdireitadep i p i+1 Para o ponto de tangencia mais alto o raciocínio é análogo. Este teste também pode ser feito em tempo O(n) 28 14

Algoritmo Incremental Dados de Entrada: Um polígono convexo Q com m vértices e um ponto p Q Dados de Saída: Os dois vértices de tangencia de Q em relação a p Algoritmo Vértices Tangentes (Q, p): for i = 1,..., m do if Lefton(p i, p i+1, p) Lefton(p i+1, p i+2, p) then p i é um vértice de tangencia 29 Algoritmo Incremental Observação: Como construir o novo polígono a partir no polígono Q, do ponto p e dos de tangencia, por exemplo p i e p j? Novo polígono Q = {p 0, p 1,,p i, p, p j, p j+1,,p n } Se os vértices de Q estiveram representados numa lista duplamente ligada (em sentido anti-horário) então a actualização de Q poderá ser feita através de uma simples sequencia de remoções e uma inserção 30 15

Algoritmo Incremental Dados de Entrada: um conjunto finito S={p 1,,p n } de n pontos no plano Dados de Saída: as arestas que definem conv(s), orientadas no sentido positivo Algoritmo Incremental (ideia geral): Q 3 conv({p 1, p 2, p 3 }) for k = 4,..., n do Q k conv (Q k-1 {p k }) return Q n 31 Algoritmo Incremental Análise: Decidir si p QéO(n) Q 3 conv({p 1, p 2, p 3 }) for k = 4,..., n do Q k conv (Q k-1 {p k }) return Q n Se p Q, então os vértices de tangencia podem ser encontrados em O(n) O número de remoções da lista circular que armazena os vértices de Q pode ser actualizada através de operações de inserções e remoções. O número total de remoções é menor que o número total de inserções que é igual a n. A complexidade de tempo do Algoritmo Incremental é O(n 2 ) 32 16

Algoritmo MergeHull (outro algoritmo de divisão e conquista) Generalidades: O MergeHull é um algoritmo de divisão e conquista que encontra o invólucro convexo de um conjunto de n pontos no plano em tempo O(n log n) Atécnicadedivisãoeconquistaéaúnicaconhecidaqueaoser estendida para o problema do invólucro convexo tri-dimensional atinge a mesma complexidade, i.e. O(n log n) Este método foi desenvolvido por Preparata e Hong em 1977. Por causa da sua similaridade com o MergeSort, o algoritmo é muitas vezes chamado de MergeHull Assumiremos que os pontos do conjunto S estão em posição geral e qualquer dois pontos não têm a mesma x-coordenada. Para conseguirmos construir o invólucro convexo em O(n log n) é preciso que a fase combinar do algoritmo seja feita em O(n). 33 Algoritmo MergeHull (outro algoritmo de divisão e conquista) Dados de Entrada: um conjunto finito S={p 1,,p n } de n pontos no plano Dados de Saída: as arestas que definem conv(s), orientadas no sentido positivo Algoritmo MergeHull (S) (1) if S k 0, (k 0 constante pequena) then construir conv(s); return (2) (Dividir) Particionar S em S 1 e S 2 ; S 1 = n/2 ; S 2 = n/2 ; (3) (Conquistar) Recursivamente construir conv(s 1 ) e conv(s 2 ) (4) (Combinar) A partir de conv(s 1 ) e conv(s 2 ) construir conv(s 1 S 2 ) 34 17

Algoritmo MergeHull (outro algoritmo de divisão e conquista) Descrição do Algoritmo 1ª Fase: Pre-Processamento Para facilitarmos a fase conquistar, antes de aplicarmos o algoritmo MergeHull, ordenamos o conjunto de pontos em relação as suas x-coordenadas. q 2 q3 35 Algoritmo MergeHull (outro algoritmo de divisão e conquista) Descrição do Algoritmo 2ª Fase: Dividir Dividir S em S 1 e S 2 segundo a mediana das x coordenadas e tais que S 1 = n/2 e S 2 = n/2. Esta escolha de conjuntos S 1 e S 2 e pela hipótese de que S não tem dois pontos com a mesma x-coordenada garante que conv(s 1 ) conv(s 2 )=. q q 2 q 3 q S 6 1 S 2 36 18

Algoritmo MergeHull (outro algoritmo de divisão e conquista) Descrição do Algoritmo 3ª Fase: Conquistar Corresponde a chamadas recursivas onde cada subproblema será resolvido independentemente, até que o número de pontos seja suficientemente pequeno (k 0 ). Por exemplo se k 0 = 3, o invólucro convexo é um triângulo pela hipótese de posição geral. q 2 q 2 q3 37 Algoritmo MergeHull (outro algoritmo de divisão e conquista) Descrição do Algoritmo 4ª Fase: Combinar Atenção: Precisamos ser cuidadosos para realizarmos este passo em tempo linear. Nesta fase vamos procurar duas rectas tangentes a conv(s 1 ) e conv(s 2 ): uma tangenciando os invólucros convexos por baixo e outra tangenciando por cima. A partir destas tangentes é fácil construirmos o conv(s 1 S 2 ) em tempo linear. 38 19

Algoritmo MergeHull (outro algoritmo de divisão e conquista) Descrição do Algoritmo 4ª Fase: Combinar (cont ) Denotaremos por u i e v j os vértices de conv(s 1 ) e conv(s 2 ), respectivamente. Seja t = u i v j o segmento de recta que determina a tangente inferior. O problema e que não sabemos de antemão quais os vértices de u i de conv(s 1 ) e v j conv(s 2 ) que são extremidades de t. A procura do segmento t começa por iniciar t como sendo o segmento formado pelo vértice u i mais à direita de conv(s 1 1) e pelo vértice v j maisàesquerdadeconv(s 2 ), e deixar t cair, primeiro escorregando de um lado e depois do outro, e assim sucessivamente até que as extremidades do segmento procurado sejam encontradas 39 Algoritmo MergeHull (outro algoritmo de divisão e conquista) Descrição do Algoritmo 4ª Fase: Combinar (cont ) 40 20

Algoritmo MergeHull (outro algoritmo de divisão e conquista) Descrição do Algoritmo 4ª Fase: Combinar (cont ) Algoritmo Tangente Inferior Entrada: dois invólucros convexos, CH(S 1 ) e CH(S 2 ), separados por uma recta vertical Saída: o segmento tangente inferior a CH(S 1 ) e CH(S 2 ) u i vértice mais a direita de CH(S 1 ) v j vértice mais a esquerda de CH(S 2 ) WHILE t = u i v j não é tangente inferior de CH(S 1 ) e CH(S 2 ) WHILE t não é tangente inferior de CH(S 1 ) i i -1 WHILE t não é tangente inferior de CH(S 2 ) j j+1 return t Observação: no algoritmo acima, a frase t =u i v j não é tangente inferior de CH(S 1 ) é equivalente a dizermos u i-1 está à direita de u i v j 41 Algoritmo MergeHull (outro algoritmo de divisão e conquista) Análise: A complexidade temporal do pré-processamento (ordenação dos pontos) que é O(n( log n). ) A divisão é O(n) No caso combinar os ciclos são executados O(n) vezes. Se usarmos uma lista circular duplamente ligada para representar os invólucros convexos então, dadas as tangentes inferior e superior o novo invólucro convexo pode ser construído em O(n). Portanto, a complexidade total do passo combinar éo(n). A complexidade de tempo do algoritmo MergeHull é O(n log n). 42 21

Cota inferior do problema conv(s) Teorema: O problema da determinção do invólucro convexo de um conjunto S com n pontos não pode ser resolvido em menos que O(n log n) 43 Demonstrações A implementação de grande parte dos algoritmos estudados pode ser apreciada em: http://www.cse.unsw.edu.au/~lambert/java/3d/ 44 22