繁体   English   中英

将边缘添加到非循环图

[英]Adding edges to an acyclic graph

我有一个有向和无向边的图,现在我想通过将无向边替换为有向边来消除无向边(每个无向边变成一个有向边)。 每个无向边缘都有两个可能性(用一个方向或另一个方向上的有向边缘替换它)。

如何确定无向边的方向,以便我的图保持非循环状态( DAG )?

我的方法:

在没有无向边的图形上进行拓扑排序,将无向边一个接一个地添加(使它们从较小的拓扑指向较大的指向)。

这似乎不起作用,因为拓扑排序创建了部分顺序(并非所有顶点彼此都可比),我需要的是总顺序(所有顶点都可比)。 如何将部分订单扩展到总订单?

我的方法失败的示例图:

  • n = 8(顶点数,从1到n编号)
  • m = 5(有向边的数量)
  • l = 6(无向边数)

有向边:

  1. 2-> 1
  2. 3-> 2
  3. 2-> 6
  4. 4-> 5
  5. 5-> 8

无向边缘:

  1. 1 <-> 4
  2. 2 <-> 5
  3. 3 <-> 7
  4. 4 <-> 8
  5. 6 <-> 7
  6. 6 <-> 8

仅在顶点旁边具有定向边和拓扑顺序值的图: 在此处输入图片说明

现在,当我开始添加未定向的边(并根据拓扑顺序值对其进行定向)时,在添加边8-> 4后得到一个循环: 在此处输入图片说明

https://en.wikipedia.org/wiki/Directed_acyclic_graph

根据定义,拓扑排序是线性顺序,每个线性顺序都是总顺序,因此从理论上讲,您的方法很好。 但是,您的实现是错误的。

即在您的拓扑顺序定义中,如果存在从a到b的边,则b <a。 但是在第二张图中,您打破了规则并从4到6添加了一条边(6> 4!),将顶点的标识符(8和4)与它们的拓扑顺序(4和6)混合在一起。

对我来说,您的方法似乎有效。 对顶点进行任何排序; 现有边缘的取向应使其指向“正确”,即从位置较低的顶点到位置较高的顶点。 这始终是可能的,并导致非循环有向图。

在下一步中,您也许可以使用Dedekind–MacNeille完成来生成包含初始顺序作为子集的总顺序。

暂无
暂无

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

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