Triangoli di apprendimento nel piano


13

Ho assegnato ai miei studenti il ​​problema di trovare un triangolo coerente con una raccolta di m punti in R2 , etichettato con ±1 . (Un triangolo T è coerente con il campione etichettato se T contiene tutti i punti positivi e nessuno dei punti negativi; per ipotesi, il campione ammette almeno 1 triangolo coerente).

Il meglio che loro (o I) potrebbero fare è un algoritmo che gira nel tempo O(m6) , dove m è la dimensione del campione. Qualcuno può fare di meglio?


Giusto per essere chiari: i vertici del triangolo non devono essere punti della collezione, giusto? Ed è accettabile avere punti negativi sul confine?
ex0du5

(1) Avevo votato per chiudere la domanda perché avevo frainteso il problema. Il sistema non mi consente di annullare il mio voto, ma lo annullo praticamente. (2) Penso che esista un algoritmo O (m log m) -time, ma non ho tempo per verificarlo in questo momento. L'idea è di calcolare lo scafo convesso degli esempi positivi e di spostarsi attorno a questo scafo convesso per trovare tre linee che formano il triangolo desiderato.
Tsuyoshi Ito,

@ ex0du5 - in effetti, i vertici del triangolo non devono necessariamente essere costituiti da punti campione. Per quanto riguarda i problemi di confine, questi possono essere ignorati qui perché sono inessenziali. [Se il confine conta come parte del triangolo, allora non avrai punti negativi sul confine.]
Aryeh

@TsuyoshiIto: Stavo pensando in modo simile, ma ci sono casi in cui non è possibile avere i bordi del triangolo collineati ai bordi dello scafo convesso, ma esiste ancora un triangolo. Il triangolo ovviamente contiene ancora lo scafo convesso, ma non sta solo estendendo le linee dello scafo e trovando il triangolo. Potresti aver bisogno di linee che vengono ruotate attorno ad alcuni vertici per evitare i punti negativi. Questo è il motivo per cui ho chiesto dei negativi sul confine, per consentire a un algoritmo di ricerca che scegliesse le linee dai vertici dello scafo ai negativi per mantenerlo una ricerca discreta.
ex0du5

@ ex0du5: Beh, non pensavo che i bordi del triangolo fossero paralleli ad alcuni bordi dello scafo convesso degli esempi positivi.
Tsuyoshi Ito,

Risposte:


14

Come suggerisce @TsuyoshiIto, esiste un algoritmo per questo problema, dovuto a Edelsbrunner e Preparata. In effetti, il loro algoritmo trova un poligono convesso con il numero minimo possibile di spigoli che separa i due set di punti. Dimostrano anche un limite inferiore di Ω ( n log n ) per il problema più generale nel modello dell'albero delle decisioni algebrico; tuttavia, non è chiaro se questo limite inferiore si applica alla custodia del triangolo.O(nlogn)Ω(nlogn)

Una descrizione completa dell'algoritmo è troppo lunga per essere pubblicata qui, ma ecco l'idea di base. Sia lo scafo convesso dei punti positivi. Per ogni punto negativo q , considerare le linee attraverso q tangenti a C . Queste linee dividono il piano in quattro spicchi, uno dei quali contiene C ; lasciate W ( q ) sia il cuneo opposto quello che contiene C . Infine, sia F (la "regione proibita") l'unione di tutti i cunei W ( q ) . Qualsiasi triangolo di separazione deve separare C da FCqqCCW(q)CFW(q)CF. Sia che F possono essere costruiti in tempo O ( n log n ) .CFO(nlogn)

example of $C$ and $F$

Etichettare i bordi di alternativamente in senso orario e antiorario. Edelsbrunner e Preparata inoltre dimostrare che se esiste un triangolo di separazione, allora v'è un triangolo che separa i cui bordi sono allineati con i bordi in senso orario di F . In O ( n ) tempo aggiuntivo, possiamo trovare il bordo (necessariamente in senso orario) di F colpito per la prima volta da un raggio da ciascun bordo in senso orario e ; chiama questo limite il "successore" di e . I puntatori successivi dividono i bordi in senso orario in cicli; se esiste un triangolo di separazione, uno di questi cicli successivi ha lunghezza 3 (e nessuno ha lunghezza superiore a 4).FFO(n)Fee

Vedi il documento originale per maggiori dettagli:


3

Mi sembra che sia sufficiente considerare le linee tangenti dai punti '-1' sullo scafo convesso dei punti '+1' come candidati per i lati di (diciamo che i punti '+1' saranno interni a T ).TT

Peccato, non posso pubblicare immagini qui. Ma immagina questo: è la linea tangente allo scafo convesso che attraversa un punto '-1'. A è il punto di tangenza. B è il punto estremo (vedi sotto) su t , e B C è la linea tangente dal punto B ( C è il punto di tangenza).tABtBCBC

Quindi, l'algoritmo è il seguente. Per ogni linea delle linee tangenti possiamo provare a costruire un triangolo basato su di esso:t

  1. Calcola i punti di intersezione di con tutte le altre linee;t
  2. Trova un punto estremo (il più lontano da ) B e la linea corrispondente t a destra (o sinistra) da A , in modo tale che lo psuedotriangolo A B C (= A B , B C e la parte dello scafo convesso tra A e C ) non contiene punti "-1" (ovvero non contiene punti).ABtAABCABBCAC
  3. Fai lo stesso con la linea e vedi se possiamo' chiudere 'il triangolo.t

Sembra che questo sarebbe un tempo di esecuzione . Forse questo può essere migliorato usando alcune strutture di dati?O(m2)

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.