tl; dr In che modo può essere implementato in modo efficiente lo Nearest
di Mathematica?Struttura dati per il recupero efficiente dell'elemento più vicino da un set
Mathematica ha una funzione chiamata Nearest
che avrà una lista di "cose" (possono essere numeri, coordinate in n
spazio dimensionale, le stringhe, ecc), e restituisce un oggetto NearestFunction
. Questo oggetto è una funzione che, se applicata a x
, restituirà l'elemento dell'elenco più vicino a x
con una certa metrica di distanza. La metrica della distanza può essere passata come parametro a Nearest
: per impostazione predefinita utilizza la distanza euclidea per i dati numerici e un tipo di distanza di modifica per le stringhe.
Esempio (questo si spera rendere la questione più chiaro):
nf = Nearest[{92, 64, 26, 89, 39, 19, 66, 58, 65, 39}];
nf[50]
tornerà 58
, l'elemento più vicino al 50
. nf[50, 2]
restituirà {58, 39}
, i due elementi più vicini.
Domanda: Che cosa è un modo efficace per implementare questa funzionalità? Che tipo di struttura dati è probabile utilizzare internamente NearestFunction
? Qual è la migliore complessità possibile del calcolo di un elemento più vicino per diversi tipi di dati?
Per un semplice elenco di numeri che li ordinano e facendo una ricerca binaria funzionerebbe, ma Nearest
funziona con dati multidimensionali e con una funzione di distanza arbitraria, quindi suppongo che usi qualcosa di più generale. Ma non sarei sorpreso se si rivelasse specializzato per determinati tipi di funzioni dati/distanza.
Hai visto: http://www.google.co.uk/search?q=adjacency+data+struttura – Marcin
@Marcin Non avevo familiarità con questo termine. – Szabolcs