在多维数据集

时间:2017-12-01 03:47:30

标签: algorithm math time-complexity

给定一个3D整数数组,确定多维数据集中存在哪些整数的算法复杂度是多少?我假设这些点可以用多个并发数据结构表示,每个数据结构都按一个或多个维度排序。

我的直觉告诉我,在1D中给出一个排序的点数组,可以确定O(log(n)之类的某些下限和上限之间的点子集,但我会非常感谢其他人可以提供的任何见解关于这个概念(以及任何其他人可以提供的对多维案例的推广!)。

1 个答案:

答案 0 :(得分:1)

如果您不熟悉所涉及的数学,我建议首先在二维中使用矩形来解决此问题。这样,你就可以熟悉数学,这实际上只是一些基本的三角学。在那之后,踩到三个维度并不是很困难。

如果立方体(或矩形)是轴对齐的,则问题要简单得多,因此您可能应该首先执行此操作。有关确定所需旋转的示例,请参阅How to calculate rotation angle from rectangle points?

一旦确定了旋转角度,就可以将矩形转换为原点并通过在此处接受的答案中执行前两个步骤来旋转它:Drawing a Rotated Rectangle

现在你有一个以原点为中心的轴对齐矩形。

最后,对于你的每一点:

  1. 应用与矩形相同的平移和旋转。
  2. 测试结果点中的x和y坐标是否在矩形内。这至多是四个边界检查。
  3. 如果该点位于矩形中,请将其保存。
  4. 一旦您在二维中完成此操作,您应该能够将这些概念应用于三维。

    算法为O(n),其中n是点数。