Geometria Computacional Fecho Convexo II

Slides:



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

Árvores CC/EC/Mestrado Teoria dos Grafos ‏ 1.
AULA 02 PROGRAMAÇÃO LINEAR INTEIRA
AULA 01 PROGRAMAÇÃO DINÂMICA
Busca em Regiões Ortogonais
Python: Recursão Claudio Esperança.
Programação em Java Prof. Maurício Braga
Inteligência Artificial
Inteligência Artificial
Celso C. Ribeiro Caroline T. Rocha
Algoritmos para Geração de Variáveis Aleatórias
Geometria Computacional Galeria de Arte
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.
UNIVERSIDADE LUTERANA DO BRASIL COMUNIDADE EVANGÉLICA LUTERANA SÃO PAULO Reconhecida pela Portaria Ministerial nº 681 de 07/12/89 – DOU de 11/12/89 Campus.
Problemas de fluxo numa rede
2 de Junho de 2005Conclusão1 Pedro Barahona DI/FCT/UNL Junho 2005.
1 Conclusão DI/FCT/UNL 1º Semestre 2004/ Ciclos de Simulação A técnica usada no exemplo da queda livre pode ser utilizada para trajectórias a duas.
Vetores Representação e características Operações I Decomposição
SISTEMAS DE EQUAÇÕES.
Modelos no Domínio do Tempo de Sistemas LTI Contínuos
PARTIÇÃO DE BENDERS Secundino Soares Filho Unicamp.
Análise Projeto de Algoritmos
Inteligência Artificial
Instituto de Computação - UFF Detecção de Terminação Algoritmos Distribuídos Professora: Lúcia Drummond.
1 Complexidade de Algoritmos Complexidade de pior caso Complexidade de melhor caso de uso bem menos freqüente em algumas situações específicas Complexidade.
Algoritmos Distribuídos Professora: Lúcia Drummond
Árvores.
1 MergeSort Seja uma lista A de n elementos. O algoritmo consiste das seguintes fases Dividir A em 2 sub-listas de tamanho n/2 Conquistar: ordenar cada.
2002 LCG/UFRJ. All rights reserved. 1 Arranjos Claudio Esperança Paulo Roma.
Introdução à Computação Gráfica Recorte
Geometria Computacional Interseção de Segmentos
Interseção de Semiplanos
2002 LCG/UFRJ. All rights reserved. 1 Programação Linear Claudio Esperança Paulo Roma.
Geometria Computacional Fecho Convexo
Geometria Computacional Primitivas Geométricas
Decomposição Trapezoidal
2002 LCG/UFRJ. All rights reserved. 1 Localização no Plano Claudio Esperança Paulo Roma.
Claudio Esperança Paulo Roma
Decomposição Trapezoidal
DIM102 1 Curvas e Superfícies 35T56 – Sala 3F4 Bruno Motta de Carvalho DIMAp – Sala 15 – Ramal 227.
Árvore Geradora de Peso Mínimo
CIRCUNFERÊNCIAS E ÂNGULOS
Polinômios Prof. Marlon.
Dividir-e-Conquistar
Questões sobre quatro quadrados
Inteligência Artificial
Indexação de Arquivos Página de rosto.
Expressão algébrica a partir da representação gráfica da função
Desempenho de Algoritmos Genéticos
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.
Cálculo Numérico / Métodos Numéricos
Funções e suas propriedades
Noções de trigonometria e funções trigonométricas
Arquitetura de computadores
Computação Gráfica Aula 11 Curvas Prof. Leo.
Aula 08 Medidas de posição - Prof. Diovani Milhorim
Busca com informação e exploração
Introdução e Busca Cega
Rotação Simples e Dupla Katia Guimarães
Introdução à Computação Gráfica Curvas
Campus de Caraguatatuba Aula 12: Sistemas de Equações Lineares (2)
Conceitos básicos em grafos
Fundamentos de Programação
Ceça Moraes – Introdução à Programação SI1
1 A COMPUTAÇÃO MODERNA Valdemar W. Setzer Depto. de Ciência da Computação da USP
Campus de Caraguatatuba Licenciatura em Matemática Semestre de 2013
Lógica para Computação Prof. Celso Antônio Alves Kaestner, Dr. Eng. celsokaestner (at) utfpr (dot) edu (dot) br.
Geometria Computacional Fecho Convexo
Introdução à Computação Gráfica Rasterização
Transcrição da apresentação:

Geometria Computacional Fecho Convexo II Claudio Esperança Paulo Roma Cavalcanti

Marcha de Jarvis (Gift Wrapping) Análogo ao algoritmo de ordenação “Selection Sort” A cada passo, escolhe o menor dos valores e acrescenta à coleção ordenada Analogamente, deseja-se obter a cada passo o próximo ponto do fecho convexo (em ordem anti-horária) Se pi –1pi é a última aresta acrescentada, o próximo vértice pi+1 é aquele que maximiza o ângulo pi –1pi pi+1 Durante a iniciação assume-se p1 = ponto com menor coordenada y e p0 um ponto com coordenada x = - ∞

Marcha de Jarvis (Gift Wrapping)

Marcha de Jarvis (Gift Wrapping)

Marcha de Jarvis - Complexidade Claramente, escolher o próximo vértice é O(n) Se o fecho convexo tem h vértices, então, o algoritmo tem complexidade O (nh) No pior caso, n ≈ h e o algoritmo tem complexidade O (n2), pior, portanto que o algoritmo de Graham No melhor caso, h é o(log n), isto é, assintoticamente menor que log n, o que o torna melhor que o algoritmo de Graham

