我有一些有向无环图。我想找出O(1)
中的两个顶点之间是否存在路径。
我想,我需要存储信息,两个节点之间存在多少路径。但我没有提出完整的算法。
假设F(i,j)
是从i
到j
顶点的路径数。最初(我假设图是空的,如果不是这样,可以使用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)
时间。存在从A
到b
的路径当且仅当F(A,b)!=0
。
但是,这种解决方案有一个问题:路径的数量可能非常大(大于标准整数类型所能容纳的数量),并且使用任意精度的算术会增加时间复杂性。为了避免这个问题,您可以计算一些大素数的模路径数(但是小到适合标准整数类型)p
。这种解决方案可能会产生不正确的结果(路径数可以是0
模P
,即使它实际上是非零),但是失败的概率很低。为了进一步减少它,可以计算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的最短路径?