algorithm – 测试给定的DAG是否为晶格

我获得了一个带有独特源和接收器的有向无环图(DAG).有没有一种有效的方法来测试此图表所代表的 partial order是否为 lattice?

换句话说,我需要测试任何两个顶点是否具有唯一的最小上界和最大下界.

最佳答案 我不确定这是最佳方法,但在我看来,值得一试.

意图是至少检查可能的数量的顶点对是否存在满足和连接.使用相同的方法独立检查Meets和join.第一边(相遇)比另一边(连接)具有相反的边缘方向.

想法是使用拓扑排序,并检查下一个访问过的顶点以查看已访问过的顶点.为实现这一点,每个顶点(v)必须存储:

>它的前身P(v)= {x; x< V},
>它的拓扑指数I(v).

通过以下方式查找两个给定顶点(a,b)是否存在相遇:

P_ab = P(a) intersect P(b)
Find x in P_ab with max I(x).
If |P(x)| = |P_ab| - 1 than x is a meet of a and b.

访问新的顶点v,要检查与v的会合的节点是C(v)=所有已访问的节点 – P(v).使用偏序的属性来减少检查次数.如果v和a在C(v)中具有一个满足,并且如果b在C(v)中并且b

点赞