Sélectionnez deux nombres qui totalisent

9

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 )a1,,annpaiajpa1,,anO(nlogn)pO(logn)

(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 )aipa1,,anO(nlogn)O(logn)

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 .a1,,anO(n)

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 )a1,,anaipO(nlogn)

3) Triez toutes les paires hors ligne, puis effectuez une recherche binaire. Pas bon, à cause du prétraitement .O ( n 2 )(a1,,an)O(n2)

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 ka1,,anpk

Kevin
la source
Y a-t-il une limite au temps de prétraitement ou à la quantité d'espace que nous pouvons utiliser après le prétraitement? Si nous sommes limités à l' espace , avez-vous des raisons de croire qu'il peut être résolu, disons, en temps O ( lg n ) ? Cela me semble terriblement improbable. O(n)O(lgn)
DW
Le prétraitement est limité à O ( log n ). J'ai mis à jour l'énoncé du problème. nn
Kevin
Je n'ai aucune raison de croire que l'interrogation peut être rapide, mais de nombreux résultats utiles pour les voisins les plus proches (arbres kd, hachage sensible à la localité, etc.) me semblent contre-intuitivement bons. Une solution approximative utilisant un hachage sensible à la localité conviendrait parfaitement à une utilisation pratique.
Kevin

Réponses:

17

C'est presque certainement impossible.

P(n)Q(n)nP(n)+nQ(n)akai+ajakak

O(n2)Ω(n2)Ω(n2/polylogn)

En supposant donc que la conjecture est correcte, votre problème nécessite soit un temps de prétraitement (presque) quadratique, soit un temps de requête (presque) linéaire.

Jeffε
la source
2

Si vous pouvez utiliser un espace et un temps illimités pendant le prétraitement, la solution suivante répond à vos besoins:

  • {ai+aj:1ijn}O(n2)O(n2)

  • ai,ajai+ajpO(lgn)

Si cette solution n'est pas acceptable, vous devez réfléchir plus attentivement à vos besoins et modifier la question en conséquence.

DW
la source
Salut et merci! Mais votre solution est la même que ma solution n ° 3, ce qui est problématique en raison du temps de prétraitement O (n ^ 2). Dans mon cas, n est très grand (par exemple, 1 m) et je dois éviter les opérations O (n ^ 2).
Kevin