我有一个(时间戳,纬度,经度)形式的数据集。我将获得n个条目,其中每个条目的形式为(时间戳,纬度,经度)。这适用于一个用户。
User1:(timestamp1,latitude1,longitude1)....(timestamp_n,latitude_n,longitude_n)
现在假设我们有100个用户,每个用户都有一组(时间戳,纬度,经度)
我想知道哪些用户可能具有匹配的轨迹。 匹配轨迹将采用相同的路线,因此在给定的时间戳集中,纬度和经度应该相同或足够接近,并且时间戳应该相同或足够接近。对于时间戳来说足够近可以是大约30秒,而对于空间来说它可以是200米。我可以通过蛮力方法做到这一点,我正在寻找更好的解决方案。
答案 0 :(得分:1)
您可以使用k-dtree或range tree来索引数据。通过这些功能,您可以高效地对数据的所有三个维度执行范围查询。
答案 1 :(得分:1)
这与算法是否仍然是暴力无关。
我想在这里展示的是如何衡量两条路径之间的差异。 只是我认为精确定义如何量化差异将是重要的。 如果你想要更快的东西,那么你以后可能会近似这个数量。
好的,我认为两条路径之间的区别是:
The average distance between 2 users over time.
您应该能够在两个给定的数据点之间进行插值,以找出用户在任何给定时间的位置。只需线性插值即可。
当我说平均值时,人们会将时间离散化,以便更容易计算。 让我们说:
The average distance between 2 users every 10 seconds period.
编辑:上述建议假设您关心“时机”。 既然你提到时间戳和所有。 如果你不关心它,你不应该首先把它放在问题中。
无论如何,我有点想象你可能只想看看路径本身。 在这种情况下,您仍然可以使用上面的路径差异定义 只需忽略实际的时间戳,并想象用户在路径的开头同时开始。 可以通过各种方式设置行驶速度......例如,无论一条路径是否比另一条路径长,都可以让两个用户同时完成路径,或者可以让两个路径以相同的速度行进。
无论如何,这一切都取决于定义你想如何衡量路径差异。 您需要在问题中提供更多详细信息。