在数组中搜索3D矢量

时间:2017-03-15 10:58:16

标签: hash-function cartesian-coordinates

我有一个大数组(> 1百万)的三维点,一个3元组( x,y,z ),它取浮点值。这些点在(0,0,0)和( Nx,Ny,Nz )之间界定。我有兴趣找到某个计算点的索引,比如说 R ,它出现在这个数组的某个地方。这样做的最快方法是什么?是否有 O (1)算法通过数组搜索 R ?好处是任何两点之间的距离总是大于0.005。

我一直在考虑创建一个哈希表来存储数组中所有点的索引,但是我需要一个可以转换的好的哈希函数( x,y,z )到一个唯一的哈希键。是否有一个简单的哈希函数可以做到这一点?是否有任何基于C的库可以提供帮助?

我认为可以生成唯一哈希键的简单哈希函数是:

h(x,y,z) = 1000*x + 1000000*y + 1000000000*z

然后创建另一个size = max(h)的整数数组 P ,并将<(em> x,y,z )的索引存储在 P [ h x,y,z )](需要注意四舍五入)。担心的是数组 P 的大小 - 这种方法对这个问题是否足够好?

hash的替代方法是使用 k -d tree。在运行时方面,它表现更好,哈希密钥或基于树的方法?

(我正在使用C进行这项工作)。

1 个答案:

答案 0 :(得分:0)

我不确定我是否理解这个问题是正确的,但我不能发表评论。只需要在大型数组中查找值的提示是min(数组 - 您要查找的值)。我发现这很快,但我不确定什么是最快的方式。但是找到你的价值你永远不会得到O(1)至少O(n);)