【发布时间】:2013-06-07 13:39:35
【问题描述】:
我正在尝试找出一种算法,可以对立方区域(例如由 (0, 0, 0) 定义的区域到 (1, 1, 1) 定义的区域进行排序,并且在给定坐标。
ex:数据结构包含区域:(0, 0, 0) 到 (100, 100, 100), (1000, 1000, 1000) 到 (1010, 1010, 1010) 和 (-50, -50, - 50) 到 (60, -60, 60)
因此搜索 10、10、10 将返回区域 1,(1001、1001、1001)将返回区域 2 等等
排序、添加、删除时间可能很长。我需要一个快速的搜索时间 我们可以假设它的唯一整数将被搜索,并且制作 3d 网格并参考该区域填充该区域内包含的每个单元格的解决方案不是一个可接受的解决方案,我没有 3TB 的 ram 专用于此:P。 我们也可以假设区域不会重叠,如果这对任何人都有帮助的话
如果有人有想法,我很高兴听到它
谢谢大家
-奥利维尔-
编辑:使用包含 minX、minY、minZ、maxX、maxY、maxZ 的结构来表示一个区域,并将所有这些区域放在一个列表中,您可以在其中一一搜索(通过检查坐标是否大于 minX 但比 maxX 更小,并且每个坐标都相同)仍然太慢 O(N)
目前我正在探索使用 n 叉树进行排序的想法,先按 x 排序,然后按 y 排序,然后按 z 排序,但我不知道它是否会是一个好方法
【问题讨论】:
-
对空间进行分区时要特别小心。如果你不走运,一个子立方体可能属于许多分区。您要么必须对其进行不均等的分区(每个分区的大小不同),要么将子立方体添加到它所属的所有分区中(这是一个更好的解决方案,我认为)。
标签: performance algorithm sorting search