如何找到具有度约束的二分图的最大子图?

3
我有一个二分图,将分别引用红节点和黑节点的各自不相交的集合。
我想知道如何找到一个连接的感应子图,最大化红节点的数量,同时确保子图中的所有黑色节点具有小于或等于2的新价值。 "感应"意味着如果两个节点在原始图中连接,并且两者都存在于子图中,则它们之间的边自动包括在内。最终,我想引入非负的边权重。
这是否可以简化为标准的图算法?希望有已知复杂度和简单实现的算法。
显然可以贪婪地增加子图。但这是最好的方法吗?

通过“剩余黑色节点”,听起来您的意思是指不在子图中的黑色节点...但如果是这样,那么解决方案就很简单:如果整个图都是连通的,则它是唯一最优解;如果它不连通,则没有解决方案。 - j_random_hacker
哦不,抱歉表述不清。 我的意思是子图中的那些点。我会进行编辑。 - Alec Jacobson
子图是否需要是诱导子图?(意思是:如果我们想选择两个顶点b和r进行包含,并且原始图中存在一条边(b,r),那么我们是否被迫在子图中也包含这条边?) - j_random_hacker
是的,我会编辑。 - Alec Jacobson
2个回答

1

1

很不幸,这是NP难问题,所以可能没有多项式时间算法来解决它。以下是从NP难问题独立集中的简化,其中我们给定一个图G =(V,E)(其中n = | V |和m = | E |)和一个整数k,任务是确定是否可能找到一组k个或更多顶点,使得集合中没有两个顶点通过边连接:

  • 对于G中的每个顶点v_i,在H中创建一个红色顶点r_i。
  • 对于G中的每条边(v_i, v_j),在H中创建以下内容:
    • 一个黑色顶点b_ij,
    • n+1个红色顶点t_ijk(1<=k<=n+1),
    • n个黑色顶点u_ijk(1<=k<=n),
    • n条边(t_ijk, u_ijk)(1<=k<=n),
    • n条边(t_ijk, u_ij{k-1})(2<=k<=n+1),
    • 三条边(r_i, b_ij), (r_j, b_ij)和(t_ij1, b_ij)。
  • 对于每对顶点v_i、v_j,创建以下内容:
    • 一个黑色顶点c_ij,
    • 两条边(r_i, c_ij)和(r_j, c_ij)。
  • 将阈值设置为m(n+1)+k。

将所有r_i的集合称为R,所有b_ij的集合称为B,所有c_ij的集合称为C,所有t_ij的集合称为T,所有u_ij的集合称为U。

这里的一般思路是强制每个黑色顶点b_ij选择最多两个红色端点r_i和r_j中的一个。我们通过给每个b_ij顶点3条出边来实现这一点,其中一条(指向t_ij1)是“必须拥有”的——也就是说,在任何不选择t_ij1顶点的解决方案中都可以通过选择它以及它连接的n个其他红色顶点(通过在t_ijk和u_ijk之间交替的“摆动路径”连接)来改进,如果需要,消除r_i或r_j以恢复没有3个或更多邻居的黑色顶点的性质,然后通过必要时从C中选择顶点来最终恢复连通性。(c_ij顶点是“连接器”:它们存在仅为了确保我们包含的R的任何子集可以成为单个连通组件。)

假设G中存在大小为k的IS。我们将展示在H中至少有m(n + 1)+ k个红节点的连接诱导子图X,其中每个黑色顶点在X中最多有2个邻居。
首先,在X中包括与IS中顶点对应的R中的k个顶点(根据假设,这样的集合必须存在)。因为这些顶点形成一个IS,所以B中的任何顶点都不与它们中的超过1个相邻,因此我们可以安全地将每个顶点b_ij及其开始于t_ij1的长度为2n + 1的“摆动路径”添加到X中。每个这样的摆动路径都包含n + 1个红色顶点,并且有m个这样的路径(对于G中的每条边都有一个),因此现在X中有m(n + 1)+ k个红色顶点。最后,为确保X是连通的,请添加每个c_ij顶点,使得r_i和r_j已经在X中:请注意,这不会改变X中红色顶点的总数。
现在假设在H中存在至少有m(n + 1)+ k个红节点的连接诱导子图X,其中每个黑色顶点在X中最多有2个邻居。我们将展示G中存在大小为k的IS。
H 中唯一的红色顶点是 R 和 T 中的顶点。R 中只有 n 个顶点,因此如果 X 不包含所有 m 条曲线路径,则其最多只能有 (m-1)(n+1)+n = m(n+1)-1 个红色顶点,这与假设它至少有 m(n+1)+k 个红色顶点相矛盾。因此 X 必须包含所有 m 条曲线路径。这使得 X 中还剩下 k 个其他的红色顶点,它们必须来自 R。这些顶点中没有两个顶点可以相邻于 B 中的同一个顶点,否则该 B-顶点将与 3 个顶点相邻:因此,这些 k 个顶点对应于 G 中的 IS。
由于 IS 的 YES 实例意味着您问题的构造实例也是 YES 实例,反之亦然,所以问题的解决方案与 IS 实例的解决方案完全相对应;并且由于构造显然是多项式时间的,因此这证明了您的问题是 NP-hard。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接