【发布时间】:2016-03-05 20:25:36
【问题描述】:
我正在寻找用于存储 3d 点 (x,y,z) 的高效数据结构。在数据结构中的点处存储的效果应该会生成内存效率更高的结构和更快地搜索特定坐标集。 3d 点映射到特定 ID,因此它应该能够跟踪我正在寻找任何可用实现的每组坐标。
x, y, z 给出每个节点的笛卡尔坐标。
id x y z
1 14.566132 34.873772 7.857000
2 16.022520 33.760513 7.047000
3 17.542000 32.604973 6.885001
4 19.163984 32.022469 5.913000
5 20.448090 30.822802 4.860000
6 21.897903 28.881084 3.402000
7 18.461960 30.289471 8.586000
8 19.420759 28.730757 9.558000
坐标的数量会很大,可能在 1 000 000 左右。
提前致谢!
【问题讨论】:
-
到目前为止您考虑过哪些选项?
-
已经考虑过八叉树 en.wikipedia.org/wiki/Octree 和 en.wikipedia.org/wiki/R-tree 但讲解员找到了存储 3d 坐标的任何好的实现
-
您应该指定什么对您很重要。代码可读性(结构的简单数组)、自动矢量化(数组的结构),或者可能是良好的插入/搜索时间(八叉树?)。例如,在 N 体计算中,八叉树是 O(nlog n) 的最佳方法。
-
一百万个浮动三元组远非巨大。
-
与顺序列表相比,内存效率更高的结构不太可能提供更快的搜索时间。通常,有一个权衡。如果您想要更快的搜索,那么您可能需要使用更多内存。如果您想使用更少的内存,那么您将不得不忍受较慢的搜索时间。
标签: c++ data-structures 3d binary-search-tree cgal