segunda-feira, 29 de julho de 2013

Pseudo-ângulo

Nos algoritmos de Geometria Computacional, precisamos de um algoritmo de ordenação polar (dados vetores x1, x2, ... , xn do R², devemos ordená-los angularmente no sentido anti-horário).
Muita opções de algoritmos são custosas, requerendo trabalhos com arccos(x), o que pode acarretar em perdas significativas de desempenho.
A opção menos custosa, e, portanto, utilizada nos trabalhos posteriores, é a do cálculo do pseudo-ângulo no quadrado unitário, cujo cálculo pode ser feito de modo a envolver apenas três comparações, uma soma e uma divisão.


Nesse algoritmo, o ângulo é substituído pelo comprimento do percurso nas arestas do quadrado partindo do ponto (1,0), tomando valores de [0, 8]. É verificado em qual quadrante o ponto está, e se a semi-reta que vai do centro desse quadrado até o ponto intercepta a aresta do quadrado antes ou depois do vértice pertencente ao mesmo quadrante do ponto. Com essas informações, é possível calcular parte do pseudo-ângulo. O restante é calculado por semelhança de triângulos, custando apenas uma divisão.


Acesse o meu código de pseudo-ângulo: https://dl.dropboxusercontent.com/u/21447748/Pseudoangulo.rar
O código acima possui senha, disponibilizada apenas para o professor da disciplina.

domingo, 28 de julho de 2013

Algoritmo para ordenação: Quicksort

Para os trabalhos que serão em breve postados aqui, utilizei o algoritmo de ordenação Quicksort.
Seu nome é indicativo do bom desempenho que possui na prática. Seu funcionamento baseia-se em dividir-para-conquistar.
Nesse algoritmo, toma-se um elemento do conjunto (por exemplo, x1) e a etapa Partition consiste em dividir o conjunto e ser ordenado em dois subconjuntos: o primeiro composto por todos os elementos menores que x1, e o segundo por todos os elementos maiores ou iguais a x1.
Cada um desses conjuntos é ordenado utilizando recursivamente o mesmo algoritmo.
A etapa de Combinação é completamente trivial, já que consiste em lista os elementos (já ordenados) que são menores que x1, seguidos pelos elementos (também já ordenados) que são maiores ou iguais a x1.

Confirma mais nos slides feitos por mim: http://www.slideshare.net/ismaliasantiago/quicksort-24709981
(um pouco do histórico, pseudo-código, descrição do funcionamento dos métodos, estudo da complexidade e análise das vantagens e desvantagens do algoritmo)