【发布时间】:2016-02-17 08:53:32
【问题描述】:
我想找到一个内存高效的数据结构,用于搜索一个巨大的 R^3 坐标网络,可能有 100,000-500,000 个坐标。我看过看起来不错的 k-d 树,那里有什么好的数据结构可以进行快速随机和顺序访问吗?编程语言将是 C++ 或 C。我研究了 k-d-tree 和 R^*-tree 是否有一些更有效的数据结构?
id x y z
1 0.1 0.05 0.3
2 0.3 0.22 2.3
3 0.1 0.2 3.3
等等
【问题讨论】:
-
您需要从结构中获得什么样的查询?对于快速顺序和随机访问
std::vector就足够了。 -
我想用给定的 (x,y,z) 坐标进行搜索,它应该是内存高效的。我不认为 std::vector<:vector> > >;对于顺序和随机访问来说会那么有效。
-
@Marcus 我的意思是
std::vector<point_3d>。这是顺序和随机访问的最佳方式。如果你想搜索一个点,这只是另一个问题。由于您实际上并没有使用数据的几何性质,因此简单的std::map或std::unordered_map就可以了。 -
当您说“使用 (x,y,z) 搜索”时,您的意思是完全匹配还是近似匹配。后者要困难得多。请澄清你想对数据结构做什么。 “随机访问”不清楚。
-
考虑使用您的显卡来解决您的问题。着色器可以并行处理 3D 数据点。
标签: c++ data-structures tree