G-Tree索引结构
1.G-Tree索引
最初论文:R. Zhong, G. Li, K. Tan, L. Zhou and Z. Gong, "G-Tree: An Efficient and Scalable Index for Spatial Search on Road Networks, in IEEE Transactions on Knowledge and Data Engineering, vol. 27, no. 8, pp. 2175-2189, 1 Aug. 2015.
1.1主要内容
摘要:
近几十年来,我们目睹了基于位置的系统的迅速普及。基于位置的道路网络查询主要有三种:单对最短路径查询、k近邻查询和基于关键字的kNN查询。受R-树的启发,提出了一个高度平衡且可伸缩的索引,即G-树,以有效地支持这些查询。
与以往分别支持这些查询的工作不同,G-tree在一个框架中支持所有这些查询。这也是G-Tree索引适用性广的表现,用一个框架解决地图位置查询的多个问题,具有普适性。
该框架的基础是一种基于装配的方法来计算两个顶点之间的最短路径距离。在基于装配的方法的基础上,开发了有效的搜索算法来回答kNN查询和基于关键字的kNN查询。
实验结果表明,G-tree方法在理论和实践上都优于现有的方法。
主要分为以下几个部分来介绍基本的G-Tree问题:
- 问题定义:介绍和定义三种查询问题
- 索引构建:如何在地图上构建G-Tree索引
- 索引查询:在构建的索引上针对三种查询问题,各自的搜索方式。
- 其他:G-Tree问题的补充说明和优化
- 实验:G-Tree索引效率分析,以及和现有算法的对比
1.2问题定义
首先定义了G-Tree针对的3种基于位置的路网查询
-
单对最短路径查询
比较好理解,就是返回两点之间的最短距离。
-
K最近邻查询
给定一组候选点集合,查询集合中距离某点最近的k个点。
-
基于关键词的kNN查询
和K最近邻查询类似,用两点之间定义的函数式取代距离。
其中TXDist是衡量文本相关性的参数。
TF-IDF(term frequency–inverse document frequency)是一种用于信息检索与数据挖掘的常用加权技术。
TF-IDF是一种统计方法,用以评估一字词对于一个文件集或一个语料库中的其中一份文件的重要程度。
- 字词的重要性随着它在文件中出现的次数成正比增加。
- 同时会随着它在语料库中出现的频率成反比下降。
举个例子:假定节点A的文本描述文件中包含关键词,“餐厅,商场,购物,西餐厅”,那么当以西餐为关键词进行搜索,西餐在语料库里出现的频率越低,与节点A越匹配,则节点A的文本相关性数值就越高。
语料库可以理解为搜索的“词典”,出现的词频率越低,则说明该词汇的独特性越高,价值越高。
1.2.1G-Tree索引
概念
适应于路网的,一种高度平衡的索引结构
- 高效性:可以在查询时修剪没有前景的子树
- 可扩展性:可以适应不同类型的查询,如kNN等。
定义
子概念定义
G-Tree定义
定义G-tree,G-tree是满足以下性质的平衡搜索树。
- 定义子图 ,超图。
- 每个非叶节点有f(≥2)个子节点
- 每个叶节点最多包含(≥1)个顶点。叶节点出现在同一级别。
- 每个节点维护其边界集和距离矩阵
- 非叶节点的距离矩阵:子节点中边界点之间的最短距离
- 叶节点的距离矩阵:所有点和边界点的最短距离
- 对于关键字查询,每个节点还存储额外的信息
1.3索引构建
构建索引主要分两步
1. 构造树形结构
采用基于图划分的方法
- 将图作为根,分成个等大小的子图,继续将它们作为根,递归分配子图并重复这一步骤,直到每个最小子图顶点数≤。(多级划分算法)
注:图划分利用metis函数接口
“METIS是一组串行程序,用于对图进行分区、对有限元网格进行分区,以及生成稀疏矩阵的填充减少顺序。在METIS中实现的算法基于多级递归对分、多级k-way和多约束划分方案。
具体见:”http://glaros.dtc.umn.edu/gkhome/metis/metis/overview/
- 划分过程中记录边界点
2. 计算距离矩阵
- 单源最短路径算法,如Dijkstra算法
1.4索引查询(搜索策略)
在将地图构造为G-Tree结构后,针对三种应用场景,提出具有针对性的查询方案。
1.4.1 单源最短路径(SPSP)
- 算法核心:
基于“装配”的方法:最短路径距离由许多片段拼接而成
查询:(,)的最短路径距离
讨论两种情况:
1. 和在不同叶节点:MINDIST-OUTSIDE-LEAF
eg.(v1,v2)
特点:u和v之间的任何最短路径必然包含边界点
利用边界点的拼接,来表示最短路径。
- 首先计算它们的最小共同祖先和从LCA (,)到leaf ()和leaf ()的路径上的节点。
- 使用动态规划的方式来计算SPDist (,).
eg.(4->9的最短路径)
首先找到一条G-Tree中通过叶子节点的通路,如图(a)
按照拼接的方式计算距离,如图(b)
最后计算叶子节点之间用哪些边界点连通,距离代价最小。
2. 和在同一叶节点:MINDIST-INSIDE-LEAF
如(v1,v6),需考虑v1->v6 ,v1->v2->v6两条路径的长度。
- SP (,) 所有点在叶节点内:
Dijkstra算法 -
SP (,)包含叶节点外的点:
SP (,)必包含其所在叶节点的两个边界点
-
最终取以上两种情况的最小值
1.4.2 kNN查询
目标:查询q=(,,),返回中与距离top-k近的点。
问题:KNN实际是比较多个最短路径,计算量较大; top-k排序
- 计算SPDist (,v∈C )
利用公共路径节省计算量
不同的最短路径开始于共享公共的子路径,并不需要多次计算重复路径距离。
- 获取top-k个结果
子图(节点)离越近,包含top-k对象的可能性越大
使用优先级队列来管理遍历过的g树节点
采用基于“装配”的方法
-
定义 和 G-tree 节点 n的最短距离:实际上是vq到该叶节点边界点的最短距离。
- G-树的逐步节点扩展过程中,有效利用中间距离,实现剪枝。
-
基于用户定义的候选对象集,排除没有可能性的g树节点
如
查询:v4最近的2个点,候选集{3,9,15}
1.4.3 关键字KNN查询
将代价函数从距离替换为关键字估值函数即可。
1.5其他
1.5.1最短路径距离->最短路径
计算返回最短路径距离,如何还原整条路径?
1.5.2 高效计算距离矩阵
自底向上计算距离矩阵
先计算下层的距离矩阵,然后用这些距离计算上层的距离矩阵
1.6实验
论文的作者团队把G-Tree相关代码也放出来了
见github:https://github.com/TsinghuaDatabaseGroup/GTree
其他实验展示部分见论文。
2.G*-Tree索引
论文:《G∗-Tree: An Efficient Spatial Index on Road Networks》
对于G-Tree,存在实际距离小,但G-Tree中间叶节点多的情况,使一些原本的简单搜索复杂化。
Eg.v5 ->v9
G-Tree:访问5个节点:D, A,R,B, F ;迪杰斯特拉算法:v4, v9
在此基础上提出G*-Tree,作为改进
-
为了加速距离查询,树的核心思想是在选定的叶节点之间建立快捷路径,每个快捷路径存储两个叶节点边界之间的距离。
3.G-Tree索引应用
G-Tree索引有很多应用,以下是一些例子。
3.1个性化路径推荐
用G-Tree计算多个参数综合路径推荐
《Route Recommendation with Dynamic User Preference on Road Networks》
3.2动态查询
- 当q运动时,其knn个点发生变化,如何计算?
论文:《Continuous Path-based Range Keyword Queries on Road Networks》
- 当关键词是时间相关时,如何进行关键词knn搜索?
论文:《Towards Efficient Framework for Time-Aware Spatial
Keyword Queries on Road Networks》
4.总结
- G-Tree作为一种将图组织起来的检索结构,可以应用到多种图搜索问题上,基于装配的思想提高了计算图中代价的效率。
- 对于需要大量计算的KNN问题和关键字匹配问题,节省了搜索时间。
- 其“动态性”主要体现在数据即代价或者关键词的动态性,图的结构是固定的。