📅  最后修改于: 2023-12-03 15:12:09.074000             🧑  作者: Mango
子图指的是一个图中的一部分,如果两个图中的子图相同,则称它们是同构的。
子图同构问题是指给定两个图,询问它们是否同构。
举个例子,下图中的两个图就是同构的,因为它们包含相同的子图。
为了证明子图同构问题是 NP-Complete,我们需要证明两个点:
要证明子图同构问题是 NP 问题,我们需要证明如果我们已经知道两个图同构,我们可以在多项式时间内验证这个结论。
我们可以这样做:对于两个同构的图,我们可以用一个排列来表示每一个节点的对应关系。因此我们只需要检查这个排列是否是一个有效的映射,即所有边的对应关系是否也被映射到了对应的边上,这个检查可以在多项式时间内完成,因此子图同构问题是 NP 问题。
为了证明子图同构问题是 NP-Hard 问题,我们需要将一个已知的 NP-Hard 问题约化到子图同构问题,也就是要证明我们可以用子图同构问题来解决已知的 NP-Hard 问题。
我们可以将 2-SAT 问题约化到子图同构问题。2-SAT 问题是指给定一个由布尔变量和条件构成的布尔表达式,判断是否存在一组变量赋值使得表达式为真。
我们可以将 2-SAT 问题转换成一个有向图的形式:每个布尔变量有两个节点分别代表它的赋值为真或假,每个条件则有两个节点分别代表条件中的两个变量或它们的否定,根据条件的关系来建立两个变量节点之间或条件的节点之间的边。
这个图可以转化成一个无向图,因为有向图中,仅仅从 $i$ 到 $j$ 的边不能推导出从 $j$ 到 $i$ 的边,我们把入度和出度相同的节点缩成一个节点,就得到了一个无向图。
我们可以对这个无向图做一些简单的转化:对于每个节点 $i$,我们把 i==true 和 i==false 这两个节点分别缩成一个节点 $i$,构造出一个新的图 G',这个图中一个节点代表一个布尔变量,并用节点之间的边代表它们恰好有一个赋值为 true。
接下来我们可以构造出两个新的无向图 G1 和 G2:
把 G' 中的所有变量节点和条件节点分别拆开成两个节点,每一对节点 $(i,a)$ 和 $(i,b)$ 都连边。
对于 G' 中的一条边 $(x,y)$,在 G1 中我们向 $(x,a)$ 和 $(y,a)$ 连边,在 G2 中向 $(x,b)$ 和 $(y,b)$ 连边。
现在我们可以证明,如果 G' 中存在一种变量的赋值能使表达式为真,那么 G1 和 G2 就是同构的。
我们设 $(i,a)$ 在 G1 中对应的节点是 $(i',a')$,在 G2 中对应的节点是 $(i',b')$。
如果 $i$ 的赋值为 true,那么在 G' 中节点 $i$ 对应的是 i==true 的节点,因此在 G1 中 $(i,a)$ 会连向 $(i==true,a)$,也就是 $(i'==true,a')$,G2 中同理。如果 $i$ 的赋值为 false,那么在 G' 中节点 $i$ 对应的是 i==false 的节点,因此在 G1 中 $(i,a)$ 会连向 $(i==false,a)$,也就是 $(i'==false,a')$,G2 中同理。因此 G1 和 G2 就是同构的。
我们可以得出结论:如果我们可以在多项式时间内判断两个图是否同构,那么我们就可以在多项式时间内解决 2-SAT 问题,因此子图同构问题是 NP-Hard 的。
综上,我们可以得出结论:子图同构问题是 NP-Complete 的。
子图同构问题是 NP-Complete 的,即它是 NP 问题与 NP-Hard 问题的交集。因此在实际运用中,我们需要考虑如何在既不浪费太多时间也能保证正确性的情况下解决它。