查找图表的部分顺序的原因

时间:2017-07-14 03:32:09

标签: algorithm graph

在最近的算法课程中,我们必须形成一个凝聚图并计算其自反传递闭包以获得部分顺序。但它从来没有真正解释为什么我们想要在图表中这样做。我理解凝聚图的要点,因为它突出了强连接的组件,但是偏序使得我们原始图没有什么呢?

实施的算法如下:

  1. 查找强连接组件(我使用Tarjan算法)
  2. 为SCC创建缩放图
  3. 形式反射 - 传递闭合邻接矩阵(我使用Warshall的算法)
  4. 这样做形成了部分顺序,但......找到部分顺序给我们带来了什么好处?

1 个答案:

答案 0 :(得分:0)

与任何其他数据结构或算法一样,只有在需要它的属性时才有优势: - )

您描述的程序结果是可用于(轻松)回答以下问题的结构:

  • 对于两个节点x, y。是x<=y和/或y<=x,还是两者都没有?
  • 对于节点x,找到aa<=x的所有节点x<=a

这些属性可用于回答有关初始图(DAG)的其他问题。就像,如果添加边x->y将产生一个循环。可以通过A的交叉集a<=xB的{​​{1}}集来检查。如果y<=b交叉点A不为空,则边B会创建一个周期。

结构也可以用于更简单的实现算法,这些算法使用图来描述其他依赖项。例如。 x->y表示计算结果x->y用于计算x。如果计算y的计算更改为x,那么a应重新评估或标记为“脏”&#39;或x<=a从缓存中删除的结果。