我需要使用贪婪算法来解决此问题(此处m
是边数,n
是原始图中的顶点数)。直觉上,我知道它是关于图的密度(由于m/n*(n-1)
部分),所以我尝试使用贪心算法以每次迭代的最小程度去除顶点,直到我得到k
节点图,但是我不知道如何算法GARUNTEE算法给出了至少m*k*(k-1)/n*(n-1)
个边缘的最终图形。
寻找任何提示,谢谢。
答案 0 :(得分:1)
让我们定义图p=m/(n*(n-1))
的密度(对于无向图,它应该是p=2*m/(n*(n-1))
。请注意,对于密度为p
和k
顶点的图形,它具有(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 <= m
即d <= m/n
。因此,当您移除具有最小度数的顶点时,您会得到包含m-d
个边和n-1
个顶点的图形,然后新图形的密度将为p'=(m-d)/(n-1) >= (m-m/n)/(n-1) = m/n = p
。所以我们认为贪心算法不会降低图的密度。