1

我正在处理有根、有向、潜在循环图。图中的每个顶点都有一个标签,它可能是唯一的,也可能不是唯一的。边没有标签。该图有一个指定的顶点,每个顶点都可以从该根顶点到达。从顶点出来的边的顺序是相关的。

出于我的目的,一个顶点等于另一个顶点,如果它们共享相同的标签,并且它们的边也被认为是相等的(并且顺序相同)。如果两条边具有相同的方向并且其对应端的顶点相等,则它们相等。

由于上面的相等规则,一个图可以包含多个实际上相等的“部分”。例如,在下图中,有两个同构部分包含标签为 {1, 2, 3, 4} 的顶点。图的根是顶点 0。

图形

我需要能够识别相同的部分,然后删除所有重复项,而不改变图形的“含义”(关于上面的相等规则)。使用上面的例子作为输入,我需要产生这个:

图形

在多项式时间内是否有已知的方法可以做到这一点?

4

1 回答 1

1

最终工作的解决方案基本上是对具有相同标签的每一对顶点运行递归相等检查。

  1. S = 具有相同标签的所有顶点对
  2. 对于S中的每个s
    1. 通过递归比较他们的孩子来比较s中的两个顶点ab
    2. 如果它们比较相等,则取图中指向b的所有边,并将它们指向a
于 2019-09-05T15:28:19.933 回答