【发布时间】:2017-03-15 10:58:15
【问题描述】:
我有一个大数组 (>100 万) 的 3 维点,一个 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
随后创建另一个大小 = max(h) 的整数数组 P,并将 (x,y,z) 的索引存储在 P[h(x,y,z)](需要注意四舍五入)。担心的是数组 P 的大小 - 这种方法是否足以解决这个问题?
哈希的替代方法是使用 k-d 树。在运行时方面,哈希键或基于树的方法哪个性能更好?
(我在这项工作中使用 C)。
【问题讨论】:
标签: hash-function cartesian-coordinates