Sono state proposte varie soluzioni al problema NNS. La qualità e l’utilità degli algoritmi sono determinate dalla complessità temporale delle query e dalla complessità spaziale di qualsiasi struttura di dati di ricerca che deve essere mantenuta. L’osservazione informale di solito indicata come la maledizione della dimensionalità afferma che non esiste una soluzione esatta per scopi generali per NNS nello spazio euclideo ad alta dimensione usando il preelaborazione polinomiale e il tempo di ricerca polilogaritmico.,

Exact methodsEdit

Linear searchEdit

La soluzione più semplice al problema NNS consiste nel calcolare la distanza dal punto di query a ogni altro punto del database, tenendo traccia del “migliore finora”. Questo algoritmo, a volte indicato come approccio ingenuo, ha un tempo di esecuzione di O(dN), dove N è la cardinalità di S e d è la dimensionalità di M. Non ci sono strutture di dati di ricerca da mantenere, quindi la ricerca lineare non ha complessità di spazio oltre la memorizzazione del database., La ricerca ingenua può, in media, sovraperformare gli approcci di partizionamento dello spazio su spazi dimensionali superiori.

Space partitioningEdit

Dal 1970, la metodologia branch and bound è stata applicata al problema. Nel caso dello spazio euclideo questo approccio comprende indice spaziale o metodi di accesso spaziale. Sono stati sviluppati diversi metodi di partizionamento dello spazio per risolvere il problema NNS. Forse il più semplice è l’albero KD, che divide iterativamente lo spazio di ricerca in due regioni contenenti metà dei punti della regione genitore., Le query vengono eseguite tramite l’attraversamento dell’albero dalla radice a una foglia valutando il punto di query ad ogni divisione. A seconda della distanza specificata nella query, potrebbe essere necessario valutare anche i rami vicini che potrebbero contenere hit. Per il tempo di query a dimensione costante, la complessità media è O(log N) nel caso di punti distribuiti casualmente, la complessità del caso peggiore è O(kN^(1-1/k))In alternativa la struttura dei dati R-tree è stata progettata per supportare la ricerca più vicina in un contesto dinamico, in quanto ha algoritmi efficienti per inserimenti ed eliminazioni come, R-alberi possono produrre vicini più vicini non solo per la distanza euclidea, ma possono anche essere utilizzati con altre distanze.

Nel caso dello spazio metrico generale, l’approccio branch-and-bound è noto come approccio ad albero metrico. Esempi particolari includono i metodi vp-tree e BK-tree.

Utilizzando un insieme di punti presi da uno spazio 3-dimensionale e messi in un albero BSP, e dato un punto di query preso dallo stesso spazio, una possibile soluzione al problema di trovare il punto di nuvola di punti più vicino al punto di query è data nella seguente descrizione di un algoritmo., (A rigor di termini, questo punto non può esistere, perché potrebbe non essere unico. Ma in pratica, di solito ci interessa solo trovare uno qualsiasi dei sottoinsiemi di tutti i punti della nuvola di punti che esistono alla distanza più breve da un determinato punto di query.) L’idea è, per ogni ramificazione dell’albero, indovinare che il punto più vicino nella nuvola risiede nel mezzo spazio contenente il punto di query. Questo potrebbe non essere il caso, ma è una buona euristica., Dopo aver attraversato ricorsivamente tutti i problemi di risolvere il problema per il mezzo spazio indovinato, ora confronta la distanza restituita da questo risultato con la distanza più breve dal punto di query al piano di partizionamento. Quest’ultima distanza è quella tra il punto di query e il punto più vicino possibile che potrebbe esistere nel mezzo spazio non cercato. Se questa distanza è maggiore di quella restituita nel risultato precedente, chiaramente non è necessario cercare l’altra metà spazio., Se c’è una tale necessità, allora devi affrontare il problema di risolvere il problema per l’altra metà dello spazio, quindi confrontare il suo risultato con il risultato precedente e quindi restituire il risultato corretto. Le prestazioni di questo algoritmo sono più vicine al tempo logaritmico rispetto al tempo lineare quando il punto di query si trova vicino alla nuvola, poiché poiché la distanza tra il punto di query e il punto di nuvola più vicino si avvicina a zero, l’algoritmo deve solo eseguire una ricerca utilizzando il punto di query come chiave per ottenere il risultato corretto.,

Metodi di approssimazionemodifica

