Graph 图中的禁止路径

Graph 图中的禁止路径,graph,graph-algorithm,Graph,Graph Algorithm,我们提供了一个有向图(数据流图)。我们希望禁止数据到达图的某些节点,这意味着我们将有禁止删除的路径,但必须保持图的连接 我举一个简单的例子来说明问题: 让我们绘制以下图表: A--->B--->C--->D 我想禁止数据到达节点C,因此边缘B-C将被删除。同时,我希望数据到达D。因此,将创建来自B-D的新边 对于上述任务是否有一个有效的算法 谢谢。每个不允许到达的节点X都有i个传入边和j个传出边。在我们讨论数据流图时,X之前的节点仅到达X之后的一个j节点是不够的。您可以插入一个虚拟(Steine

我们提供了一个有向图(数据流图)。我们希望禁止数据到达图的某些节点,这意味着我们将有禁止删除的路径,但必须保持图的连接

我举一个简单的例子来说明问题:

让我们绘制以下图表:

A--->B--->C--->D

我想禁止数据到达节点C,因此边缘B-C将被删除。同时,我希望数据到达D。因此,将创建来自B-D的新边

对于上述任务是否有一个有效的算法


谢谢。

每个不允许到达的节点X都有i个传入边和j个传出边。在我们讨论数据流图时,X之前的节点仅到达X之后的一个j节点是不够的。您可以插入一个虚拟(Steiner)节点X',该节点除了没有被标记为X之外没有任何功能,在这里发送所有i边,并连接j个输出边。否则,您可能必须连接i个传入边之一起源的每个节点,并将其连接到X的传出边引导的所有j节点。(否则数据流将中断。)

修复一对一节点是一个常数时间操作,但是修复一个这样的节点X的所有关系需要O(i*j)时间,即,它在事件边的数量上是二次的

数据从a、b和c流向X,然后从X流向X、y或z

因此,来自a的数据可以到达x、y和z

要从a->X中删除边,我们必须将a中的边添加到从X可以到达的所有节点。因为我们必须对每个到达X的边执行此操作,所以我们得到了二次复杂度

编辑:(由于注释)对于两个禁止的节点X和Y,如果存在一个从X到Y的边形式,这样的边可以保留。移除所有禁止节点(禁止节点除外)的所有边后,禁止节点可形成大小大于1的连接组件。这不是一个问题,因为每个这样连接的组件只包含禁止的节点和边,并且无法从剩余的流图中访问


在此之后,我们只删除从有效节点到禁止节点的边。为了满足要求,必须去除这些边缘。没有其他边缘被移除,因此这是满足请求的最小数量。(我不认为这里还有什么可以证明的。)

你能移除所有不需要的节点吗?如果图形断开连接,在数据源和数据接收器之间添加一条边?谢谢,基本上,算法如下:1-搜索源和节点X之间的所有路径。2-保存X的邻居是一个集合a 3-保存路径中的节点,并将X作为集合B中的邻居。4-从集合B和X的节点中删除EGDE。5-将集合B中的节点的边添加到集合a中的节点。如果它是正确的…这个算法的复杂度是多少?对于1,如果你所说的源是指有一条直达X的边的节点,那么是的。根据图形的存储方式,到达X的邻居的时间应该是恒定的。通过X的所有路径都必须经过一个节点,该节点的边以X为终点,因此只需要这些路径。由于您的条件是无法到达X,因此只需移除X端的边缘,远离X的引线边缘应良好。复杂性在文章中提到,对于i个传入和j个传出边,每个这样的节点X的复杂性需要O(i*j)时间。再次感谢这个例子,我还有一个问题,如何证明通过使用此方法,我已删除了可能的最小边?@gue…感谢更新…但我想说的是..该算法是最优的吗?如何证明它?@StambouliA.ouadoud可以通过对边缘进行分类来证明它。每一条边e都从一个节点a到一个节点B。现在a可以被禁止,B可以被禁止,或者两者都被禁止,或者没有。现在,我们可以详细查看每种类型,并验证此方法是否删除了所有正确的边。最优性可以通过矛盾的证明来证明:假设我们通过保留一条被删除的边来获得最佳结果。然后你可以证明这条边去了一个被禁止的节点,并且算法是无效的。