寻找航点轨道的最快部分

时间:2012-12-03 21:10:08

标签: algorithm gps

运动跟踪器应用程序通常以固定间隔记录时间戳和位置,以便存储整个轨道。然后,分析应用程序允许找到某些统计数据,例如具有固定持续时间的最高速度的轨道子部分(例如,5英里所需的时间)。反之亦然,在一定时间跨度内穿越的最长距离(例如,12分钟内的库柏距离)。

我想知道计算这些部分的最优雅和/或最有效的方法是什么。

在一种天真的方法中,我会对航点进行标准化和插值,以获得更细粒度的航点列表,可以使用固定的时间间隔或固定距离步长。然后,移动一个表示我的时间跨度的滑动窗口。列表上的距离分段,并搜索符合我标准的最佳子列表。还有更好的办法吗?

1 个答案:

答案 0 :(得分:1)

优雅和高效是旁观者的眼睛。

就个人而言,我认为你的插值理念很优雅。

我认为插值算法易于构建,并且您将对后续数据执行的搜索很容易执行。这可能导致严密的代码,其正确性可以轻松验证。此外,插值算法可能已经存在并且是多用途的,因此您不必重复自己(DRY)。您建议的解决方案具有将数据处理与数据分析分离的好处。这种性质的模块化通常被认为是优雅的一部分。

效率 - 我们在谈论速度,空间或代码行吗?您可以尝试将插值步骤与搜索步骤结合起来以节省空间,但这可能会牺牲速度和代码简单性。当然,在多个查询无法利用以前的计算的意义上,牺牲了速度。

当您考虑代码的效率时,不必担心计算机将如何处理它,或者如何编写代码。更深入地思考方法的内在时间复杂性。我怀疑插值和搜索都可以在O(N)时间内进行,在这种情况下,需要大量的数据才能让你陷入困境:很难使O(N)算法表现得非常糟糕。

为了支持上述内容,插值只是估计两个值之间的中间点,因此这在值的数量上是线性的,在中间点的数量上是线性的。可以使用Knuth-Morris-Pratt Algorithm的数字变体进行搜索,这也是线性的。