CN102722546B - 关系数据库环境下图中最短路径的查询方法 - Google Patents
关系数据库环境下图中最短路径的查询方法 Download PDFInfo
- Publication number
- CN102722546B CN102722546B CN201210167376.2A CN201210167376A CN102722546B CN 102722546 B CN102722546 B CN 102722546B CN 201210167376 A CN201210167376 A CN 201210167376A CN 102722546 B CN102722546 B CN 102722546B
- Authority
- CN
- China
- Prior art keywords
- node
- expanded
- expansion
- expand
- sublist
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Expired - Fee Related
Links
Landscapes
- Management, Administration, Business Operations System, And Electronic Commerce (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明提供一种在关系数据库环境下图中最短路径的查询方法,其步骤包括:将图存储于关系数据库中,按照该图中边的权重将该图对应的表划分成若干子表;根据查询请求中的源结点与目标结点建立已访问结点表,并初始化需要拓展的子表;采用宽度优先搜索方法对各个结点在选定的子表上进行迭代拓展;迭代拓展终止后,继续在原图的所有边上进行一次补充拓展,得到最短路径。本发明将一个大图划分成多个子图,分别存储在不同的数据库表中,使得查询拓展可以在较小的表上进行,能够获得更好的规模性和查询效率。
Description
技术领域
本发明属于信息技术领域,涉及图中最短路径的查询方法,具体涉及一种在关系数据库环境下基于表划分的存储方式高效地查询图中最短路径的方法,可提高大图上数据的查询效率。
背景技术
随着图数据规模的增长以及图上面各种应用需求的增加,传统的最短路径的计算及查询方法已经不能有效地对大图数据进行管理和查询了。而且随着图的规模越来越大,已经不能假定整个图都能完全放在内存之中了,这样很多传统的基于内存的图算法都需要重新进行调整,每次只能加载一部分需要的数据进行计算,而不是一次加载整个图,这样的话磁盘IO代价会成为查询执行的关键。同时在内存不足的情况下提供灵活的结点和边访问方式也需要很大的代价,用户可能需要自己根据不同的应用来设计有效的Buffer机制。
目前已经存在利用关系数据库来对大图进行管理的方法,该方法利用成熟的关系数据库提供的稳定的数据存储、灵活的数据访问方式、高效的数据访问缓冲区等功能来实现大图上的最短路径查询,使得用户不需要自己单独实现Buffer机制,就可以有效地执行大图上的最短路径查询。不过,该方法对大图的查询都是在单个数据库表上实现的,这样随着需要管理的图进一步增大,该方法的规模性和查询效率都会大大下降,不利于对超大规模图的管理。
发明内容
本发明目的在于提出一种在关系数据库环境下基于表划分的图中最短路径的查询方法,将一个大图划分成多个子图,分别存储在不同的数据库表中,使得查询拓展可以在较小的表上进行,能够获得更好的规模性和查询效率。
为达到上述目的,本发明采用如下技术方案:
一种关系数据库环境下图中最短路径的查询方法,其步骤包括:
1)将图存储于关系数据库中,按照该图中边的权重将该图对应的表划分成若干子表;
2)根据查询请求中的源结点与目标结点建立已访问结点表,并为源结点和目标结点初始化需要拓展的子表;
3)采用宽度优先搜索方法对图中各个结点在选定的子表上进行迭代拓展;
4)所述迭代拓展终止后,继续在原图的所有边上进行一次补充拓展,得到最短路径。
进一步地,步骤1)所述图为有向带权图或无向带权图;在划分子表时,使各子表包含权重落在一定范围内的边。
进一步地,步骤3)所述迭代拓展为双向拓展或单向拓展。进行双向拓展时,所述已访问结点表中的每个结点u包含如下属性:
nid,表示结点u的标识符id;
d2s,表示结点u距离源结点s当前的最短距离;
p2s,表示结点u到源结点s当前最短路径上的前一个结点;
fwd,用来引导结点u进行向前拓展时应选择的子表;初始化源结点的fwd为1,在第i次拓展之后,所有新拓展的结点的fwd设置为i+1;
d2t,表示结点u距离目标结点t当前的最短距离;
p2t,表示结点u到目标结点t当前最短路径上的下一个结点;以及
bwd,用来引导结点u进行向后拓展时应选择的子表;初始化源结点的bwd为1,在第i次拓展之后,所有新拓展的结点的bwd设置为i+1。
进一步地,步骤3)采用受限的宽度优先搜索方法,优先拓展权重较小的边。
进一步地,步骤3)所述迭代拓展包含三种操作:
F操作:该操作从已访问结点中选出边界结点进行拓展,如果一个结点未在所有子表上完成拓展,则选其为边界结点;对于正向拓展,若当前是第i次拓展,则边界结点的fwd满足i-fwd+1小于等于子表的数目;对于反向拓展,若当前是第j次拓展,则边界结点的bwd满足j-bwd+1小于等于子表的数目;
E操作:该操作拓展选出来的边界结点,得到新拓展的结点,每次拓展只为边界结点选择一个子表进行拓展;对于正向拓展,若当前是第i次拓展,则为边界结点选择的拓展子表为第i-fwd+1个子表;对于反向拓展,若当前是第j次拓展,则为边界结点选择的拓展子表为第j-bwd+1个子表;
M操作:该操作合并新拓展出的结点与之前已访问的结点。
进一步地,步骤4)所述补充拓展是使用原图的整个边表或所有子表的并集进行拓展。
本发明的优点和积极效果如下:
1)本发明设计了一种基于权重的表划分存储模式,保证拓展在每一个划分后的子表上进行,这样可以降低每次拓展的执行时间;同时,更小的表也可以使得关系数据库的缓冲区策略更有效。因此本发明可以获得更好的规模性和查询效率。
2)本发明采用双向的宽度优先搜索(breadth-first-search,简称BFS)方法来对结点进行拓展,每次选择所有未完成的结点作为边界结点进行拓展,可以更好的利用关系数据库一次一集合的执行特性。
3)本发明采用受限的拓展方法,优先拓展那些权重较小的边,将权重较大的边推迟到后面进行拓展,这样可以更快的发现最短路径,减小BFS可能带来的很大搜索空间。由于本发明是按照边的权重对表进行划分,因此权重较小的边被分在一个子表中,非常适合受限的拓展方法。
附图说明
图1是关系数据库中图的关系表示及存储结构示意图。
图2是现有技术中基于关系数据库的最短路径查询方法的模块流程图。
图3是图2中拓展模块的迭代计算框架示意图。
图4是图1中结点s到t的最短路径的三种操作迭代示例图。
图5是本发明的基于关系数据库的最短路径查询方法的模块流程图
图6是本发明方法中表划分的示例图。
图7是本发明方法中修改后的E操作示意图。
图8是本发明方法中终止条件的示例图。
具体实施方式
下文通过具体实施例,并配合附图,对本发明方法的原理及各步骤做详细的说明。
本实施例是在关系数据库上进行的,针对已有方法的规模性和查询效率不足的问题进行优化。下面首先说明现有技术中的基于关系数据库的最短路径查询方法,然后详细介绍本发明的改进之处及实施过程。
在现有的基于关系数据库的最短路径查询方法(J.Gao,R.Jin,J.Zhou,J.Xu,X.Jiang,andT.Wang.Relational approach for shortest path discovery over large graphs.PVLDB,5(4):358-369,2012.)中,Graph主要是按照如图1所示的方式存储在关系数据库中。图1(a)表示一个有向带权图,图中的结点都有唯一的id标识符,结点之间的边都带有非负的权重。将图存储在关系数据库中的方法如图1(b)所示,结点和边分别存储在表TNodes和TEdges中,表TNodes存储每个结点的id标识符nid,表TEdges存储每一条边,fid、tid、cost分别表示边的始点、终点、权重。
图2为查询最短路径的模块流程图。如该图所示,用户输入查询(s,t),经过初始化模块、拓展模块和终止模块的计算,最终由输出模块输出s到t之间的最短路径。具体来说,对于查询(s,t),该方法采用的是一种与Dijkstra算法(E.W.Dijkstra.A note on two problems inconnexion with graphs.Numerische Mathematik,pages 269–271,1959.)类似的迭代拓展执行方式来发现最短路径,首先是初始化,接着对结点进行拓展,拓展主要通过SQL语言来实现,然后判断拓展是否可以终止,如果不行,则继续拓展;否则,说明最短路径已经找到了,此时通过输出模块将最短路径输出即可。下面分别介绍上述四个模块的具体实现过程:
a)初始化模块:
该模块主要负责一些初始化的工作,首先在数据库中建立一个已访问结点表(Visited)来保存已经访问过的结点,表中的每个结点带有4个属性,nid表示结点标识符id,d2s表示结点距离源结点s当前的最短距离,p2s表示结点到s当前最短路径上的前一个结点,f则表示该结点是否已经拓展完成(Finalized),1表示已完成,0表示未完成,然后将源结点s加入Visited中。s.f=0表示s还没有进行拓展。
b)拓展模块
该模块主要负责对结点进行拓展,拓展的过程是一个迭代的过程,迭代框架如图3所示,以第k次迭代为例,已访问的结点用Ak来表示,Ak记录前k次迭代所访问的所有结点;从Ak中选出(Select)满足特定条件的结点作为边界结点,用Fk来表示;对Fk进行拓展(Expand)得到拓展后的结点,用Ek表示;最后将Ek与Ak进行合并(Merge),得到下一次拓展的Ak+1。
下面以Dijkstra算法计算最短路径为例,介绍使用该框架进行拓展的具体步骤:
在初始化模块中,已经将s加入到已访问结点A1中(A就是Visited表),接着每次迭代时从Ak中选择具有最小v.d2s同时v.f=0的结点v作为边界结点Fk,然后根据v的出边(存储在边表TEdges中)进行拓展,得到拓展的结点Ek,完成v(设置v.f=1),最后将Ak与Ek进行合并得到Ak+1,继续进行下一次拓展。
根据上述框架,已有方法可以定义如下三种操作:
①F-操作:从已访问结点中选出边界结点;
②E-操作:拓展选出来的边界结点,得到新拓展的结点;
③M-操作:合并新拓展出的结点与之前已经访问过的结点;
上述三种操作都是通过SQL语句的执行来实现的,同时其实现采用了最新的SQL特性,包括窗口函数和合并语句。这些特性与上述操作符合的非常好,可以达到很好的效率。
图4给出了利用上述三种操作计算图1(a)中所示Graph上结点s到t的最短路径的第二次迭代过程。第一次迭代(图4中未示出)将s加入到A1中,选择s作为边界结点进行拓展,d、c、b被拓展,合并到A2,然后选择结点c进行拓展得到d和e,进行合并d的距离被更新,e被加入到A3中,接着继续拓展。
c)终止模块
该模块主要负责判断迭代的终止条件。上述拓展模块是一个迭代的过程,需要判断迭代何时可以终止,对于传统的Dijkstra算法,当目标结点t已经拓展完成即可终止拓展过程,此时可以保证发现的路径是正确的最短路径;对于双向Dijkstra算法,该方法还需要在迭代的过程中维护3个额外的信息,正向拓展完成的距离fwd、反向拓展完成的距离bwd以及当前已经发现的最短距离minCost,每一次迭代都需要更新这三个信息,当fwd+bwd≥minCost时,可以终止迭代。具体地,对于双向拓展来说,需要在Visited表中增加反向拓展需要的额外信息d2t、p2t、b,含义与正向拓展类似。每次迭代之后,fwd为当前Visited表中所有新拓展结点具有的最小d2s。比如图4中第一次拓展后,fwd为1。
d)输出模块
该模块主要负责输出正确的最短路径,迭代终止后,可以很容易地根据Visited表中记录的p2s和p2t来恢复出最短路径,以传统的Dijkstra算法为例,可以根据结点t的p2s属性得到前一个结点,然后一直往前找,直到到达源结点s即可。
为了提高最短路径计算和查询的效率,上述方法提出了两个优化目标:一是减小算法的搜索空间;二是采用更加符合关系数据库一次处理一个集合的执行方式。针对这两个目标,上述方法提出了双向集合Dijkstra算法,其采用双向拓展,同时从s和t进行拓展,可以减少Dijkstra算法搜索的空间;同时采用一次拓展一个集合的方式执行,具体是指在传统的Dijkstra算法中,每次拓展只选择一个具有最小d2s的结点进行拓展,然而可能同时存在多个结点的d2s都是最小的,在关系数据库环境下,可以将所有具有最小d2s的结点一次拓展,这样一次可以拓展一个集合,提高执行效率。
但上述方法存在规模性不强的问题,随着图的大小变大,每次迭代操作都需要在很大的数据库表上执行复杂的SQL语句,这样在图的大小上升至一定程度后,数据库的缓冲区(Buffer)效果会变得很差,导致磁盘IO增多,查询会变得很慢。因此,上述方法对大图的管理尽管有一定的作用,但是还是有很大的局限性的,对于超大规模的图效果很差。
针对上述方法规模性不好的问题,本发明在关系数据库环境下提出了一种基于表划分的大图最短路径的查询方法。该方法的基本思路就是将一个大图对应的表,按照边的权重划分成若干个较小的子表,每次拓展在小的子表上进行,可以减小代价。该方法仍然采取迭代的方式计算最短路径,采用的模块流程图如图5所示,与图2所示的已有方法的模块流程图相比,不同之处主要有如下五点:
1)图的存储方式与原来不同
本发明中,拓展不是在整个TEdges表上进行,而是在一系列经过划分后的子表TE上进行。具体地,本发明根据边的权重,将整个边表TEdges划分成若干个子表,每个子表只包含TEdges中的部分边,即各子表包含权重落在一定范围内的边,这样拓展将在较小的子表上进行,可以获得比较好的效率。
为了描述的方便,使用Wmax来表示有向带权图G中边的最大权重,pts表示将要划分成pts个子表,pts由用户自己设置。原图对应的结点表记为TN,边表记为TE,划分后的pts个子表分别记录为TE1,TE2,……,TEpts,Wunit表示划分的权重单位,划分按照如下方法进行:对于TE中的每条边e,e被划分到子表TEi中,其中W(e)表示边e的权重。除有向带权图外,本发明也适用于无向带权图。
图6展示了表划分的方式,图6(a)表示原图G,图6(b)所示为G在关系数据流中的存储方式,TN表示存储结点的表,TE表示存储边的表,图6(c)表示按照边的权重对原图进行划分后的子表,这里设定pts=4,即划分成4个子表。由于权重范围为0到39,因此权重单位Wunit-10。子图TE1包含权重为[0,10)的边,TE2包含权重为[10,20)的边,依此类推。如果没有特殊说明,后续示例中Wunit均设置为10。在其它实施例中,根据不同的权重范围可以将Wunit设为不同的值;也可以在不同的子表中设置不同的权重单位。
2)初始化模块与已有方法不同
对TEdges进行划分后,拓展将在较小的子表上进行,为了正确的引导拓展,需要对已有方法在初始化时新建的Visited表的结构进行修改。
在已有方法的初始化模块中,每个结点u关联的额外信息有u.d2s、u.p2s、u.f,如果使用双向拓展的话,还需要为结点u添加反向拓展的相关信息u.d2t、u.p2t、u.b,分别对应表示结点u当前距离目标结点t的最短距离、结点u当前到t最短路径上下一个结点id、结点u反向拓展是否完成。由于反向拓展的原理与正向拓展基本上完全一样,因此,下面只描述正向拓展部分。
在基于表划分的拓展算法中,需要修改结点关联的额外辅助信息,上面描述的u.f用来表示结点u是否完成拓展,是一个二值属性,在分表的拓展中不足以引导结点的拓展,本发明使用另外的属性u.fwd来替代u.f,fwd用来引导结点进行拓展时应该选择哪个子表来进行拓展。初始化源结点s的s.fwd为1。在第i次拓展之后,所有新拓展的结点的fwd设置为i+1。对应的bwd同理。
3)拓展模块与已有方法不同
对TEdges进行划分后,拓展将在较小的子表上进行,这样每个结点可能无法一次拓展其关联的所有边,如何保证所有的边都被拓展成为本专利重点需要解决的问题。本发明设计了一种新的迭代拓展机制,可以保证每个结点都能拓展自己需要拓展的所有边。
本发明采用了宽度优先搜索算法(breadth-first-search,简称BFS,请参考文献:Edward F.Moore.The shortest path through a maze.In Proceeding of the International Symposium on theTheory of Switching,pages 285-292.Harvard University Press,1959.),每次拓展尽可能多的结点(一次一集合的执行方式),可以双向拓展,也可以单向拓展。进一步地,为了避免BFS带来的巨大的搜索空间,可以采用受限的宽度优先搜索算法,每次拓展的时候优先选择那些权重较小的边进行拓展,将权重较大边的拓展推迟到后面进行,这样可以更快地发现最短路径,节省搜索时间,获得较高的效率。下面重点对双向的、受限的BFS拓展方法进行说明。
基于权重的表划分方法能够非常好的支持双向受限BFS算法,比如需要拓展某个结点u,要求拓展的边的权重范围给定,这样就可以根据给定的范围选择合适的子表TEi进行拓展,而不是像之前已有的方法,只能使用完整的表TE进行拓展。由于TE比较大,因此已有的方法效率和规模性都比较差。
新的双向受限BFS拓展(以下简称受限BFS拓展或受限BFS算法)仍然可以分为F、E和M三种操作,不过新的机制下,需要对这三种操作进行修改。
首先描述受限BFS算法的E操作,已有方法的E操作直接在整个大表TE上拓展选择的边界结点,在表划分的情况下,现在有pts个子表需要拓展,如何选择每个结点需要拓展的子表呢?上面已为每个已访问结点引入了fwd的属性,此时可以根据该属性来确定结点u需要拓展的子表。假设结点u是在第i次迭代中被拓展到的(加入到已访问结点Ai+1),那么u.fwd初始化为i+1,由于u刚被加入到Ai+1中,还没有完成拓展。根据受限BFS的拓展思路,所有未完成拓展的结点都会被选择为边界结点,下一次会被拓展,这样u在第i+1次迭代中会被拓展,为u在第i+1次迭代拓展中选择的子表为TE1,也就是拓展边权重最小的那些边。第i+1次拓展之后,u依然没有完成拓展(没有在所有子表上进行拓展),接下来的第i+2次拓展仍然会拓展u,此时为u选择的拓展子表为TE2。如果算法没有终止,u还需要继续拓展,每次选择权重比上次大一个单位的子表进行就可以了。不难发现,受限BFS拓展是按照边权重由小到大的方式来拓展每个结点关联的所有边。
解决了拓展方式的问题后,再来看看边界结点的选择问题,到底如何判断一个结点是否已经完成拓展呢?这一点还是可以通过fwd来进行选择,每个结点的fwd值定义为其被拓展的迭代时刻,即是在第几次迭代被拓展的。由于采取的是BFS的拓展方式,有的结点可能会被反复拓展到,这样结点u每次被拓展到的时候都需要重新更新u.fwd为当前拓展次数。按照上面的拓展方式,第i次迭代被拓展到的结点u,设置u.fwd=i+1,在第i+1次迭代中拓展TE1,第i+2次迭代中拓展TE2,第i+3次迭代中拓展TE3,以此类推,如果不考虑重复拓展到u的情况(实际上重复拓展后的u可以当成一个新的结点处理,不影响边界结点的选择),那么第i+pts次迭代中就会拓展TEpts,这样结点u就完成了拓展,下一步就不需要再进行拓展了,也就是说再不用被选择到边界结点中。
从这个过程中也可以看出,实际上每次迭代的拓展对于不同的结点,会根据其fwd选择不同的子表来进行拓展,不过这些结点要求在一定的窗口范围内,窗口的大小为pts,不在此窗口范围内的结点就是已经完成拓展了的结点。更具体地,在第i次迭代的时候,只需要考虑fwd落在范围[l pts l 1,l]的结点,fwd小于此范围的结点都是很早就被拓展加入的结点,它们已经完成了对全部子表的拓展。考虑到拓展刚开始的边界情况(l pts l 1可能为负数),用l表示1和l pts l 1中较大的那个值,这样拓展的fwd的范围记为[l,1],满足l≤fwd≤l的结点才会被选择为边界结点进行拓展,这些结点选择拓展的子表由其fwd确定,结点u选择拓展的子表为TE1-fwd+1。
图7给出了修改后的E操作的一个示例,其中,图7(a)为原图以及结点拓展的层次示意,每个虚线表示一次拓展的范围,图7(b)为每次拓展的具体情况,包含拓展的结点以及对应拓展的边表。假设Wunit-10,b为源节点,首先被加入A1,初始化b.fwd=1,第1次迭代b在TE1上进行拓展,加入结点c,c.fwd设置为2;第2次迭代需要同时拓展结点b和c,根据fwd值的不同,b将在TE2上拓展,而c则在TE1上进行拓展,加入结点s和g,继续后续的拓展,直到算法终止。
解决了F和E操作的问题,再来看看M操作,M操作与之前的M操作区别不大,就是将新拓展得到的Ei与已经拓展的结点集Ai进行合并,对于Ai中没有出现的结点,直接加入就可以了;否则,如果新拓展的结点的d2s更小,则更新Ai中的对应结点。
4)终止模块与已有方法不同
新的拓展机制下,正向拓展完成的距离fwd以及反向拓展完成的距离bwd的计算方法不能使用原有的方法,需要进行修改。
新的终止模块重新定义正向拓展完成的距离fwd以及反向拓展完成的距离bwd,并提供新的计算方法。
首先回顾下双向Dijkstra算法的终止条件,假设当前进行了i次正向拓展和j次反向拓展,用表示第i次正向拓展的新结点中最小的d2s,表示第j次反向拓展的新结点中最小的d2t,minCost表示每次拓展完成后当前发现的最短距离,则当时,就可以终止双向Dijkstra算法,此时发现的minCost就是准确的最短距离。
然而,对于双向受限的BFS算法来说,每次拓展的结点并没有拓展所有的边,而是优先拓展了权重较小的边,延迟拓展那些权重较大的边,这样需要修改以及的含义:
对于在第一次拓展完成后,应该等于新拓展的结点中具有的最小d2s,后续的每次正向拓展,采用迭代计算的方法,等于其中Wunlt表示划分的权重单位,min(d2s)表示第i次正向拓展的结点中最小的d2s。对于在第一次拓展完成后,等于新拓展的结点中具有的最小d2t,后续的每次反向拓展,采用迭代计算的方法,等于其中Wunit表示划分的权重单位,min(d2t)表示第j次反向拓展的结点中最小的d2t。以minCost表示每次拓展完成后当前发现的最短距离,则当时,终止拓展。
可以用如图8所示的例子来说明以及的计算方法,示例中前两次正向拓展后得到的和分别为6和14,前两次反向拓展后得到的和分别为2和12,此时已经发现了一条源结点s到目的结点t的路径,即s-d-e-h-t,其距离为26。注意边(s,t)此时并没有被拓展,而是被推迟了。此时满足可以终止迭代过程(但不能保证此时的结果完全正确)。
5)增加了一个新的验证模块
新的拓展机制下,经过上述修改后的终止模块终止迭代后,并不能保证最终得到的路径是最短的,本专利通过增加一个额外的验证模块,可以解决迭代结束后结果不完全的问题,从而保证算法的正确性。
通过图8的例子可以清楚的看到,迭代终止后得到的最短路径s-d-e-h-t并不是正确的最短路径,正确的路径为s-t。
为了解决上述终止条件无法得到正确最短路径的问题,本专利额外增加了一次补充拓展来保证得到的最短路径是正确的。具体的做法如下:当满足时,继续进行一次拓展,该拓展是在所有的边上进行的,此时可以使用TE表进行拓展,也可以使用所有子表的并集来进行拓展。可以证明,经过一次普通拓展后得到的最短路径就是正确的最短路径。
仍然以图8的例子为例,迭代终止得到的路径为s-d-e-h-t,额外再进行一次拓展将会拓展s到t的边,得到路径s-t,即为正确的最短路径。
上述实施例仅是为了便于说明而举例,本发明的保护范围应以权利要求书所述为准,而非仅限于上述实施例。
Claims (5)
1.一种关系数据库环境下图中最短路径的查询方法,其步骤包括:
1)将图存储于关系数据库中,按照该图中边的权重将该图对应的表划分成若干子表;
2)根据查询请求中的源结点与目标结点建立已访问结点表,并为源结点和目标结点初始化需要拓展的子表;
3)采用宽度优先搜索方法对图中各个结点在选定的子表上进行迭代拓展;所述迭代拓展为双向拓展,进行双向拓展时,所述已访问结点表中的每个结点u包含如下属性:
nid,表示结点u的标识符id;
d2s,表示结点u距离源结点s当前的最短距离;
p2s,表示结点u到源结点s当前最短路径上的前一个结点;
fwd,用来引导结点u进行向前拓展时应选择的子表;初始化源结点的fwd为1,在第i次拓展之后,所有新拓展的结点的fwd设置为i+1;
d2t,表示结点u距离目标结点t当前的最短距离;
p2t,表示结点u到目标结点t当前最短路径上的下一个结点;以及
bwd,用来引导结点u进行向后拓展时应选择的子表;初始化源结点的bwd为1,在第i次拓展之后,所有新拓展的结点的bwd设置为i+1;
所述迭代拓展包含三种操作:
F操作:该操作从已访问结点中选出边界结点进行拓展,如果一个结点未在所有子表上完成拓展,则选其为边界结点;对于正向拓展,若当前是第i次拓展,则边界结点的fwd满足i-fwd+1小于等于子表的数目;对于反向拓展,若当前是第j次拓展,则边界结点的bwd满足j-bwd+1小于等于子表的数目;
E操作:该操作拓展选出来的边界结点,得到新拓展的结点,每次拓展只为边界结点选择一个子表进行拓展;对于正向拓展,若当前是第i次拓展,则为边界结点选择的拓展子表为第i-fwd+1个子表;对于反向拓展,若当前是第j次拓展,则为边界结点选择的拓展子表为第j-bwd+1个子表;
M操作:该操作合并新拓展出的结点与之前已访问的结点;
判断所述迭代拓展终止的方法为:
在第一次拓展完成后,以表示新拓展的结点中具有的最小d2s;对于后续的每次正向拓展,采用迭代计算的方法,等于其中Wunit表示划分的权重单位,min(d2s)表示第i次正向拓展的结点中最小的d2s;
在第一次拓展完成后,以表示新拓展的结点中具有的最小d2t;对于后续的每次反向拓展,采用迭代计算的方法,等于其中Wunit表示划分的权重单位,min(d2t)表示第j次反向拓展的结点中最小的d2t;
以minCost表示每次拓展完成后当前发现的最短距离,则当时,终止拓展;
4)所述迭代拓展终止后,继续在原图的所有边上进行一次补充拓展,得到最短路径。
2.如权利要求1所述的方法,其特征在于,步骤1)所述图为有向带权图或者无向带权图。
3.如权利要求1所述的方法,其特征在于,采用受限的宽度优先搜索方法,优先拓展权重较小的边。
4.如权利要求1所述的方法,其特征在于,所述补充拓展是使用原图的整个边表或所有子表的并集进行拓展。
5.如权利要求4所述的方法,其特征在于,根据所述已访问结点表中记录的p2s和p2t输出所述最短路径。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201210167376.2A CN102722546B (zh) | 2012-05-25 | 2012-05-25 | 关系数据库环境下图中最短路径的查询方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201210167376.2A CN102722546B (zh) | 2012-05-25 | 2012-05-25 | 关系数据库环境下图中最短路径的查询方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN102722546A CN102722546A (zh) | 2012-10-10 |
CN102722546B true CN102722546B (zh) | 2015-07-29 |
Family
ID=46948307
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201210167376.2A Expired - Fee Related CN102722546B (zh) | 2012-05-25 | 2012-05-25 | 关系数据库环境下图中最短路径的查询方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN102722546B (zh) |
Families Citing this family (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN105589872B (zh) * | 2014-10-23 | 2019-01-22 | 阿里巴巴集团控股有限公司 | 图搜索结果获取方法及装置 |
CN106294686B (zh) * | 2016-08-05 | 2021-04-02 | 董涛 | 一种应用于计算机技术领域思维导图中快速更新树结点位置坐标的方法 |
US10528563B2 (en) * | 2016-12-16 | 2020-01-07 | Futurewei Technologies, Inc. | Predictive table pre-joins in large scale data management system using graph community detection |
Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102214214A (zh) * | 2011-06-02 | 2011-10-12 | 广州市动景计算机科技有限公司 | 数据关系的处理方法、装置及移动通讯终端 |
CN102375828A (zh) * | 2010-08-16 | 2012-03-14 | 北京国科恒通电气自动化科技有限公司 | 一种电网拓扑在关系数据库中的物理存储和优化方法 |
-
2012
- 2012-05-25 CN CN201210167376.2A patent/CN102722546B/zh not_active Expired - Fee Related
Patent Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102375828A (zh) * | 2010-08-16 | 2012-03-14 | 北京国科恒通电气自动化科技有限公司 | 一种电网拓扑在关系数据库中的物理存储和优化方法 |
CN102214214A (zh) * | 2011-06-02 | 2011-10-12 | 广州市动景计算机科技有限公司 | 数据关系的处理方法、装置及移动通讯终端 |
Also Published As
Publication number | Publication date |
---|---|
CN102722546A (zh) | 2012-10-10 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN102930062B (zh) | 一种数据库快速水平扩展的方法 | |
US9189506B2 (en) | Database index management | |
Gao et al. | Relational approach for shortest path discovery over large graphs | |
CN104361113B (zh) | 一种内存‑闪存混合存储模式下的olap查询优化方法 | |
CN106446134B (zh) | 基于谓词规约和代价估算的局部多查询优化方法 | |
CN102737114B (zh) | 基于MapReduce的大图上距离连接查询方法 | |
CN104885078A (zh) | 用于大规模并行处理数据库集群中的两阶段查询优化的方法 | |
CN106919769A (zh) | 一种基于多层次方法和赋权超图的层次式fpga布局布线方法 | |
CN102163218A (zh) | 基于图索引的图数据库关键词邻近搜索方法 | |
CN104731925A (zh) | 基于MapReduce的FP-Growth的负载均衡并行计算方法 | |
CN110909111A (zh) | 基于知识图谱rdf数据特征的分布式存储与索引方法 | |
CN103793467A (zh) | 一种基于超图和动态规划的大数据实时查询优化方法 | |
CN103678589A (zh) | 一种基于等价类的数据库内核查询优化方法 | |
CN102722546B (zh) | 关系数据库环境下图中最短路径的查询方法 | |
CN104731969A (zh) | 分布式环境下海量数据连接聚集查询方法、装置和系统 | |
CN107102995A (zh) | 一种sql执行计划的确定方法及装置 | |
CN110162716B (zh) | 一种基于社区检索的影响力社区搜索方法和系统 | |
CN103345536B (zh) | 一种语义关联索引方法 | |
Cheng et al. | ETKDS: An efficient algorithm of Top-K high utility itemsets mining over data streams under sliding window model | |
CN110750560A (zh) | 一种优化网络多连接的系统和方法 | |
CN107341193B (zh) | 路网中移动对象查询方法 | |
CN106780747B (zh) | 一种快速分割cfd计算网格的方法 | |
CN109165718A (zh) | 基于并行蚁群算法的网络重构方法和系统 | |
CN112148830A (zh) | 一种基于最大区域网格的语义数据存储与检索的方法及装置 | |
CN103631839A (zh) | 一种页面地域权重模型实现方法 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C14 | Grant of patent or utility model | ||
GR01 | Patent grant | ||
CF01 | Termination of patent right due to non-payment of annual fee | ||
CF01 | Termination of patent right due to non-payment of annual fee |
Granted publication date: 20150729 Termination date: 20180525 |