我有一个超过100000点的3D对象,这些点有一个id和x,y,z位置值。我需要找到特定x范围的点id,其中y和z值是静态的。
例如 -
---- --- --- ---
| Id | x | y | z |
|----|---|---|---|
| | | | |
如果我需要找到(x,y,z)之间的点id
我应该使用什么样的数据容器来有效地实现这一目标?
非常感谢任何帮助。
答案 0 :(得分:1)
因为2坐标总是静态的,你可以为每个坐标做一个简单的排序数组,或者平衡BST(或skip list / B+ tree / ...)如果你还需要支持有效的添加/删除。 (想一想,跳过列表可能更容易实现,只需找到范围内的第一个点,并迭代直到你超出范围)。
这将需要O(logN)
进行查询(如果您需要实际点O(logN+k)
,其中k
是点),并O(NlogN)
初始化。
所以,算法将是:
2 + 3的复杂度为O(logN)
,其中4为O(k)
,其中k
为返回的点数(如果您需要实际点,则无法避免;不具体的聚合)。