Des Millions de points 3D: Comment trouver le 10 de leur plus proche d'un point donné?

Un point 3-d est définie par (x,y,z). La Distance d entre deux points (X,Y,Z) et (x,y,z) est d= Sqrt[(X-x)^2 + (Y-Y)^2 + (Z-z)^2].
Maintenant il y a un million d'entrées dans un fichier, chaque entrée est un point dans l'espace, dans aucun ordre particulier. Étant donné un point (a,b,c) trouver le plus proche de 10 points. Comment voulez-vous stocker les millions de points et comment feriez-vous pour récupérer ces 10 points à partir de cette structure de données.

  • Avez-vous de créer et de remplir la structure de données avant ou après on vous dit que le point (a,b,c) est? David réponse, par exemple, ne fonctionne pas si vous créez la structure de données tout d'abord, et ensuite un utilisateur types (a,b,c) et veut une réponse instantanément.
  • Bon point (sans mauvais jeu de mots!) Bien sûr, si (a,b,c) n'est pas connu à l'avance, c'est plus un problème d'optimisation de la liste des points pour la recherche par géolocalisation 3D, plutôt que de faire de la recherche.
  • Il devrait vraiment être précisé si le coût de préparation de la structure des données et le stockage des millions de points dans cette structure de données doit être pris en compte, ou seulement la récupération de la performance compte. Si ce coût n'a pas d'importance, alors peu importe combien de fois vous permettra de récupérer les points de kd-tree va gagner. Si ce coût n'a d'importance, alors vous devez aussi spécifier le nombre de fois que vous attendez pour lancer la recherche (pour le petit nombre de recherches de la force brute va gagner, pour les plus grands kd va gagner).
InformationsquelleAutor Kazoom | 2010-03-21