Pretraživanje najbližeg suseda (engleski: Nearest neighbour search, NNS), koji je takođe poznat kao i okolna pretraga, pretraga sličnosti ili pretraga najbliže tačke, je optimizacija problema za pronalaženje najbliže tačke u metričkim prostorima. Problem je, ako je dat komplet "S" tačaka u metričkom prostoru "M" i tačka pretrage q ∈ M, pronaći najbližu tačku u S do q. U mnogim slučajevima, M se smatra d-dimenzionalnim Euklidovim prostorom i rastojanje se meri Euklidovom razdaljinom, Menhetn razdaljinom ili drugim merama razdaljine.
Donald Knut u 3. tomu dela "Umetnost kompjuterskog programiranja" iz 1973. nazvao je to poštanskim problemom, misleći na princip da se uz mesto prebivališta dodeli najblža pošta.
Problem pretrage najbližeg suseda se pojavljuje u brojnim oblastima primene, uključujući:
Razna rešenja su predložena za NNS problem. Koeficijent efikasnosti algoritma zavise od prostora bilo koje data structure koja mora biti održavana. Neformalno posmatranje se uobičajeno naziva kao kletva dimenzionalnosti, kaže da ne postoji generalno resenje za NNS problem koristeći polinomijalno predprocesiranje i polialgoritamsko vreme pretrage.
Najjednostavnije rešenje NNS problema jeste da se izračuna rastojanje od mesta polaska paketa do svake druge tačke iz baze podataka, vodeći računa o "najboljem do sada". Ovaj algoritam, ponekad moze biti nazvan naivnom prilazu, ima vreme izvršavanja O(Nd), gde je N kardinalnost od S i d je dimenzionalnost od M. Naivna pretraga, uobičajeno, je bolja od deljenja prostora na višim dimenzionalnim prostorima.[1]
Još od 1970tih, metodologija separacije i evaluacije je primenjivana na problem. U slučaju Euklidovog rastojanja ovaj prustup je poznat kao prostorni indeks ili metod prostornog pristupa. Nekoliko metoda razdvajanja prostora je razvijeno radi rešavanja NNS problema. Verovatno je najjednostavnije K-D stablo, koje iterativno polovi pretragu prostora na 2 regije zadrđavajući polovinu tačaka regije roditelja. U zavisnosti od razdaljine određene upitom, prosečna složenost je O(logN)[2] u slučaju nasumično dodeljenih poena, najgori slučaj složenosti analize koji je bio izvršen.[3] Alternativno R-stablo strukture podataka je dizajnirano da pomogne pretrazi najbližeg suseda u dinamičnom kontekstu, pošto ima efektivne algoritme za umetanje i brisanja.
U slučaju generalnog metričkog prostora "branch and bound” pristup je poznat kao metričko stablo. Posebni primer uključuje vp-stablo i BK-stablo.
Koristeći set tačaka uzet iz trodimenzionalnog prostora i njegovim stavljanjem ga u BSP stablo, i koristeći datu upitnu tačku iz istog prostora, moguće rešenje problema se nalazi na sledeći način. (Strogo govoreći, ne postoji takva tačka, zbog toga šo ne može biti jedinstvena. Međutim u praksi, obično nam je jedino cilj da nađemo podskup svih postojećih tačka oblaka na najkraćem rastojanju od date upitne tačke). Ideja je, da se za svaku granu stabla pretpostavi da je najbliža tačka u oblaku koja je u poluprostoru, sadrži tačku polaska. Ovo ne mora da bude slučaj, ali je dobra heuaristika. Pošto se rekurzvno prođe kroz problem nalaženja poluprostora, poredi se rastojanje vraćeno kao rezultat sa najkraćim rastojanjem od tačke polaska do podele paketa. Ovo kasnije rastojanje je između tačke polaska i najbliže tačke koja može da postoji u nepretraženom poluprostoru. Ako je ovo rastojanje veće od ranijeg rezultata, onda je jasno da nema potrebe istraživati ostatak poluprostora. Ako postoji takva potreba, tada se mora rešiti problem za drugu polovinu prostora, i onda da uporedi rezultat sa prethodnim, i vrati odgovarajuća vrednost. Performanca ovog algoritma je bliža logaritamskom vremenu nego linearnom kada je polazna tačka blizu oblaka, zbog toga što je rastojanje između polazne tačke i najbliže tačka oblaka blizu nule, algoritam jedino treba da pretraži koristeci polaznu tačku kao ključ za tačan rezultat.
Locality sensitive hashing (LSH) tehnika je za grupisanje tačaka u prostoru u "kante” na bazi izvesne mere razdaljine. Tačke koje su bliže jedna drugoj u odredjenoj matrici su označene i imaju najviše šanse da budu u istoj "kanti”.[4]
Pokrivno stablo ima teoretsku vezu zasnovanu na setu podataka konstante udvostručavanja. Granica pretrage je O(c12 log n), gde je c konstanta ekspanzije seta podataka.
U visoko dimenzionalnim prostorima stablo indeksiranja struktura postaje beskorisno zbog toga što rastući procenat čvorova mora biti pregledan. Za ubrzavanje linearne pretrage, kompresovana verzija budućih vektora čuvanih u RAM-u se koristi kao prefilter za setove podataka pri prvom izvršavanju. Finalni kandidati su određeni u drugom stupnju koristeći nekompresovane podatke sa diska za izračunavanje udaljenosti.[5]
VA fajl pristup je specijalan slučaj kompresije zasnovan na pretrazi, gde svaka je komponenta kompresovana jedinstveno. Optimalna tehnika kompresije u multidimenzionalnim postorima je vector kvantizacije (VQ), implemetrirana putem grupisanja. Baza podataka se grupiše i najpodesnija grupa se uzima.[6][7]
Postoje brojne varijante za NNS problem, a 2 najpoznatije su pretraga k-najbližih suseda i pretraga ε-aproksimativno najbližih suseda.