基于集中式平台的最短路径关键节点查询方法

文档序号:9288462阅读:536来源:国知局
基于集中式平台的最短路径关键节点查询方法
【技术领域】
[0001] 本发明涉及的是一种计算机图论领域的技术,具体是一种基于集中式平台的最短 路径关键节点查询方法。
【背景技术】
[0002] 目前有许多最短路径方面的算法,即节点S到节点t的最短路径记为SP(s,t), 相应的最短距离为dist(s,t)。Disjktra是图论单源最短路径问题的经典算法,但其效率 不能满足主流需求。近年涌现出许多相关的高效算法,比如A*,一种启发式的节点对节点 最短路径直接搜索算法;比如结合了地标(landmark)思想,应用三角形边长不等式约束的 ALT算法;比如Abraham等人提出的hub标签算法(hublabeling,HL);以及缩略层次算法 (ContractionHierarchies,CH),一种含有索引结构的预处理最短路径算法,通过在预处 理中添加shortcut来提高查询效率。
[0003] Abraham等人提出的层次hub标签(Hierarchicalhublabeling)算法中,将所有 节点按照一定标准排序,使得每个节点对应一个不同的层次(level)。每个节点u包含两个 标签:前向标签Lf(u)和逆向标签Lr(u)。以前向标签为例,每个节点的标签里都存储着一 个二元集合{(Vi,d(u,V》),(v2,d(u,v2)),. . .,(vx,d(u,vx))},每个二元组由一个节点vi和 u与这个节点之间的距离d(u,vj(在逆向标签中,贝lj为d(X,u))组成。节点u的标签包含 了u的部分连接信息。层次hub标签满足覆盖属性:对于两个任意节点s和t,必有一个在 s-t最短路径上的节点W,它同时属于Lf(S)和Lr(t),而且它是最短路径SP(s,t)上层次 最高的节点。
[0004] Akiba等人在《FastExactShortest-PathDistanceQueriesonLarge NetworksbyPrunedLandmarkLabeling》提出的剪枝标签构造(PL)是一种标签构造方 法,通过大量剪枝来实现层次hub标签的高效构造。
[0005] 然而,在大多数情况下并不需要详细、完整的最短路径,只需要得到部分子路径 即可,因而一些路径概要算法成为研究热节点。YufeiTao等人2011年在《Onk-skip ShortestPaths》提出的k-skip算法也是一种路径概要算法,对查询节点对,能给出k-skip最短路径P* :实际最短路径上每k个连续的节点就至少有一个节点在P*里,也就是 说,P*按至少1/k的概率给P采样。
[0006] 在日常生活中,往往可以凭借经验判断路网上各节点的重要性,即其关键度。关键 度代表着节点在路网中的重要性,不同的关键度定义和排序,会造成标签构造结果的差异。 全部节点的关键度可以被视为所有节点的一个全序,将节点V的关键度表示为r(v)。
[0007] 经过对现有技术的检索发现,中国专利文献号CN102521364B,公告日 2014. 10. 15,公开了一种图上两节点间最短路径的查询方法,包括:1)从图上随机抽取若 干节点作为支节点,根据各支节点间的最短路径得出图上每节点的中间性估计值;2)将中 间性估计值大于设定值的节点作为中心节点,将图中各节点到各中心节点的最短路径信息 加入图中各节点的hop信息,这些中心节点的集合记为Wb;3)将图去除Wb中各节点后分割 为若干小图Si,并得到节点割集Ws;4)对于每个小图Si根据枚举出的任意两节点间最短 路径,得到该小图Si内所有节点的hop信息;5)根据Wb中各节点到Ws中各节点的最短路 径得到不同小图之间的节点的hop信息;6)根据图中各节点的hop信息,得到用户输入的 两查询节点的最短路径。但该技术需要辅助查询以确定邻节点,虽在预处理阶段耗时较短, 但在查询阶段需要更长的时间,限制了查询效率的提高。

【发明内容】

