J'ai un grand nombre (> 1 million) de points tridimensionnels, un 3-tuple (x, y, z) qui prend des valeurs flottantes. Les points sont liés entre (0,0,0) et (Nx, Ny, Nz). Je suis intéressé à trouver l'indice d'un point provenant de certains calculs, disons R, qui est présent quelque part dans ce tableau. Quel est le moyen le plus rapide de le faire? Y at-il un O (1) algorithme pour rechercher R à travers le tableau? La bonne chose est que la distance entre deux points est toujours supérieure à 0,005.Recherche d'un vecteur 3D dans un tableau
J'ai pensé à la création d'une table de hachage pour stocker l'index de tous les points du tableau, mais je besoin d'une bonne fonction de hachage qui peut convertir (x, y, z) à un hachage unique, -clé. Y at-il une fonction de hachage simple qui peut faire cela? Y at-il une bibliothèque basée sur C qui va aider?
Une simple fonction de hachage qui je pense pourrait générer une clé de hachage unique est:
h(x,y,z) = 1000*x + 1000000*y + 1000000000*z
Ceci est suivi par la création d'un autre tableau d'entiers P de taille = max (h), et mémoriser le indice de (x, y, z) à P [h (x, y, z)] (d'arrondi doit être pris en charge). L'inquiétude est la taille du tableau P - cette approche est-elle assez bonne pour ce problème?
Une alternative au hachage utiliserait k -d arbre. En termes de temps d'exécution, qui fonctionne mieux, approche de hachage-clé ou d'arbre?
(J'utilise C pour ce travail).
Je veux l'index de ** R ** dans le tableau (c'est quelque part dans le tableau pour sûr). Ce que vous suggérez est un algorithme trivial de O (n); ce que je cherche est un algorithme rapide, basé sur la fonction de hachage qui, au moins, peut fournir des performances O (log (n)). – Rak