Sunteți pe pagina 1din 4

Algoritmos de Fecho Convexo

Geometria Computacional
Emilio Ashton Vital Brazil
emilio@visgraf.impa.br
02 de Maio de 2005
IMPA - Instituto de Matematica Pura e Aplicada
Introducao. O problema de fecho convexo aqui abordado e: dada uma nuvem nita de pontos do plano
obter a lista de pontos que ligados em ordem formam o fecho convexo desta nuvem. Este problema tem
complexidade (nlog n) pois o problema de ordenacao pode ser reduzido a ele em tempo linear. Para este
trabalho implementamos quatro algoritmos de fecho convexo. O algoritmo de Jarvis que tem complexidade
O(nh) onde n e o n umero de pontos da entrada e h e o numero de vertices do fecho convexo, este algoritmo
parte de um ponto que se tenha certeza que seja vertice (o de menor ordenada por exemplo) e a partir
dele se testa todos os pontos restantes pra descobrir o proximo vertice do fecho, repetindo o processo ate
voltarmos ao primeiro ponto. O segundo algoritmo e uma adaptacao do algoritmo de Grahan que tem
complexidade O(nlog n), logo otimo, a nossa implementacao ordena lexogracamente os pontos em vez de
ordenar em relacao a angulos, como no Grahan original. Os dois ultimo algoritmos apenas fazem um pre-
processamento que elimina os pontos que estao dentro de um quadrado cujo os vertices pertencem ao fecho
convexo e computa o restante dos pontos usando o algoritmo de Jarvis ou o de Grahan. As implementacoes
foram feitas em ANSI C e compiladas com gcc no sistema operacional Linux. Os codigos estao em C e
podem ser conseguidos em meio digital em http//www.impa.br/emilio/gc/ch.tar.gz 3.6Kb e os dados em
http//www.impa.br/emilio/gc/chdados.tar.gz 41.4Mb.
Dados e tabelas. Testamos os programas em 20 nuvens de pontos distintas variando o numero de pontos
(100 , 1.000 , 100 mil e 1 milhao de pontos) e sua forma, sendo os dados dispostos em quatro tabelas,
separadas pela especie de amostra de dados. Amostramos sobre o triangulo (tabela 1, g.1(b)), sobre o
quadrado (tabela 2, g.1(c)), sobre o disco (tabela 3, g.1(d)) e sobre a circunferencia (tabela 4, g.1(e)).
Resultados. Geramos guras de nossos pontos e fechos convexos para podermos avaliar a corretude de
nossa implementacao. Para todos as nuvens testadas obtivemos seus fechos convexos corretos. As guras
foram tambem uteis para avaliar o desempenho dos algoritimos de eliminacao de pontos, comparando as
guras 1 e 2 observamos que apenas no caso que os pontos se encontram sobre a circunferencia o pre-
processamento nao elimina uma grande quantidade de pontos, nos outros percebemos claramente a grande
vantagem de eliminar pontos interiores. Temos um exemplo com dezessete pontos da tabela 5 visto na gura
1(a).
Analise. Podemos observar que como esperado o algoritmo de Jarvis e o de eliminacao de pontos com Jarvis
foram sensveis ao tipo de amostra, quanto maior o n umero de pontos no fecho convexo menos ecientes
eles foram, comparando com os baseados em Grahan eles foram melhores ou quase igual em tempo nos
casos da amostragem em cima do triangulo e do quadrado, tendo um desempenho mais de 250 vezes pior
no caso extremo dos pontos em cima da circunferencia. Usamos Qsort como primeiro passo no Grahan,
que apesar de nao ser um algoritmo otimo para ordenacao se mostrou muito bom para as nossas aplicacoes
tendo um desempenho estavel (o tipo de amostra quase nao afeta o tempo) e eciente em todas as amostras.
Comparando a eliminacao de pontos com os algoritmos sem pre-processamento observamos que estes quase
sempre sao mais rapidos, levando em alguns casos a metade do tempo do outro algoritmo de mesmo tipo,
a nao ser nos casos extremos nos quais os pontos se encontram sobre uma circunferencia, pois como era de
1
se esperar nestes casos nao se elimina nenhum ponto (guras 1(e) e 2(d)) e este passo de pre-processamento
apenas gasta tempo (como ilustrado na tabela 4).
Conclucao. Todos os quatro algoritmos sao simples de implementar e cada um tem suas vantagens e
desvantagens, que dependerao de qual controle possuimos sobre nossas entradas de dados. De maneira geral
vimos que o algoritmo de eliminacao de pontos com Grahan e o mais eciente, mas se nossa entrada for sobre
um triangulo teremos a maior eciencia no Jarvis pre-processado. Casos patologicos como os pontos sobre
uma circunferencia teremos o Grahan sendo a melhor escolha, e provavelmente quando os pontos estiverem
sobre as arestas de um triangulo teremos o Jarvis com melhor desempenho.
Numero de amostras 100 pts 1.000 pts 10.000 pts 100.000 pts 1.000.000 pts
Numero de vertices 12 pts 18 pts 21 pts 25 pts 30 pts
Jarvis - - 0,03 seg 0,43 seg 4,95 seg
Grahan - - 0,04 seg 0,48 seg 5,47 seg
Eliminacao de Pontos - Jarvis - - 0,02 seg 0,21 seg 2,29 seg
Eliminacao de Pontos - Grahan - - 0,02 seg 0,21 seg 2,20 seg
Tabela 1: N umero de vertices e tempo gasto pelos algoritmos com pontos amostrados sobre o triangulo
Numero de amostras 100 pts 1.000 pts 10.000 pts 100.000 pts 1.000.000 pts
Numero de vertices 17 pts 18 pts 26 pts 22 pts 34 pts
Jarvis - - 0,04 seg 0,39 seg 5,34 seg
Grahan - - 0,04 seg 0,46 seg 5,33 seg
Eliminacao de Pontos - Jarvis - - 0,03 seg 0,33 seg 4,00 seg
Eliminacao de Pontos - Grahan - - 0,03 seg 0,38 seg 3,92 seg
Tabela 2: N umero de vertices e tempo gasto pelos algoritmos com pontos amostrados sobre o quadrado
Numero de amostras 100 pts 1.000 pts 10.000 pts 100.000 pts 1.000.000 pts
Numero de vertices 18 pts 34 pts 71 pts 158 pts 333 pts
Jarvis - - 0,09 seg 1,72 seg 35,40 seg
Grahan - - 0,04 seg 0,47 seg 5,34 seg
Eliminacao de Pontos - Jarvis - - 0,04 seg 0,81 seg 14,47 seg
Eliminacao de Pontos - Grahan - - 0,03 seg 0,31 seg 3,50 seg
Tabela 3: N umero de vertices e tempo gasto pelos algoritmos com pontos amostrados sobre o disco
Numero de amostras 100 pts 1.000 pts 10.000 pts 100.000 pts 1.000.000 pts
Numero de vertices 100 pts 998 pts 8.801 pts 29.427 pts 55.368 pts
Jarvis - 0,10 seg 8,82 seg 303,94 seg 1.331,95 seg
Grahan - - 0,04 seg 0,47 seg 5,36 seg
Eliminacao de Pontos - Jarvis - 0,10 seg 8,89 seg 309,66 seg 1.533,11 seg
Eliminacao de Pontos - Grahan - - 0,04 seg 0,51 seg 5,79 seg
Tabela 4: N umero de vertices e tempo gasto pelos algoritmos com pontos amostrados sobre a circunferencia
2
(a) 17 pontos do plano (b) 1000 pontos sobre o triangulo
(c) 1000 pontos sobre o quadrado (d) 1000 pontos sobre a disco
(e) 1000 pontos sobre o circunferencia
Figura 1: Amostras de pontos usadas sem pre-processamento
3
A B C D E F G H I J K L M N O P Q
x 3 11 6 4 5 8 1 7 9 14 10 17 15 13 3 12 16
y 9 1 8 3 15 11 6 4 7 5 13 14 2 16 12 10 8
Tabela 5: Coordenadas da nuvem com 17 pontos sobre o plano da gura 1(a)
(a) Sobre a amostra da gura 1(b) (b) Sobre a amostra da gura 1(c)
(c) Sobre a amostra da gura 1(d) (d) Sobre a amostra da gura 1(e)
Figura 2: Amostras de pontos usadas apos pre-processamento
4

S-ar putea să vă placă și