我有一个代表属性列表的 DAG。这些性质使得如果 a>b,则 a 具有到 b 的有向边。它也是可传递的,因此如果 a>b 且 b>c,则 a 具有到 c 的有向边。
但是,从 a 到 c 的有向边是多余的,因为 a 有到 b 的有向边,而 b 有到 c 的有向边。我怎样才能修剪所有这些多余的边缘?我正在考虑使用最小生成树算法,但我不确定在这种情况下应用什么合适的算法
我想我可以从每个节点及其所有出边进行深度优先搜索,并比较它是否可以在不使用某些边的情况下到达某些节点,但这似乎非常低效和缓慢。
算法完成后,输出将是所有节点的线性列表,其顺序与图一致。因此,如果 a 具有到 b、c 和 d 的三个有向边。b 和 c 也都有指向 d 的有向边,输出可以是 abcd 或 acbd。