标签:可达性查询
在一个有向无环图中,可达性查询r(u, v)是指u到v是否有一条路径,当u到v存在一条路径时,r(u, v)返回true,即u到v可达;反之返回false,即不可达。
任意一个有向图均可转化为有向无环图,详细转化方法可参考(http://blog.csdn.net/woniu317/article/details/23658301)。易得处于同一个强连通分量中的节点转换后成为了一个节点,当查询可达性的时候可以先转化为有向无环图中的结点再进行查询即可。因此所有的可达性查询只需要研究有向无环图。
对于任意一个图的任意一种拓扑序列进行分析可得:
若结点u到结点v可达,则必然有u的拓扑序号小于v的拓扑序号;也就是说当结点u的拓扑序号大于v的拓扑序号时,则u一定不可达v。
如图2-1所示,表2-1中T1列为图的一种拓扑序列。例如a到h可达,a的序号小于h的序号;g的序号大于h的序号,因此g不可达h,从图2-1中可验证。值得注意的是,即使u的序号小于v的序号,u也不一定可达v,例如结点a与b。
不难发现利用表2-1中的拓扑顺序会存在很多的不能修剪的结点对,比如(a,b),(a,g),(a,f)。即使换一种拓扑顺序也会出现同样的状况。因此,同时采用两种拓扑顺序进行修剪效果更佳。但如何求得两种拓扑顺序使得剪枝效果最好是NPC问题,因此采用一种近似的方式求得第二个拓扑序列。
图2-1 图G
表2-1 图2-1的拓扑序列
第二次的拓扑序列求解时,对于所有的入度为0的结点,先给第一个拓扑序号大的结点编号,这样就增强了两维拓扑序列的过滤效果。图2-1所求的第二次的拓扑序号如表2-1中T2列所示。
若u到v可达,则必然有u的两个拓扑序号分别对应小于v的拓扑序号。同样你否命题,若u的两个拓扑序号不都小于v的拓扑序号,则u一定不可达v。
可达性查询采用深度优先遍历的方式,查询流程如图3-1所示。
图3-1 可达性查询流程图
参考论文
ReachabilityQueries in Very Large Graphs A Fast Refined Online Search Approach
标签:可达性查询
原文地址:http://blog.csdn.net/woniu317/article/details/39205731