最近邻搜索算法指在一个基于路网的图中查找离查询点最近的k个特定的点,比如加油站。
现有的基于迪杰斯特拉的搜索算法具有很大的盲目性,需要查询很多无关结点。如图所示,v6为查询点,而v7和v8为能满足要求的目标点,取k=1。显然有结点v7是我们查询的结果,但采用迪杰斯特拉算法需要遍历结点:“v1、v2、v3、v4、v5、v6、v7、v9、v10”。显然在查询点右侧是肯定不存在查询结果的。针对于此缺陷作者提出了自己的G-Tree索引。
作者将图划分为若干相等的区域,小区域作为树的叶子结点,相邻的小区域组合为大区域。如上图我们可以将图分为g1 =“v1、v2、v5、v6、v9、v10”和g2 =“v3、v4、v7、v8、v11、v12”两部分。给定查询点v6,目标点v7、v8,k为1。仍利用迪杰斯特拉的求解思想:
(1)易得查询结果存在于区域g2中,而不存在于g1中;
(2)计算包含目标点区域中离查询点近的实际路网距离,直到计算出k=1个目标点。
显然上述计算过程通过计算g1避免了计算查询点到g1区域中任意点之间的实际路网距离,即解决了以往计算盲目性的问题。
论文:G-Tree: An Efficient Index For KNN Search On Road Networks