【问题标题】:Searching for a 3D vector in an array在数组中搜索 3D 向量
【发布时间】: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


    【解决方案1】:

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

    【讨论】:

    • 我想要数组中 R 的索引(它肯定在数组中的某个位置)。您建议的是 O(n) 的简单算法;我正在寻找的是一种基于哈希函数的快速算法,它至少可以提供 O(log(n)) 性能。
    猜你喜欢
    • 2014-12-02
    • 1970-01-01
    • 2014-06-01
    • 2018-05-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-12-06
    相关资源
    最近更新 更多