最大化子图度中心性的算法

时间:2016-05-22 04:12:20

标签: algorithm graph

假设我有一些带有节点和无向边的图(边可能有一个与之相关的权重)。

我想找到所有(或至少一个)连接的子图,这些子图最大化子图中所有节点的度中心度之和(度数中心性基于原始图)约束,加权边的总和是< X.

是否有算法可以做到这一点?

1 个答案:

答案 0 :(得分:1)

快速搜索将我带到this description of degree centrality。事实证明,"度中心性"顶点只是其度(邻居计数)。

不幸的是,您的问题是NP-hard,因此不太可能存在可以快速解决每个实例的任何算法。首先注意,假设边权重为正,任何最优解中的边必然形成树,因为在任何非树中,您可以删除至少1个边而不破坏连通性,这样做会减少子图的总边权重。 (因此,作为一个积极的衍生:如果你计算输入图的最小生成树并发现它的总重量

让我们制定您问题的决定版本。给定图G =(V,E),边上带有正(I< ll假设)权重,数字X和数字Y,我们想知道:是否存在连通的子图G' G的=(V',E')使得E'中的边缘权重之和最多是X,和V的度数之和。 (w.r.t. G)至少是Y? (显然,这并不比你原来的问题困难:如果你有一个算法来解决你的问题,那么你可以运行它,在它找到的子图中加上顶点的度数并将其与Y进行比较以回答&#34 ;我的问题。)

这里是从NP难Steiner Tree in Graphs问题中减少的问题,我们给出了一个图G =(V,E),边上有正权,是顶点的子集S,数字k,并且任务是确定是否可以使用具有最多k的总权重的边缘子集来连接S中的顶点。 (如上所示,解决方案必然是树。)如果G中所有度数的总和为d,那么我们需要做的就是将G转换为您的问题的输入,如下所示:对于每个顶点s_i in我们添加了足够的新的"镇流器"每个顶点通过权重为X + 1的边连接到s_i,使s_i的程度达到d + 1。我们将X设置为k,并将Y设置为| S |(d + 1)。

现在假设Steiner Tree问题的解决方案是YES--也就是说,存在一个边缘的子集,其总权重< = k确实连接了S中的所有顶点。在这种情况下,它是'很清楚,上面构造的问题实例中的同一个子图连接(可能包括)S中的所有顶点,并且由于S中的每个顶点具有度d + 1,所以总度至少为| S |(d +) 1),所以你的决定问题的答案也是肯定的。

在另一个方向,假设你的决策问题的答案是肯定的 - 也就是说,存在一个边缘的子集,其总权重<= X(= k)连接一组具有总度数的顶点至少| S |(d + 1)。我们需要证明这意味着原始Steiner Tree问题的答案是肯定的。显然,足以证明顶点集V&#39;满足上述条件的任何子图(即,边具有总权重&lt; = k并且顶点具有总度&gt; = | S |(d + 1))包含S(可能在其他顶点中)。所以让V&#39;是这种解决方案的顶点集合,并且假设在S中存在一些不在V&#39;中的顶点u。但是,我们可以做出的最大度数之和是在V&#39;中包含图中所有其他非镇流顶点,这将给出最多度(| S | -1)(d +) 1)+ d(第一项是S中其他顶点的度和;第二项是G中所有非S顶点的度和的上界;请注意,我们添加的没有一个压载顶点可能是在子图中,因为包含它们中任何一个的唯一方法是使用权重X + 1的边,我们显然不能这样做。但显然(| S | -1)(d + 1)+ d = | S |(d + 1)-1,严格地小于| S |(d + 1),这与我们的假设V&#39;相矛盾。学位总数至少为| S |(d + 1)。因此,S是V&#39;的子集,因此可以使用相同的边缘子集来连接S中的顶点,总重量最多为k,即Steiner树的答案问题也是肯定的。

对任何一个问题的答案都是肯定的,这意味着对另一个问题的答案是肯定的,这反过来意味着答案否定意味着对另一个答案没有答案。因此,如果有可能在多项式时间内解决问题的决策版本,则意味着图形问题中NP-hard Steiner树的多项式时间解决方案。这意味着您的问题的决策版本本身就是NP难的,优化版本也是如此(正如我上面所说的那样至少同样困难)。 (决策表格也是NP-complete,因为在多项式时间内可以很容易地验证“是”答案。)

旁注:起初我认为我从NP-hard背包问题中得到了一个非常直接的减少:给定n个权重列表w_1,...,w_n和n个利润列表p_1,...,p_n,制作单个中心顶点c和n个其他顶点v_1,...,v_n。对于每个v_i,将其附加到具有权重w_i的边的c,并添加p_i其他叶顶点,每个顶点仅附加到具有权重X + 1的边的v_i。然而,这种减少实际上并不起作用,因为利润在输入大小n中可以是指数的,这意味着你构造的问题实例可能需要有一个指数的顶点,这是不允许的。多项式时间减少。