Inizia con punto con x-coord più basso. (Chiamalo punto X) Costruisci set di "punti di confine" a partire dal punto x, e linea verticale attraverso il punto, non ci devono essere altri punti a sinistra di PointX) trova il punto successivo nel limite ruotando lentamente la linea in senso orario (O in senso antiorario) fino a quando la linea tocca un altro punto, (vedi sotto). Aggiungi quel punto al set e ripeti con quel punto successivo per ottenere quello successivo, fino a quando non ritorni al punto originale x. Hai npw una serie di punti che formano il confine del set completo. Confronta la distanza tra ciascuna coppia in questo set ridotto per trovare la coppia più lontana.
Per "ruotare la linea" (per trovare ogni punto di confine sequenziale), prendere il punto che è "più lontano" nella direzione perpendicolare alla linea utilizzata per l'ultimo punto di confine e costruire una nuova linea tra l'ultimo limite punto e quel punto "prossimo". Quindi verifica che non vi siano altri punti furth nella nuova direzione perpendicolare formata da quella nuova linea. Se non ci sono altri punti "furth out" nella dirtection perpendicolare a questa linea o all'ultima riga, allora questa è la giusta fattura per il prossimo punto di confine, se c'è un tale punto, passare a quello e ripetere il test.
fonte
2009-10-24 16:31:36
È O (n) solo dopo aver trovato lo scafo convesso - se ti è stato assegnato un set di punti, potrebbe essere O (n log n) per trovare prima lo scafo convesso. – ShreevatsaR
@ShreevatsaR: Certo. La mia risposta dice esplicitamente "dove n è il numero di punti nello scafo convesso", il che rende abbastanza chiaro che è necessario trovare prima lo scafo convesso. –
Sì, forse è così. La chiarezza è negli occhi del lettore. :-) (L'algoritmo per l'attività nella domanda non è ovviamente O (n) dove n è il numero di punti nello scafo convesso, è la seconda parte che è, come dici tu.) Comunque, ho pensato che valesse la pena menzionare , solo per completezza: le persone possono arrivare a queste risposte anni dopo attraverso i motori di ricerca potrebbero non leggere attentamente, e possono confondersi, ecc. – ShreevatsaR