我想知道是否有一种算法可以在O(n)时间内计算最近位置(用经纬度表示)。
我知道可以使用Haversine公式获取参考点到每个位置的距离并按升序排序,但对于大型数据集来说效率低下。
MySQL的DISTANCE()函数执行效率如何? 我猜是O(n)吗?
我想知道是否有一种算法可以在O(n)时间内计算最近位置(用经纬度表示)。
我知道可以使用Haversine公式获取参考点到每个位置的距离并按升序排序,但对于大型数据集来说效率低下。
MySQL的DISTANCE()函数执行效率如何? 我猜是O(n)吗?
我自己没有看过,但Postgres确实有一个专门用于管理GIS数据的模块。
在我以前工作的一个应用程序中,我们将所有数据计算出其四叉树(2D空间)或八叉树(3D空间)的关键字,并将其存储在数据库中。然后,只需从数据库加载值(以防止您重新计算四叉树),并遵循标准的四叉树搜索算法即可。
当然,这意味着您至少会触及所有数据以将其放入数据结构中。但是,持久化此数据结构意味着您可以从那时起获得更好的查找速度。我想您将为每个数据集执行许多最近邻检查。
(对于kd-tree,维基百科有一个很好的解释:http://en.wikipedia.org/wiki/Kd-tree)
我想理论上你可以这样做,如果你有足够大的表来完成这个... 其次,也许正确地缓存可以让你得到非常好的平均情况?
可以使用R-Tree索引来加速空间搜索。一旦创建,它允许这样的搜索比O(n)更好。