当前位置: 首页 > 知识库问答 >
问题:

有向无环图在常数时间(O(1))中是否存在路径?

杨波娃
2023-03-14

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

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

共有1个答案

姚乐家
2023-03-14

假设F(i,j)是从ij顶点的路径数。最初(我假设图是空的,如果不是这样,可以使用add操作添加所有边)f(I,j)=1,如果I=j,否则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)时间。存在从Ab的路径当且仅当F(A,b)!=0

但是,这种解决方案有一个问题:路径的数量可能非常大(大于标准整数类型所能容纳的数量),并且使用任意精度的算术会增加时间复杂性。为了避免这个问题,您可以计算一些大素数的模路径数(但是小到适合标准整数类型)p。这种解决方案可能会产生不正确的结果(路径数可以是0P,即使它实际上是非零),但是失败的概率很低。为了进一步减少它,可以计算f对几个不同质数的模。

 类似资料:
  • 我需要为一组有向无环图找到从节点 0 开始的最长路径。我正在使用维基百科中的最长路径问题算法。我已经让算法适用于大多数图形,但对于其他图形,它没有给出正确的结果。算法为: 图形实现使用邻接列表来存储图形。如果我传递一个图,例如: 我得到的答案5,这是正确的。但是,如果我通过图表: 然后我得到2,而正确答案应该是3。 我使用的TopSort2算法是: DFS 算法包括:

  • 问题内容: 我正在用Java建模电源子系统。一个简单的SQLite数据库包含一组行可替换单元(LRU)以及它们之间的连接。我正在编写Power Model API,以使用DDD模式和存储库简化数据存储的查询。 我正在寻找合适的Java集合来对查询结果进行建模。LRU连接流中有一些特殊情况需要建模: 最初,有一个具有多个端口(<= 16)的配电单元(PDU),用于向下游LRU供电。 功率流中的典型连

  • 是否有任何标准算法可以在有向无环图中找到所有可能的路径。如果没有,我如何在BFS / Dijkstra /任何其他算法中进行更改以枚举DAG中的所有路径

  • 本文会围绕算法中DFS求有向图或无向图两点间所有路径,先讲解DFS以及有向图或无向图的意思。 有向图在图中的边是有方向的,表现出来就是有个箭头指示方向,节点只能单向通信或传递消息,相当于单行道,无向图边没方向是双向的,边连接的两个节点有通路可以双向通信,类似于双行道。 无向图,边没有方向的图称为无向图。邻接矩阵则是对称的,且只有0和1,因为没有方向的区别后,要么有边,要么没边。 DFS作为搜索算法

  • 给出了一个边上具有任意权的有向无环图和两个特定结点s和t,其中s的内度和t的外度为0。如何确定成本为正的s到t的最短路径?