在无向图中,可以很容易地将图预划分为组件,并用标识组件的数字标记它们。因此,如果两个节点都具有相同的标签,则检查是否可以通过从S的路径到达节点T是正确的。
是否可以在有向图中执行类似的操作?基本上,要预先计算然后做一个简单的查找,是否可以在没有任何DFS的情况下从S到达T?
答案 0 :(得分:2)
除了可及性矩阵及其优化的最幼稚的实现(这是O(n ^ 2)的复杂性。恐怕没有固定的时间查找。
尽管有一些有趣的想法。我将在下面列出其中两个:
1)找到一组覆盖原始图G的树。使得
每个顶点V的索引如下:
For each t_i in T
V is indexed by (t_i, a, b) where a is the smallest postorder of descendants in the tree and b is the postorder of V in the tree.
为了查询到达率(u,v),我们要查找是否存在一对(t_i,a_u,b_u)和(t_i,a_v,b_v)< / em>,这样 u_a <= v_b
R。 Agrawal,A。Borgida和H.V. Jagadish。高效管理 大数据和知识库中的传递关系。在 1989年ACM SIGMOD国际会议论文集 数据管理(SIGMOD 1989),1989。
然后,问题就减少到如何找到覆盖图G的最小树集T。这样做的方法有多种。
2)另一种方法是n-hop(请参阅SODA 02出版物)
伊迪丝·科恩(Edith Cohen),伊兰·哈珀林(Eran Halperin),海姆·卡普兰(Haim Kaplan),乌里·茨维克(Uri Zwick)通过2跳标签查询可到达性和距离
Let G = (V, E) be a directed graph.
For v in V
L(v) = (L_in(v), L_out(v)), such that L_in(v), L_out(v) ⊆ V and there is a path from every x ∈ L_in(v) to v and from v to every x ∈ L_out(v).
然后将问题减少为找到最佳的两跳覆盖
让G =(V,E)为图。对于每个u,v∈V,令P_uv为a u到v的路径集合(对于无向图,我们有P_uv≡ P_vu)。令P = {P_uv}。我们将一跳定义为一对(h,u),其中h是一个 G和u∈V中的路径是h的端点之一。我们称你为 跳的句柄。跃点H的集合被称为2跳覆盖 如果每个u,v∈V使得Puv 6 =φ,则存在一个路径p∈ Puv和两跳(h1,u)∈H和(h2,v)∈H,使得p = h1h2, 即p是h1和h2的串联。封面尺寸是 | H |,H中的跳数。