有一个有向图,它有一个名为root的指定节点,所有其他节点都可以从该节点到达。每个终端节点(没有出局边缘)采用字符串值。 中间节点具有一个或多个传出边,但没有与之关联的值。将节点连接到其邻居的边缘具有字符串标签。从单个节点发出的边缘标签是唯一的。图中可能存在循环!
检查两个这样的定向(可能有周期)图(如上所述)是否相等的最佳图算法是什么?
答案 0 :(得分:1)
图同构问题是TCS中比较有趣的问题之一。在the wiki上有一整页专门介绍它。
在您的特定情况下,您有两个带有源和接收器的有根有向图。
你可以并行启动两个BFS,并逐级检查同构;即对图表进行分级,并检查每个级别的节点子集是否在两个图形中是同构的。
请注意,由于您有一个Directed,Rooted图,因此您仍然可以对其进行分级以便找到同构。不要在BFS期间使用已经访问过的节点;即,在确定要分组的级别时,使用从根开始到节点的最短路径进行分级。
在一个集合中,比较应该相对容易。您有许多属性可以区分同一级别(度,标签)的节点,并且应该能够创建合适的签名来对它们进行排序。既然你正在寻找完美的同构,你应该得到完全匹配。