Victor Sena Molero

Geometria Computacional

O Problema

Convexo?

O que eu sei fazer?

Distância entre pontos

Distância entre ponto e segmento

O que eu recebo?

Inteiro n e n pontos do polígono (x,y)

Inteiro m e m pontos fora do polígono

Alguma ideia?

Solução A

Parâmetro n Parâmetro m Tempo de execução
100 100 0.007s
1000 1000 0.169s
10000 10000 16s

Calcular, para cada ponto, a distância entre ele e cada um dos n segmentos.

Outra ideia?

Cada aresta tem uma região.

Como eu descubro se um ponto está numa região?

Vamos descobrir quem está em qual região.

Observação

Sempre vale a pena usar três valores consecutivos para formar um triângulo

Solução 2

Ao invés de testar todas as triplas, testar apenas as triplas consecutivas

Bem melhor!

Porém conseguimos melhorar ainda mais...

Parâmetro n Parâmetro m Tempo de execução
100 100 0,0001s
1000 100 0,01s
10000 1000 1s
100000 100000 100s

Observação 2

No pior dos casos, os números serão a sequência de fibonacci.

1, 1, 2, 3, 5, 8, 13, ...

Observação 2

No pior dos casos, os números serão a sequência de fibonacci.

1, 1, 2, 3, 5, 8, 13, ...

 

Mas como essa sequência cresce muito rápido, no seu 45º número eles já estouram o limite de 10⁹ para cada valor da sequência

 

Solução 3

Para cada pergunta do Sena, apenas testamos as últimas 45 triplas contínuas.

Parâmetro n* Parâmetro m Tempo de execução
1000 10000 0,001s
100000 10000 0,001s
100000 1000000 0,1s

Obs: Esta solução nem depende mais do parâmetro n  pro cálculo do seu tempo de execução

Obrigado!

Venham pra Maratona  

SIGEX 2018 Sena

By Victor Sena Molero