Se quaisquer 3 pontos são colineares

7

Dado um conjunto S de pontos p1 1,..,p2 forneça o algoritmo mais eficiente para determinar se quaisquer 3 pontos do conjunto são colineares.

O problema é que comecei com a definição geral, mas não posso continuar resolvendo o problema.

O que podemos dizer sobre pontos colineares em geral, 3 pontos uma,b,c são colineares se a distância d(uma,c)=d(uma,b)+d(b,c) no caso em que b está entre uma e c.

A abordagem ingênua tem O(n(n-1 1)(n-2))=O(n3) complexidade do tempo.

Como resolver esse problema, qual deve ser o próximo passo?

com
fonte

Respostas:

8

Uma maneira simples é fixar um ponto x, calcule a inclinação da linha xy e armazene-o em uma tabela de hash para todos os outros pontos y. Se houver uma colisão, temos pontos colineares envolvendox. Isso levaO(n) (se assumirmos que as operações da tabela de hash levam O(1 1)) Em seguida, fazemos isso para todos os pontosx em tempo O(n2).

Além disso, se você estiver ciente da dualidade de linha de ponto (consulte o comentário de Artium abaixo), isso reduz a verificação da n2 possíveis interseções de n linhas, mas também utiliza tabelas de hash.

Também está aberto se isso pode ser feito em tempo sub-quadrático, como esse problema é difícil de 3-SUM, consulte esta resposta .

sxu
fonte
Aqui está uma explicação da dualidade da linha de ponto.
Artium
Muito obrigado pela resposta completa! Artium, obrigado pelo link da dualidade.
com
@Artium, aqui está um link de trabalho para a dualidade de linha de ponto.
Henrique Gontijo