如何解决用路径而不是边上的感应计算感应子图
考虑一个简单的有向图G =(V,E)。一个简单的有向图既不包含自环也不包含多个边。让我们进一步假设G由单个(弱连接的)组件组成。
给定V的子集V',我想创建另一个简单的有向图G'=(V',E'),以便当且仅当存在路径时,G'才具有边(u,v) G中从u到v的任何路径(不一定是最短路径)(在V'中不包含任何其他顶点)。显然,G'并不是G的一个子图,但是问题似乎很相似。它是否有标准解决方案,还是我必须自己推出?
一个具体的例子可以使我更加清楚:给定一个仅由专用网关,并行网关,任务以及它们之间的顺序流组成的BPMN图,我想将此图简化为原始控制流。也就是说,我想执行所有任务,以便我的V'仅由网关组成。然后,我想连接任何两个在原始图中仅在其中通过任务而不通过其他网关的路径之间的网关。这样的路径(如果存在)可能不是原始图中两个网关之间的唯一路径,也不是最短路径。如果存在多个这样的路径(通常就是这种情况,因为打开网关的每个分支通常会通过多个任务将其引导到同一个关闭网关),那么我当然希望我的简化图在这些网关之间仅包含一个边缘。
解决方法
我会这样做:
- 进行
(V - V',E)
中的transitive closure。我们称之为(V - V',Et)
。 - 当且仅当
(u,v)
中存在G'
和(ui,vi)
的中间边缘Et
时,(u,ui)
中的边(vi,v)
边缘在E
中。
步骤1的复杂度为O(|V - V'|**3)
,步骤2的复杂度为O(|V'|**2)
。
我还感觉到Floyd–Warshall algorithm的传递闭包可以修改为一步完成。在dist
(距离或路径存在矩阵)中,它将需要一个额外的数据字段:“从V开始”,“以V结尾”,并且应从中间路径中排除V
。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。