[0008] 本发明针对现有技术存在的上述不足,提出一种基于集中式平台的最短路径关键 节点查询方法,算法分为预处理和查询两个阶段。在预处理阶段构造层次标签,使其满足覆 盖性质。查询时通过调取标签和拆分路径,返回最短路径上指定个数的关键节点。
[0009] 本发明是通过以下技术方案实现的:
[0010] 本发明通过在集中式平台上对图中的所有节点按照关键度由高到低进行:
[0011] a)剪枝标签构造,对应得到每个节点的满足覆盖性质的层次标签,或者是
[0012] b)改进型剪枝标签构造对应得到每个节点的满足真覆盖性质的层次标签,
[0013] 然后通过任意节点对间的最短路径关键节点查询,返回最短路径上指定个数的关 键节点。
[0014] 所述的剪枝标签构造是指:对图中的每个节点进行剪枝Dijkstra搜索和HL算法 查询,得到满足覆盖性质的层次标签。
[0015] 所述的覆盖性质是指:对任意一对节点对<s,t>,其标签Lf(s)和Lr(t)的交集包 含该节点对之间最短路径SP(s,t)上关键度最高的节点。
[0016] 所述的改进型剪枝标签构造是指:通过修改标签构造方式,使其满足真覆盖性质 以进一步提高查询时的效率。
[0017] 所述的真覆盖性质是指:对任意一对节点对<s,t>,其标签Lf(s)和Lr(t)的交集 包含最短路径SP(s,t)上关键度最高的非端节点节点。
[0018] 所述的最短路径关键节点查询,通过输入查询节点对,经过迭代地进行:调取标 签、更新优先队列并进行路径拆分的过程,查找最短路径中的关键节点并返回指定个数的 关键节点。
[0019] 针对剪枝标签构造的层次标签,其拆分路径的具体操作为,将包含关键节点的子 路径从关键节点的前、后相邻节点位置拆分为三个子路径,并在拆分后的第一个和第三个 子路径中迭代调取标签并得到新的关键节点。
[0020] 针对改进型剪枝标签构造的层次标签,其拆分路径的具体操作为,将包含关键节 点的子路径从关键节点位置拆分为两个子路径,并在拆分后的两个子路径中迭代调取标签 并得到新的关键节点。
[0021] 所述的关键度,即覆盖能力,具体是指:一个节点所覆盖的最短路径个数。当一条 最短路径经过一个节点V,则该节点v覆盖了这条最短路径。
[0022] 所述的覆盖能力C(v) = Es,t EV〇(s, t, V),其中:〇(s, t, V)是v经过的最短路径 (S,t)的个数。
[0023] 所述的关键节点是指:在最短路径上关键度最高的前k个节点,其中:k值由查询 者指定。 技术效果
[0024] 与现有技术相比,本发明通过在预处理阶段进行关键度排序和层次Hub标签构 造,得到了具有覆盖属性的层次标签,能够高效地返回关键节点;而在优化的纯标签算法 里,在关键节点查询的过程中不需要再进行辅助查询,可直接进行路径拆分,减少了查询耗 时,提高了查询效率。
【附图说明】
[0025] 图1为本发明示意图;
[0026] 图2为实施例关键节点查询不意图;
[0027] 图3为简单路网;
[0028] 图4为图3所示简单路网的预处理和关键节点查询示意图;
[0029]图中:Queue是一个优先级队列,能够保存当前的候选的关键节点,并输出队列中 关键度最高的节点。
[0030] 图5为k= 20时基本关键节点查询和纯标签关键节点查询效率图;
[0031] 图6为路网Rome99基本关键节点查询和纯标签关键节点查询效率图;
[0032] 图7为路网BAYsl5164基本关键节点查询和纯标签关键节点查询效率图;
[0033] 图8为路网Fs52781基本关键节点查询和纯标签关键节点查询效率图;
[0034] 图9为路网NWslll729基本关键节点查询和纯标签关键节点查询效率图;
[0035] 图10为路网NewYork基本关键节点查询和纯标签关键节点查询效率图;
[0036] 图11为路网BAY基本关键节点查询和纯标签关键节点查询效率图。
【具体实施方式】
[0037] 下面对本发明的实施例作详细说明,本实施例在以本发明技术方案为前提下进行 实施,给出了详细的实施方式和具体的操作过程,但本发明的保护范围不限于下述的实施 例。 实施例1
[0038] 如图1所示,基本的最短路径关键节点查询算法的实施例包括以下步骤:
[0039] 步骤1、定义关键度,对图中的节点v按照关键度r(v)进行采样排序。
[0040] 所述的关键度采用覆盖能力进行定义。
[0041] 所述的排序采用OpenMP多线程处理。
[0042] 步骤2、基于集中式平台对节点v按关键度r(v)从高到低进行预处理,构造标签。
[0043] 所述的标签通过剪枝标签构造得到,具体包括:
[0044] 步骤2. 1)设当前处理的节点为u,以u为根节点进行剪枝Dijkstra搜索,对搜索 到的每一个节点w,保留一个u-w最短路径上关键度最高的节点x,x有可能是端节点。
[0045] 步骤2. 2)对所述的节点对(u,w)进行HL算法查询,HL算法查询HLquery(u,w) 能够返回由当前不完整标签得到的节点对(u,w)之间的最短距离d(u,w),并将它与(u,w) 的真正最短距离dist(u,w)相较,如果HLquery(u,w) =d(u,w)彡dist(u,w),则将以u为 根节点的最短路径树中的以w为根节点的子树剪枝,得到剪枝的最短路径树SPT'(u)。
[0046] 步骤2. 3)对最短路径树SPT'(u)中的节点添加标签。
[0047] 所述的添加标签是指:将u添加进SPT'(u)中每个节点的标签中,以保证图中每 个节点对(u,W)都被节点U覆盖。
[0048] 步骤3、对完成标签构造的图中的节点进行关键节点查询。
[0049] 所述的关键节点查询定义为:给定一个四元组(G,s, t,k),G为图,s为起节点,t 为终节点,k为指定的返回关键节点个数,查询结果将返回一个k元关键节点组kTop= ((VptKs^),(v2,d(s,v2)),…,(>15,(1(8,¥15))),并由这些节点构成压缩路径1^1:11 = s->vy->vik*" ->t,Vi~Vk为最短路径SP(s, t)上前k个关键节点,il~ik是按照实 际最短路径位置对这些关键节点进行排序的序号。定义一条路径P上的所有节点集合为 V(P),P上的节点数量为|V⑵|。将kPath上节点组成的集合称为V(kPath),这些节点数 则为IV(kPath)|。如果路径 |V(kPath) | <k,那么说明kPath (s, t)=SP (s, t)。
[0050] 如图2所示,所述的关键节点查询具体包括:
[0051] 步骤3. 1)输入查询节点对(s,t),调取s和t的标签,得到关键节点
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1