Algoritmo Sensível à Saída Um algoritmo ótimo deveria rodar em O (n log h) Comporta-se como marcha de Jarvis para saídas pequenas Comporta-se como a varredura de Graham para saídas grandes (≈ número total de pontos) Kirkpatrick e Seidel desenvolveram um algoritmo O (n log h) em 1986 Muito complicado Em 1996, Chan apresenta um algoritmo ótimo relativamente simples Combina marcha de Jarvis e varredura de Graham!

Algoritmo de Chan Idéia geral Divide-se os n pontos em grupos contendo não mais que m pontos r = n/m grupos no total Computa-se o fecho convexo de cada grupo usando varredura de Graham Computa-se o fecho convexo geral aplicando-se a marcha de Jarvis sobre os fechos dos grupos É necessário empregar um algoritmo para obter a tangente entre um ponto e um polígono com m lados em tempo O (log m)

Computando Tangentes São dados um polígono convexo com m vértices p0, p1 ...pm – 1 (circulação anti-horária) e um ponto q fora do polígono Deseja-se obter uma semi-reta que passa por q e é tangente ao polígono num ponto t de tal forma que qualquer vértice pi do polígono é tal que orientação (q,t,pi)  horária pi t = pj q

Computando Tangentes Assumimos que os vértices p0, p1 ...pm – 1 estão armazenados num array e que os índices são tomados módulo m O algoritmo funciona à semelhança do algoritmo de busca binária A cada passo examina-se um vértice pj sabendo que o vértice t procurado está entre pj e pj+a-1 ou entre pj-b+1 e pj ou Inicialmente, a = b = m pj+a-1 pj q pj-b+1

Computando Tangentes pj é classificado examinando seus vizinhos pj+1 e pj-1 1o caso: orientação (q, pj, pj+1)  horária e orientação (q, pj, pj-1)  horária Algoritmo termina com t = pj pj-1 pj+1 q pj

Computando Tangentes 2o caso: orientação (q, pj, pj+1)  horária e orientação (q, pj, pj-1) = horária t está entre pj-b+1 e pj pj+1 pj q pj-1

Computando Tangentes 3o caso: orientação (q, pj, pj+1) = horária e orientação (q, pj, pj-1)  horária t está entre pj e pj+a-1 pj-1 pj q pj+1

Computando Tangentes 4o caso: orientação (q, pj, pj+1) = horária e orientação (q, pj, pj-1) = horária Se orientação (q, pj, pj+a-1)  horária Então t está entre pj e pj+a-1 Senão t está entre pj-b+1 e pj pj pj-1 pj+1 q

Computando Tangentes Sempre que se opta por um intervalo, este é partido em dois semi-intervalos e o vértice do meio é testado a seguir Pode-se ver que este processo tem no máximo log2 m iterações Como cada teste é O (1), o algoritmo tem complexidade de pior caso O (log m)

Algoritmo de Chan (Fecho Parcial) Dados um conjunto P com n pontos e um valor m < n: Divide-se P em r = n/m grupos P1... Pr , cada um contendo não mais que m pontos Para i = 1 até r fazer Computar Fecho (Pi) usando Graham Seja p0 = (–∞, 0) e p1 = ponto de P com menor coordenada y Para k = 1 até m fazer Computar o ponto qi de Pi que maximiza o ângulo  pk-1pkqi Fazer pk+1 = ponto q  { q1 ... qr } que maximiza o ângulo pk-1pkq Se pk+1 = p1 então retornar  p1 ... pk  Retornar “m muito pequeno!”

Algoritmo de Chan

Complexidade do Algoritmo de Chan No passo 2 computamos r fechos de conjuntos com m pontos: O (r m log m) No passo 4 temos: Em 4a computamos r tangentes de conjuntos com m pontos: O (r log m) Em 4b computamos uma etapa da marcha de Jarvis, a um custo de O(r) Como o passo 4 tem m iterações, o custo total é O (r m log m) Portanto, o algoritmo tem complexidade O (r m log m) = O (n log m) Se pudermos adivinhar um valor de m tal que m≈h, poderemos assegurar complexidade O (n log h)

Adivinhando o valor de h 1a idéia: tentar m = 1, 2, 3, etc Converge muito lentamente 2a idéia: usar busca binária Converge rápido, mas se usarmos um valor muito alto de m (n/2, por exemplo) teremos complexidade O (n log n) 3a idéia: iniciar com m pequeno e incrementar muito rapidamente Dependência de m está no termo log Se chamarmos a rotina com m = hc para alguma constante c, teremos complexidade O (n log h) Solução: m = 2k, para k = 21, 22, 23, etc

Algoritmo de Chan Para t = 1, 2, ... fazer k ← 2t m ← min (2k , n) Chamar Fecho Parcial (P, m) Se resultado ≠ “m pequeno demais” retornar Quantas iterações? O algoritmo termina quando t = lg lg h Cada iteração leva tempo O (n log 22t) = O (n 2t)

Tempo Ótimo Um problema relacionado consiste em verificar se o fecho de um dado conjunto com n pontos tem h vértices Prova-se que este problema é resolvido em Ω(n log h) O problema do fecho convexo, que garantidamente é mais complexo que este, não pode portanto ser resolvido em menos que O(n log h)

Número esperado de vértices no fecho Para pontos distribuídos uniformemente em um quadrado de lado unitário, prova-se que o número esperado de pontos no fecho é O (log n) Prova: Todo ponto do fecho é máximo para alguma das 4 orientações do quadrado (Nem todo ponto máximo é do fecho) Prova-se que o número esperado de pontos máximos é O (log n)

Número esperado de vértices no fecho

Número esperado de vértices no fecho Ordena-se os pontos em ordem decrescente de x: p1, p2, ... pn Se o ponto pi é máximo, então sua coordenada y é ≥ que a coordenada y de p1, p2, ... pi Como a distribuição é uniforme, a chance de isso acontecer é 1/i Temos então como a soma das expectativas: