我试图找到一种快速的方法来检查有向无环图的两个节点的相对顺序。一个节点可以在另一个节点之前,之后或与之平行。这是一个示例:
节点H在A,C,D和E之后,但与B,F和G平行,并且在I,J和K之前。
我想找到一种方法,通过在构建图时建立一个索引(或几个索引),以最少的图遍历来进行这种节点比较。理想情况下,每次添加节点或边线时,只需设置其索引,而无需更新其周围的其他值。我不确定是否有可能,但感觉有可能吗?
我最初的方法做得不太好。这是我尝试构造不同图形的最初思考过程的4个步骤的说明:
此后,方法崩溃。我给B什么分支值?如果我将一条边从D添加到E,会发生什么?也许我需要继续添加很多分支值,但是似乎这种方法可能导致每个索引增长到图形本身的大小。我想尽可能地保持其内存效率,尽管我可以做一些时间/空间折衷,并进行一些局部的图形遍历,如果这样做是值得的。
有人知道这个问题的解决方案吗,或者我可以用来进一步研究的一些搜索词?谢谢!
编辑:看来我正在寻找拓扑顺序。尽管它不会告诉我两个节点是否并行,但现在可能足够了。我的新问题是,添加新的节点和边时,如何有效地更新拓扑排序数据?