Verifica se una serie di n punti nel piano formano un poligono n convesso nel tempo o (nlogn)


13

Supponiamo che ti venga dato un insieme di n punti nel piano e desideri verificare se formano un poligono n convesso, cioè se si trovano tutti sullo scafo convesso. Mi chiedevo se qualcuno sapesse come farlo in o (nlogn) tempo, cioè senza calcolare il CH.


È possibile calcolare lo scafo convesso in O (n log n) tempo. Vuoi dire se è possibile farlo in meno tempo di quello?
Per Vognsen,

Sì, credo che dovrebbe esserci un algoritmo di tempo lineare per questo problema. ma non so come
Babis Tsourakakis il

4
Ha scritto o (nlogn) non O (nlogn), quindi la sua domanda è corretta.
Shiva Kintali,

1
Uso la piccola notazione, quindi la domanda è ancora valida
Babis Tsourakakis,

4
Mi fa un po 'disapprovare vedere l'ordinamento dei numeri (o gli scafi equivalentemente convessi di punti cartesiani) dichiarati come prendere Θ (n log n) tempo senza una dichiarazione esplicita di quale modello di calcolo stai usando. L'ordinamento di confronto richiede Θ (n log n) tempo, ma il modello di confronto non consente nemmeno il calcolo degli scafi. Sono entrambi ancora tempo n (n log n) per gli alberi delle decisioni algebriche (come mostra la risposta accettata), ma più veloci nei modelli di calcolo che assomigliano più ai computer reali.
David Eppstein,

Risposte:


17

Questo sembra improbabile, almeno nei modelli di alberi algebrici / di confronto. Definizione prima:

Un set point si trova in posizione convesso se nessun punto P può essere scritto come combinazione convessa dei restanti punti di P .PPP

Ora, decidere se un insieme di numeri sono tutti distinti richiede Ω ( n log n ) tempo (questo è noto come UNIQUENESS). Dato un tale insieme di n numeri X , mappali all'insieme dei punti P = { ( x , x 2 ) | x X } . Se non c'è un numero ripetuto, i punti sono in posizione convessa.nΩ(nlogn)nX

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

Se è presente un numero ripetuto, questo numero ripetuto corrisponde a un punto che può essere scritto come una combinazione convessa dei punti rimanenti. Vale a dire, i punti non sono in posizione convessa.

Vale a dire, decidere se un set di punti è in posizione convessa è difficile come UNICITÀ.


12
X[io](X[io],X[io]2+io/n2)

1
@Babis: la riduzione di Jeff funziona quando non sono ammessi punti duplicati. I punti generati dalla riduzione sono unici, indipendentemente dall'array iniziale.
Vinayak Pathak,

Otteniamo così che il numero degli angoli dello scafo convesso è uguale a n se e solo se non ci sono due punti con la stessa coordinata x. Grazie mille, inizialmente ho pensato che dovesse essere più semplice dell'ordinamento.
Babis Tsourakakis,

Grazie Vinayak, non avevo visto la riduzione di Jeff da quando è stata pubblicata nello stesso momento in cui stavo scrivendo il commento precedente che ho sostituito con quanto sopra
Babis Tsourakakis il

2
Suresh, non sono d'accordo con la frase "modello standard". Questo è esattamente ciò che è la RAM di Word :) È il modello che più si avvicina a un computer reale e che usiamo per analizzare l'algoritmo nella maggior parte dei TCS. La geometria ha invocato un'eccezione per utilizzare la RAM reale, quindi non abbiamo bisogno di affrontare problemi di precisione. Ma questo non è "il modello standard".
Mihai,

-1

O(nlogn)

Una volta che conosci l'ordine dei punti, l'angolo da ciascun punto al punto successivo della sequenza dovrebbe essere monotonico. Ciò costituisce una condizione necessaria e, credo, sufficiente.

Ottenere il punto interiore è lasciato come esercizio per il lettore.


O(nlogn)


Probabilmente hai letto male la sua o (n log n) come O (n log n) come ho fatto io. Ad ogni modo, l'algoritmo che hai delineato è un pacchetto regalo in forma embrionale. In realtà non è necessario utilizzare un punto interno; puoi usare un punto sul limite, ad es. un punto con una coordinata x minima.
Per Vognsen,

O(nlogn)o()

Il punto è che ci sono molti algoritmi di scafo convesso che girano in O (n log n). Il tuo algoritmo è fondamentalmente semplice confezione regalo. Stava chiedendo qualcosa di più veloce, ad esempio tempo lineare. Vedi le altre risposte.
Per Vognsen,

1
Per quanto riguarda la tua modifica, se potessi guardare la risposta accettata sopra la tua, vedrai che il problema è equivalente all'unicità dell'elemento, che ha un limite inferiore O (n log n).
Per Vognsen,

2
@BCS: Temo che tu abbia qualche malinteso sulla risposta di Sariel Har-Peled. La riduzione va dall'unicità al test di posizione convessa, non dall'altra direzione. Cioè, Sariel (e JeffE) hanno affermato che se ti viene dato un set di numeri e vuoi testare l'unicità, puoi convertirlo in un set di punti e usare qualsiasi algoritmo per il test di posizione convessa.
Tsuyoshi Ito,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.