Algorithm kd树是否适用于4D时空数据(x、y、z、时间)?

Algorithm kd树是否适用于4D时空数据(x、y、z、时间)?,algorithm,math,search,data-structures,multidimensional-array,Algorithm,Math,Search,Data Structures,Multidimensional Array,我想使用数据结构对时空数据(x,y,z,time)进行排序 目前,处理算法搜索一组4D(x、y、z、时间)点,给定球形(3d)空间半径和线性(1d)时间半径,标记每个点,其他点在这些半径内。原因是经过处理后,我可以在O(1)时间内为所有相邻点询问任何4D点 然而,在一些常见的空间和时间半径配置中,算法的第一次运行大约需要12小时。信不信由你,与我们行业的现状相比,这实际上是很快的。不过,我想帮助加快初始运行,因此我想知道:是否适合4D时空数据? 请注意,我不是在寻找最近邻搜索或k-最近邻搜索的实

我想使用数据结构对时空数据(x,y,z,time)进行排序

目前,处理算法搜索一组4D(x、y、z、时间)点,给定球形(3d)空间半径和线性(1d)时间半径,标记每个点,其他点在这些半径内。原因是经过处理后,我可以在O(1)时间内为所有相邻点询问任何4D点

然而,在一些常见的空间和时间半径配置中,算法的第一次运行大约需要12小时。信不信由你,与我们行业的现状相比,这实际上是很快的。不过,我想帮助加快初始运行,因此我想知道:是否适合4D时空数据?

请注意,我不是在寻找最近邻搜索或k-最近邻搜索的实现

更多信息:

示例数据集具有450000个4D点

有些数据集是时间密集型的,因此按时间排序当然可以节省处理时间,但仍然会导致许多距离检查

时间由Excel样式的日期表示,典型范围为30000-39000(近似值)。空间范围有时是较高的值,有时是较低的值,但每个空间坐标之间的范围与时间相似(例如maxX minX~maxT minT)

更多信息:

我想我应该添加一些稍微不相关的数据,以防有人处理过类似的数据集

基本上,我使用的是表示时空事件的数据,这些数据由多个传感器记录和证实。由于涉及错误,因此只包括满足错误阈值的事件

这些数据集的时间跨度为5-20年

对于真正古老的数据(>8年),事件通常非常密集,原因有两个:1)当时可用的传感器相对较少,2)传感器放置在一起,以便能够以较低的误差正确证实附近的事件。可以记录更多事件,但它们的错误太高


对于较新的数据(您没有提供足够的信息来回答这个问题

但可以肯定的是,一般来说,kd树非常适合4维(或5维、6维或…)数据——如果空间(或在您的情况下是空间/时间)分布适合kd树分解。换句话说,这取决于(听起来熟悉吗?)

kd树只是空间分解的一种方法,适用于某些局部搜索。当你进入更高的维度时,维度问题的诅咒当然会浮现出来,但4d也不算太糟糕(不过你可能至少需要几百个点)


为了知道这是否适用于您,您必须分析一些其他标准。近似NN搜索是否足够好(这会有很大帮助).树平衡可能会很昂贵吗?等等。

如果存储了时间维度中排序的点的索引,是否可以先在一维时间维度中执行初始修剪,从而减少距离计算的数量?(或者这是过于简单?

如果数据相对时间密集(空间相对稀疏),最好在空间维度上使用3d kd树,然后简单地拒绝感兴趣的时间窗口之外的点。这将解决您的混合空间/时间度量问题,代价是稍微复杂一点的点结构。

对我的评论进行一点扩展,以获得上述答案:

根据文献,kd树需要具有欧几里德坐标的数据。它们可能不是严格必要的,但它们肯定是足够的:确保所有坐标都是欧几里德坐标可以确保应用正常的空间规则,并且可以根据点的位置轻松划分点,并建立树结构e

时间有点奇怪。在狭义相对论的规则下,当你处理时间坐标时,你使用的是一个闵可夫斯基度量,而不是标准的欧几里德度量。这导致了各种各样的问题(其中最严重的是破坏了“同时性”的含义)但这种恐惧并没有充分的根据,因为除非你知道你在研究物理,否则你的时间坐标实际上几乎肯定是欧几里得坐标

一个坐标是欧几里德坐标意味着什么?它应该独立于所有其他坐标。说时间是欧几里德坐标意味着你可以回答这个问题:“这两个点在时间上紧密吗?”通过只查看它们的时间坐标,而忽略任何额外的信息,很容易看出为什么不具有该属性可能会破坏按坐标值划分点的方案;如果两个点可以具有完全不同的时间坐标,但仍被视为“时间接近”,那么按时间坐标对它们进行排序的树就不能很好地工作

欧几里德时间坐标的一个例子是在一个单一的、一致的时区(如UTC时间)中指定的任何时间。如果你有两个时钟,一个在纽约,一个在东京,你知道如果你有两个标记为“12:00 UTC”的测量值,那么它们是同时进行的。但是如果测量值是在当地时间进行的,那么一个是这样说的“纽约时间12:00”和“东京时间12:00”,您必须使用有关城市位置和时区的额外信息来计算两次测量之间经过的时间


因此,只要您的时间坐标是一致测量且正常的,它将是欧几里德的,这意味着它将在kd树或类似的数据结构中正常工作。

实际上,这就是当前算法的工作方式。数据在时间维度中排序,因此我们可以在时间维度中遍历时进行修剪