Testando se um conjunto de n pontos no plano forma um polígono n convexo no tempo o (nlogn)

13

Suponha que você receba um conjunto de n pontos no plano e deseje verificar se eles formam um polígono n convexo, ou seja, se todos estão no casco convexo. Eu queria saber se alguém sabe como fazer isso em tempo (nlogn), ou seja, sem calcular o CH.

Babis Tsourakakis
fonte
Você pode calcular o casco convexo em O (n log n). Você quer dizer se é possível fazê-lo em menos tempo que isso?
Por Vognsen
sim, acredito que deve haver algum algoritmo de tempo linear para esse problema. mas eu não sei como
Babis Tsourakakis
4
Ele escreveu o (nlogn) e não O (nlogn), então sua pergunta está correta.
Shiva Kintali
1
Eu uso a pouco o notação então a questão ainda se mantém como é
Babis Tsourakakis
4
Fico um pouco carrancudo ao ver a classificação dos números (ou cascos equivalentes convexos de pontos cartesianos) declarados como tendo Θ (n log n) tempo sem uma declaração explícita de qual modelo de computação você está usando. A classificação por comparação leva tempo (n log n), mas o modelo de comparação nem sequer permite que os cascos sejam computados. Os dois ainda têm tempo (n log n) para as árvores de decisão algébricas (como mostra a resposta aceita), mas são mais rápidos em modelos de computação que se assemelham mais aos computadores reais.
David Eppstein

Respostas:

17

Parece improvável, pelo menos nos modelos de comparação / álgebra. Definição primeiro:

Um ponto de ajuste está em posição convexa, se nenhum ponto de P pode ser escrita como uma combinação convexa dos restantes pontos de P .PPP

Agora, decidir se um conjunto de números é distinto leva Ω ( n log n ) tempo (isso é conhecido como UNIQUENESS). Dado esse conjunto de n números X , mapeie-os para o conjunto de pontos P = { ( x , x 2 ) | x X } . Se não houver um número repetido, os pontos estão na posição convexa.nΩ(nregistron)nX

P={(x,x2)|xX}.

Se houver um número repetido, esse número repetido corresponderá a um ponto que pode ser escrito como uma combinação convexa dos pontos restantes. Ou seja, os pontos não estão na posição convexa.

Ou seja, decidir se um conjunto de pontos está na posição convexa é tão difícil quanto a UNIQUENESS.

Sariel Har-Peled
fonte
12
X[Eu](X[Eu],X[Eu]2+Eu/n2)
1
@Babis: a redução de Jeff funciona quando pontos duplicados não são permitidos. Os pontos gerados pela redução são únicos, independentemente da matriz inicial.
Vinayak Pathak
Assim, obtemos que o número de cantos do casco convexo é igual a n se e somente se não houver dois pontos com a mesma coordenada x. Muito obrigado, inicialmente pensei que deveria ser mais fácil do que classificar.
Babis Tsourakakis
Obrigado Vinayak, eu não tinha visto a redução de Jeff, pois ela foi publicada ao mesmo tempo em que escrevia o comentário anterior, que substituí com o anterior
Babis Tsourakakis
2
Suresh, eu discordo da frase "modelo padrão". É exatamente isso que a RAM do Word é :) É o modelo que mais se aproxima de um computador real e que usamos para analisar o algoritmo na maioria dos TCS. A Geometry defendeu uma exceção para usar a Real RAM, para que não precisemos lidar com problemas de precisão. Mas esse não é "o modelo padrão".
Mihai
-1

O(neuogn)

Depois de saber a ordem dos pontos, o ângulo de cada ponto para o próximo ponto na sequência deve ser monotônico. Isso forma uma condição necessária e, penso, suficiente.

Obter o ponto interior é deixado como um exercício para o leitor.


O(neuogn)

BCS
fonte
Você provavelmente interpretou mal o (n log n) como O (n log n) tanto quanto eu. De qualquer forma, o algoritmo que você descreveu é o embrulho para presente em forma embrionária. Você realmente não precisa usar um ponto interior; você pode usar um ponto no limite, por exemplo, um ponto com coordenadas x mínimas.
Por Vognsen
O(neuogn)o()
O ponto é que existem muitos algoritmos convexos do casco que são executados em O (n log n). Seu algoritmo é basicamente um embrulho antigo simples. Ele estava pedindo algo mais rápido, por exemplo, tempo linear. Veja as outras respostas.
Por Vognsen
1
Em relação à sua edição, se você olhar para a resposta aceita acima da sua, verá que o problema é equivalente à exclusividade do elemento, que tem um limite inferior O (n log n).
Por Vognsen
2
@BCS: Receio que você tenha algum mal-entendido sobre a resposta de Sariel Har-Peled. A redução é da singularidade para o teste de posição convexa, não na outra direção. Ou seja, Sariel (e JeffE) afirmou que, se você receber um conjunto de números e quiser testar a exclusividade, poderá convertê-lo em um conjunto de pontos e usar qualquer algoritmo para teste de posição convexa.
Tsuyoshi Ito