26/04/2012
Análise e Complexidade
d Al
de
Algoritmos
it
Introdução a algoritmos
geométricos e seus métodos
- varredura
- envoltória
ltó i convexa
Prof. Rodrigo Rocha
[email protected]
http://www.bolinhabolinha.com
Onde Estamos
 Ementa
• Revisão:
 Estrutura de dados;Crescimento de funções;
 Indução matemática e métodos matemáticos
matemáticos.
 Medidas de complexidade, análise assintótica de limites de
complexidades.
 Exemplos de análise de algoritmo iterativos e recursivos.
 Análise de desempenho de alguns algoritmos clássicos de
busca e ordenação.
 Introdução aos principais paradigmas do projeto de
algoritmos.
 Complexidade do Problema: Limites de Complexidade,
Intratabilidade, Classes P, NP, problemas Np completos e
NP-difíceis.
1
26/04/2012
Geometria computacional
 Geometria Computacional
• Anos 70
• resolver problemas geométricos
• uso em aplicações:
robótica
computação gráfica
cad
processamento de imagens
sistemas geográficos
biologia molecular
Geometria
 Elementos básicos geométricos (plano)
• Ponto
par
p de coordenadas x,y
,y
• Segmento
parte de uma reta delimitada por dois pontos
• Polígono
seqüência de pontos interligados por segmentos de
retas consecutivos e que se fecham. (não colineares)
2
26/04/2012
Problemas geométricos

Intersecção de segmentos de reta
•

Localização de um ponto
•

O ponto está fora ou dentro do polígono
Melhor caminho
•

dados dois segmentos de retas, verificar se há
intersecção
dado um conjunto de pontos, encontrar um
polígono aberto que não se cruze.
cruze
Envoltória convexa
•
Dado um conjunto de pontos S, a envoltória
convexa de S é o menor polígono convexo que
contém todos os pontos de S.
Intersecção de segmentos
 Os segmentos (a,b) e (c,d) se interceptam ?
 Resolução
• Geometria analítica
• Utilizar a orientação no plano
Primitiva EsquerdaDireita
– diz se um ponto está a esquerda ou direita de um determinado
vetor
3
26/04/2012
Orientação no Plano
 A orientação de um conjunto ordenado de três
pontos em um plano são
• horário (esquerda)
• anti-horário (direita)
• colineares
Orientação no Plano
 Ocorre a intersecção de dois segmentos (p1,q1) e (p2,q2), se e somente
se uma das condições abaixo forem verdadeiras
• (p1,q1,p2) e (p1,q1,q2) possuem orientação diferentes e
• (p2,q2,p1) e (p2,q2,q1) possuem orientação diferentes
 Caso
C
especial
i l
•
•
•
•
(p1,q1,p2), (p1,q1,q2), (p2,q2,p1), e (p2,q2,q1) são colineares
e
- a projeção em x de (p1,q1) e (p2,q2) se interceptam
- a projeção em y de (p1,q1) e (p2,q2) se interceptam
 Resumindo:
• Dado o segmento (p1,q1) e (p2,q2), existe intersecção entre eles se p1 estiver
de um lado de (p2,q2) e q1 do outro e,
• p2 estiver de um lado de (p1,q1) e q2 do outro
4
26/04/2012
Exemplos
Calculando a orientação
 coeficiente angular do segmento (p1,p2): s = (y2-y1) / (x2-x1)
 coeficiente angular do segmento (p2,p3): t = (y3-y2) / (x3-x2)
 Achando a orientação
• horário (esquerda): s < t
• anti-horário (direita): s > t
• colinear : s = t
 Logo,
Logo a orientação depende da expressão:
• (y2-y1) (x3-x2) - (y3-y2) (x2-x1)
 seja: positiva, negativa ou nula
 Complexidade (detectar intersecção em um conjunto de segmentos):
• Ordenação dos 2*n pontos O(n log n). Varredura 2*n O(n) pior caso
• logo, complexidade=O(n log n)
5
26/04/2012
Ponto no polígono
 Dado um polígono e um ponto, este ponto se
encontra dentro ou fora do polígono?
Ponto no polígono
 Traçamos uma reta do ponto para a direita, tendendo ao
infinito.
 Observamos o número de intersecções, se
• ímpar: o ponto está dentro
• par: o ponto está do lado de fora
 Caso o ponto esteja na vértice (d e g)
• escolher uma outra reta, rotacionando-a
rotacionando a em alguns poucos graus
• tratamento diferenciado nas vértices
 máximo e mínimo: par
 outro: ímpar
 Complexidade
• Polígono P de n vértices, vamos ter que verificar a intersecção nas
arestas: O(n)
6
26/04/2012
Menor caminho
 Dado o seguinte conjunto de pontos
 Conectar os pontos sem cruzar
Menor caminho
 Pegar o ponto mais baixo (ancora)
 Para cada ponto p, calcular o ângulo q(p) do
segmento AP relativo ao eixo x
7
26/04/2012
Menor caminho
 Atravessar os pontos incrementando os ângulos
 Como computar os ângulos?
• trigonometria
ti
ti
 problema:
– funções trigonométricas podem ser ineficientes computacionalmente
– não são instruções básicas do computador, devemos utilizar bibliotecas
específicas
• utilizar a orientação para comparar os ângulos sem calculá-los
Menor caminho
 utilizando a orientação
 q(p) < q(q) - orientação(a,p,q) = anti-horário
 Ordenando
Od
d ttodos
d os pontos
t encontrados
t d pelo
l
ângulo (exemplo: heapsort ou mergesort)
 Para n pontos
• Complexidade O(n log n)
8
26/04/2012
Envoltória convexa
 Definição: Dado um conjunto de pontos S, a
