如何找到至少m * k *(k-1)/ n *(n-1)个边的k个节点的诱导子图

时间:2015-12-03 20:01:21

标签: algorithm greedy subgraph

我需要使用贪婪算法来解决此问题(此处m是边数,n是原始图中的顶点数)。直觉上,我知道它是关于图的密度(由于m/n*(n-1)部分),所以我尝试使用贪心算法以每次迭代的最小程度去除顶点,直到我得到k节点图,但是我不知道如何算法GARUNTEE算法给出了至少m*k*(k-1)/n*(n-1)个边缘的最终图形。

寻找任何提示,谢谢。

1 个答案:

答案 0 :(得分:1)

让我们定义图p=m/(n*(n-1))的密度(对于无向图,它应该是p=2*m/(n*(n-1))。请注意,对于密度为pk顶点的图形,它具有(k*(k-1)) * p边缘。另请注意,当您贪婪地移除具有最小度数的顶点时,它不会降低图形的密度(将在下面对其进行校对)。因此,当您获得带有k的子图时顶点,其密度等于或大于m/(n*(n-1)),则子图至少包含k*(k-1)(m*/n*(n-1))个边。

设G为包含m边和n个顶点的图形,然后是p=m/n。设d所有顶点的最小度数。然后我们有n * d <= md <= m/n。因此,当您移除具有最小度数的顶点时,您会得到包含m-d个边和n-1个顶点的图形,然后新图形的密度将为p'=(m-d)/(n-1) >= (m-m/n)/(n-1) = m/n = p。所以我们认为贪心算法不会降低图的密度。