Voici un problème de voisin le plus proche.
Étant donné les réels (très grand !), Plus le réel cible , trouver et dont la somme est la plus proche de . Nous autorisons un prétraitement / indexation raisonnable de (jusqu'à ), mais au moment de la requête (étant donné ), le résultat doit être renvoyé très rapidement (par exemple, heure). n p a i a j p a 1 , … , a n O ( n log n ) p O ( log n )
(Exemple plus simple: si nous voulions uniquement le SINGLE plus proche de , nous hors ligne, , puis ferions une recherche binaire au moment de la requête, ). p a 1 , … , a n O ( n log n ) O ( log n )
Solutions qui ne fonctionnent pas:
1) Triez hors ligne, puis au moment de la requête, commencez par les deux extrémités et déplacez deux pointeurs vers l'intérieur ( http://bit.ly/1eKHHDy ). Pas bon, en raison du temps de requête .
2) Triez hors ligne, puis au moment de la requête, prenez chaque et effectuez une recherche binaire pour un "copain" qui l'aide à additionner quelque chose proche de . Pas bon, en raison du temps de requête .a i p O ( n log n )
3) Triez toutes les paires hors ligne, puis effectuez une recherche binaire. Pas bon, à cause du prétraitement .O ( n 2 )
Merci!
ps. Autres généralisations nécessaires pour la pratique: (1) et pour être des vecteurs à 50 dimensions, (2) "close" pour être la distance du cosinus du vecteur, et (3) -les meilleures paires les plus proches-cette somme, pas seulement 1-meilleur. p k