Abbiamo una lista di coppie x, y. Ogni coppia rappresenta un punto su uno spazio 2D. Voglio trovare il punto più vicino da questa lista, a un punto specifico xq, yq. Qual è il miglior algoritmo per le prestazioni critiche per questo problema? Lisp di punti non cambierà; il che significa che non è necessario eseguire l'inserimento e la cancellazione. Voglio solo trovare il vicino più prossimo di un target xq, punto yq in questo set.Algoritmo best-performance per la risoluzione del prossimo più prossimo
Modifica 1: Grazie a tutti! Come Stephan202 ha indovinato, voglio farlo ripetutamente; come una funzione. Una lista non è necessariamente ordinata (in effetti non capisco come può essere ordinata? Come una tabella con una chiave primaria di 2 colonne ae y? Se questo aiuta allora lo ordinerò).
Costruirò la struttura dati basata sull'elenco una sola volta, quindi userò questa struttura dati generata nella funzione (se questo processo è rilevante).
Grazie Jacob; Sembra che la struttura dei dati di KD-Tree sia un buon candidato per essere la risposta (e credo che lo sia. Aggiornerò quando avrò dei risultati rilevanti).
Modifica 2: Ho scoperto che questo problema è denominato "prossimo più vicino"!
Modifica 3: il primo titolo era "Alla ricerca di un algoritmo (per ricerca spaziale e indicizzazione spaziale) (vicino più vicino)"; Ho scelto un nuovo titolo: "Miglior algoritmo critico delle prestazioni per risolvere il vicino più vicino". Dato che non voglio eseguire operazioni di inserimento e cancellazione sui miei dati iniziali e voglio solo il più vicino da loro a un nuovo punto (che non verrà inserito), ho scelto di (attualmente) lavorare su KD-Trees. Grazie a tutti!
C'è qualche struttura nell'elenco (è ad esempio ordinata)? Vuoi ripetere questa operazione, o verrà eseguita una volta? Questa è un'informazione rilevante di cui le persone avranno bisogno per rispondere alla tua domanda. – Stephan202
Hai accesso a un database spaziale? –
Se l'elenco non è ordinato e l'operazione verrà eseguita solo una volta, sarà necessario eseguire una ricerca lineare sull'elenco e quindi non fare meglio di O (n). Se stai per ripetere l'operazione, dovrai creare una rappresentazione (albero) idonea dell'elenco, in base ai valori xey dell'elemento. – Stephan202