我有一个连通的无向图 G = (V, E),一个集合 S = {S_1, S_2,..., S_n},其中每个 S_i 是 V 的子集,以及一个 k > 1。如何将 V 划分为 k 个子集,以确保: 对于每个 i,S_i 中的每个节点都在同一个子集中 每个子集表示 G 的一个连通子图?
Steiner forest问题是指,给定一个加权图G =(V,E)和一些顶点对(s1,t1),…,(sm,tm),找到最轻的边子图H,使得对于所有i,顶点si和ti属于H的同一连通分量。你的问题的决策版本本质上是具有单位权重的Steiner forest问题的决策版本。不幸的是,这种特殊情况仍然是NP-hard问题。从Steiner forest问题的特殊情况到你的问题的约简是,给定Steiner forest问题的非加权实例和确定是否存在成本不超过c的解决方案的指令,创建与相同图形的你的问题的实例,k = | V | - c,并且对于所有i,让Si = {si,ti}。如果存在成本不超过c的Steiner forest,则该森林的连通分量是你的子集,其数量至少为| V |-c = k。反之,如果你的问题的实例有解,则我们可以在每个你的子集中找到一棵生成树,总成本不超过| V |-k = c。已知的最佳近似比是2,如果k很小,这并没有帮助你。你可能需要使用分支定界算法。
一些随机的观察。您可能无法连接两个S_i,S_j,因为它们不形成一个连通子图。由于图是连通的,如果您只添加足够多的其他S_k,就可以始终将它们连接起来 - 最终您将得到完全由定义连接的完整图。因此,连通性要求驱使您合并。然而,k个子集的要求则驱使您保持分离状态。基本上,您有一个n^k搜索空间,如果您跟踪这些条件,可以彻底削减它。当然,如果您在没有S的自由节点中,那么游戏就会完全改变。嗯,不是真正的答案,而是一个开始。无论如何都会发布 ;)
k
是预先固定的还是取决于解决方案? - Grigor Gevorgyan