Oto problem najbliższego sąsiada.
Biorąc pod uwagę liczby rzeczywiste (bardzo duże !), Plus cel rzeczywisty , znajdź i których SUMA jest najbliższe . Umożliwiamy rozsądne wstępne przetwarzanie / indeksowanie (do ), ale w czasie zapytania (dane ) wynik powinien zostać zwrócony bardzo szybko (np. czas).
(Prostszy przykład: jeśli chcielibyśmy tylko POJEDYNCZEGO najbliższego , posortowalibyśmy offline, , a następnie przeszukaliśmy binarnie w czasie zapytania, ).
Rozwiązania, które nie działają:
1) Sortuj offline, a następnie w czasie zapytania zacznij od obu końców i przesuń dwa wskaźniki do wewnątrz ( http://bit.ly/1eKHHDy ). Nie dobrze, ze względu na czas zapytania .
2) Posortuj offline, a następnie w czasie zapytania, weź każdy i przeprowadź wyszukiwanie binarne dla „kumpla”, który pomoże sumować się do czegoś zbliżonego do . Nie dobrze, ze względu na czas zapytania .
3) Posortuj wszystkie pary offline, a następnie przeprowadź wyszukiwanie binarne. Nie dobrze, ze względu na wstępne przetwarzanie .
Dzięki!
ps. Do uogólnienia potrzebne są dalsze uogólnienia: (1) i to wektory 50-wymiarowe, (2) „close” oznacza wektorową odległość cosinus i (3) najbliższe pary-suma, nie tylko 1 najlepszy.