繁体   English   中英

有没有办法确定在恒定时间(O(1))中有向无环图中是否存在路径?

[英]Is there a way to find if path exists in a Directed acyclic graph in constant time (O(1))?

我有一些有向无环图。 我想查找O(1)两个顶点之间是否存在路径。

另外,我想在O(n^2)两个顶点之间添加和删除边。

我认为,我需要存储信息,两个节点之间存在多少条路径。 但是我没有提出完整的算法。

假设f(i, j)是从ij顶点的路径数。 最初(我假设图形为空,如果不是这种情况,则可以使用加法运算来添加所有边) f(i, j) = 1如果i = j ,则f(i, j) = 1 ,否则为0

要将边从a添加到b ,可以使用以下过程:

for i = 1 .. n
    for j = 1 .. n
        new_f(i, j) = f(i, j) + f(i, a) * f(b, j) //add the number of paths that contain a new edge

其中n是顶点数。

删除边可以用类似的方法完成:

for i = 1 .. n
        for j = 1 .. n
            new_f(i, j) = f(i, j) - f(i, a) * f(b, j) //subtract the number of paths that contian this edge

删除/添加边缘显然需要O(n ^ 2)时间。 当且仅当f(a, b) != 0存在从ab路径。

但是,这种解决方案存在一个问题:路径数量可能非常大(大于标准整数类型可以容纳的数量),并且使用任意精度算法会增加时间复杂度。 为避免出现此问题,您可以计算一些模数较大的质数(但足够小以适合标准整数类型) p模数。 该解决方案可能会产生错误的结果(路径数即使实际上不是零,也可以是0p模数),但是失败的可能性很低。 为了减少更多,你可以计算f模几种不同的素数。

关于这一点的好地方是“算法,第四版”。 由Robert Sedgewick和Kevin Wayne撰写。 http://algs4.cs.princeton.edu/home/ 他们还在Coursera.org上提供学习课程“算法”。 它是免费的,那里有资料可以回答您的问题。 看一看。 https://www.coursera.org/course/algs4partI

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM