在最近的算法课程中,我们必须形成一个凝聚图并计算其自反传递闭包以获得部分顺序。但它从来没有真正解释为什么我们想要在图表中这样做。我理解凝聚图的要点,因为它突出了强连接的组件,但是偏序使得我们原始图没有什么呢?
实施的算法如下:
这样做形成了部分顺序,但......找到部分顺序给我们带来了什么好处?
答案 0 :(得分:0)
与任何其他数据结构或算法一样,只有在需要它的属性时才有优势: - )
您描述的程序结果是可用于(轻松)回答以下问题的结构:
x, y
。是x<=y
和/或y<=x
,还是两者都没有?x
,找到a
或a<=x
的所有节点x<=a
?这些属性可用于回答有关初始图(DAG)的其他问题。就像,如果添加边x->y
将产生一个循环。可以通过A
的交叉集a<=x
和B
的{{1}}集来检查。如果y<=b
交叉点A
不为空,则边B
会创建一个周期。
结构也可以用于更简单的实现算法,这些算法使用图来描述其他依赖项。例如。 x->y
表示计算结果x->y
用于计算x
。如果计算y
的计算更改为x
,那么a
应重新评估或标记为“脏”&#39;或x<=a
从缓存中删除的结果。