Un algoritmo di ricerca approssimativo vicino più vicino può restituire punti, la cui distanza dalla query è al massimo c {\displaystyle c} volte la distanza dalla query ai suoi punti più vicini. Il fascino di questo approccio è che, in molti casi, un vicino approssimativo più vicino è quasi buono come quello esatto. In particolare, se la misura della distanza cattura accuratamente la nozione di qualità dell’utente, le piccole differenze nella distanza non dovrebbero avere importanza.,

Ricerca avida nei grafici di vicinato di prossimitàedit

I metodi sono basati sull’attraversamento avido nei grafici di vicinato di prossimità G ( V , E ) {\displaystyle G(V,E)} in cui ogni punto x i S S {\displaystyle x_{i}\in S} è associato in modo univoco a vertex v i {V {\displaystyle v_ {i}\in V} . La ricerca dei vicini più vicini a una query q nel set S assume la forma di ricerca del vertice nel grafico G ( V , E ) {\displaystyle G(V,E)} .,L’algoritmo di base – golosa – di-ricerca funziona come segue: ricerca inizia da un ingresso-punto di vertice v ∈ V {\displaystyle v_{i}\in V} calcolando le distanze dalla query q per ogni vertice del suo quartiere { v j : ( v i , v j ) ∈ E } {\displaystyle \{v_{j}:(v_{i},v_{j})\in E\}} , e poi trova un vertice con il minimo valore di distanza. Se il valore della distanza tra la query e il vertice selezionato è inferiore a quello tra la query e l’elemento corrente, l’algoritmo si sposta sul vertice selezionato e diventa nuovo punto di invio., L’algoritmo si arresta quando raggiunge un minimo locale: un vertice il cui vicinato non contiene un vertice più vicino alla query rispetto al vertice stesso.

L’idea dei grafici di prossimità è stata sfruttata in diverse pubblicazioni, tra cui il documento seminale di Arya e Mount, nel sistema VoroNet per il piano, nel sistema RayNet per l’E n {\displaystyle \mathbb {E} ^{n}} , e negli algoritmi Metrized Small World e HNSW per il caso generale di spazi con funzione di distanza., Questi lavori sono stati preceduti da un documento pionieristico di Toussaint, in cui ha introdotto il concetto di un grafico di quartiere relativo.

Locality sensitive hashingEdit

Locality sensitive hashing (LSH) è una tecnica per raggruppare i punti nello spazio in “bucket” in base a una metrica di distanza che opera sui punti. I punti vicini l’uno all’altro sotto la metrica scelta vengono mappati allo stesso bucket con alta probabilità.,

Ricerca del vicino più vicino in spazi con dimensioni intrinseche ridotte

L’albero di copertura ha un limite teorico basato sulla costante di raddoppio del set di dati. Il limite al tempo di ricerca è O (c12 log n) dove c è la costante di espansione del set di dati.

Projected radial searchEdit

Nel caso speciale in cui i dati sono una mappa 3D densa di punti geometrici, la geometria di proiezione della tecnica di rilevamento può essere utilizzata per semplificare drasticamente il problema di ricerca.,Questo approccio richiede che i dati 3D siano organizzati da una proiezione su una griglia bidimensionale e presuppone che i dati siano spazialmente uniformi tra le celle della griglia vicine ad eccezione dei limiti dell’oggetto.Queste ipotesi sono valide quando si tratta di dati di sensori 3D in applicazioni come rilevamento, robotica e visione stereo, ma potrebbero non contenere dati non organizzati in general.In pratica questa tecnica ha un tempo medio di ricerca di O(1) o O(K) per il problema k-nearest neighbor quando applicato ai dati di visione stereo del mondo reale.,

File di approssimazione vettoriale

Negli spazi ad alta dimensione, le strutture di indicizzazione degli alberi diventano inutili perché una percentuale crescente dei nodi deve essere comunque esaminata. Per velocizzare la ricerca lineare, viene utilizzata una versione compressa dei vettori di funzionalità memorizzati nella RAM per prefiltrare i set di dati in una prima esecuzione. I candidati finali sono determinati in una seconda fase utilizzando i dati non compressi dal disco per il calcolo della distanza.,

Ricerca basata su compressione/clusteringedit

L’approccio VA-file è un caso speciale di una ricerca basata sulla compressione, in cui ogni componente di funzionalità viene compresso in modo uniforme e indipendente. La tecnica di compressione ottimale negli spazi multidimensionali è la Quantizzazione vettoriale (VQ), implementata attraverso il clustering. Il database viene raggruppato e vengono recuperati i cluster più “promettenti”. Sono stati osservati enormi guadagni su VA-File, indici ad albero e scansione sequenziale. Si noti inoltre i paralleli tra clustering e LSH.