envoltória convexa de S é o menor polígono
que contém todos os p
pontos de S.
convexo q
Envoltória convexa
 Polígono
• Convexo
• Côncavo
9
26/04/2012
Envoltória convexa
 Aplicações
Algumas soluções




Força bruta
Força bruta melhorada
Grahan Scan
Hull
10
26/04/2012
Força bruta
 Força bruta
• O ponto faz parte da envoltória convexa se e
somente se não está contido em um triângulo
g
formado por outros três pontos.
• Complexidade
Para cada conjunto de pontos O(n)
Verificar todos os triângulos formados O(n3)
logo, Complexidade O(n4)
Força bruta melhorada
 Força bruta melhorada
• para um determinado ponto fazer parte da
envoltória convexa, verificar se todos os outros
pontos estão do outro lado do segmento formado
por ele e mais um ponto.
• Complexidade
testar todos os n2 pontos = O(n2)
realizar os testes O(n)
logo, complexidade O(n3)
todos os pontos estão
do outro lado, logo é
aresta da envoltória
convexa
todos os pontos NÃO
estão do outro lado, logo
NÃO é aresta da
envoltória convexa
11
26/04/2012
Embrulho de presente
 Embrulho de presente
• Escolhemos um ponto âncora (abaixo e esquerda, por exemplo).
 Complexidade O(n)
• Para o próximo ponto, no sentido anti-horário, localizamos o próximo ponto a
esquerda (utilizando orientação)
 ou seja,
seja o ponto que tenha o menor ângulo relativo a horizontal
• exemplo: orientação(c,p,q) = anti-horário (esquerda)
• Complexidade
 Escolha do ponto mais a esquerda O(n)
 Para cada vértice da envoltória convexa, verificar a orientação do próximo ponto
(saber o ponto a esquerda) – chamando de v estes vértices
 O(v*n)
 Pior caso v=n, logo O(n2)
– para h vértices
Embrulho de presente
 Exemplo
12
26/04/2012
Quick Hull
 Quick Hull
• Para três pontos a,b,c pertencentes ao conjunto P, os
pontos contidos no triângulo formado por eles não fazem
parte da envoltória convexa
convexa.
• Complexidade
 Achar um ponto extremo O(n)
 Melhor caso:
– balanceado: O(n log n)
 Pior caso
– desbalanceado: O(n
( 2)
Quick Hull
 Funcionamento
•
•
•
•
•
•
dado o segmento AB;
localizar o ponto C (mais a direita de AB);
Se c não existe retornar a AB
Descartar os pontos contidos no triângulo ABC
Repetir para a esquerda BC e CA
Repetir para a esquerda de BA
13
26/04/2012
Varredura de Grahan
 Varredura de Grahan
• 1972, R. L. Grahan – algoritmo Grahan Scan
• Primeiro algoritmo sobre envoltória convexa a rodar em
O(n log n)
• Funcionamento
 Escolher o Pivô (P0), ponto mais extremo que pertence a
envoltória convexa
 Todos os pontos S em relação a P0 são ordenados em relação ao
ângulo polar
– a ordenação
ç p
pode ser feita utilizando q
qualquer
q
algoritmo
g
de
ordenação. (Devemos escolher o melhor em termos de complexidade)
Varredura de Grahan
 funcionamento (cont.)
• formar o menor caminho
fechado neste polígono,
respeitando
it d os â
ângulos
l e o pivo
i
• seguindo pelo caminho formado
entre os pontos, os elementos
são removidos do começo do
caminho e inseridos e excluídos
do final deste caminho,
utilizando orientação para
decidir se aceita ou não o
próximo ponto
14
26/04/2012
Varredura de Grahan
 Funcionamento (cont.)
• (p,c,n) têm um giro a direita, logo descartamos o
ponto c
p
Varredura de Grahan
 Funcionamento (cont.)
• (p,c,n) tem um giro a direita,
logo
g descartamos o p
ponto c
• (p,c,n) continua com giro a
direita, logo descartamos o
ponto c
15
26/04/2012
Varredura de Grahan
 Complexidade
• escolha do pivô O(n)
• ordenação, por exemplo, heap sort O(n log n)
• determinar se o próximo ponto está a direita ou
esquerda O(1), utilizando produto vetorial. É
realizada para n pontos, logo O(n)
• logo, Complexidade = O(n) + O(n log n) + O(n)
• = O (n log n)
Varredura de Grahan
 Aumentando a velocidade
• eliminando os pontos contidos no seu interior
 achamos as extremidades de um quadrilátero formado pelo pontos
Nordeste, Noroeste, Sudeste, Sudoeste
 eliminamos os pontos contidos no quadrilátero
 executamos a verredura de Grahan
– em média raiz(n) pontos são eliminados
16
26/04/2012
Animações na web
 Embrulho de Presente
• http://www.cosc.canterbury.ac.nz/mukundan/cgeo/Gwrap.html
• http://www.cse.unsw.edu.au/~lambert/java/3d/hull.html
• http://www.sinc.stonybrook.edu/Stu/ypericle/convexhull/index.html
 Quick hull
• http://www.cosc.canterbury.ac.nz/mukundan/cgeo/QuickHull.html
• http://www.cs.princeton.edu/~ah/alg_anim/version1/QuickHull.html
 Grahan
• http://www
http://www.cosc.canterbury.ac.nz/mukundan/cgeo/Gscan.html
cosc canterbury ac nz/mukundan/cgeo/Gscan html
• http://www.personal.kent.edu/~rmuhamma/Compgeometry/MyCG/Con
vexHull/GrahamScan/grahamScan.htm
17
Download

7. Algoritmos Geométricos