回溯与。贪心算法最大独立集

Posted

技术标签:

【中文标题】回溯与。贪心算法最大独立集【英文标题】:Back Tracking Vs. Greedy Algorithm Maximum Independent Set 【发布时间】:2013-05-22 22:35:19 【问题描述】:

我使用贪心算法和回溯算法实现了回溯算法。 回溯算法如下:

MIS(G= (V,E): a graph): largest set of independent vertices
1:if|V|= 0
then return .
3:end if
if | V|= 1 
then return V
end if
pick u ∈ V
Gout←G−uremove u from V and E 
Gn ← G− u−N(u)N(u) are the neighbors of u
Sout ←MIS(Gout)
Sin←MIS(Gin)∪u
return maxsize(Sout,Sin)return Sin if there’s a tie — there’s a reason for this.
 

贪心算法是迭代地选择度数最小的节点,将其放入MIS中,然后将其及其邻居从G中移除。

在边存在的概率为 0.5 的不同图形大小上运行算法后,我凭经验发现与贪心算法相比,回溯算法总是找到更小的最大独立集。这是预期的吗?

【问题讨论】:

【参考方案1】:

您的解决方案很奇怪。回溯通常用于是/否问题,而不是优化。您编写的算法很大程度上取决于您如何选择u。而且它绝对不是回溯,因为你从不回溯。

此类问题可以通过多种方式解决,例如:

基因编程, 详尽搜索, 解决对偶图上的问题(最大团问题)。

【讨论】:

【参考方案2】:

根据Wikipedia,这是一个NP-hard问题:

A maximum independent set is an independent set of the largest possible size for a given graph G.
This size is called the independence number of G, and denoted α(G).
The problem of finding such a set is called the maximum independent set problem and is an NP-hard optimization problem.
As such, it is unlikely that there exists an efficient algorithm for finding a maximum independent set of a graph.

因此,为了找到图的最大独立集,您应该测试所有可用状态(使用其时间复杂度为指数的算法)。所有其他更快的算法(如贪心算法、遗传算法或随机算法)都找不到确切的答案。他们可以保证找到一个最大独立集,而不是最大一个。

总之,我可以说你的回溯方法更慢更准确;但贪心法只是一种近似算法。

【讨论】:

以上是关于回溯与。贪心算法最大独立集的主要内容,如果未能解决你的问题,请参考以下文章

树形DP 树的最小支配集,最小点覆盖与最大独立集

最大独立集算法

hdu-1067(最大独立集)

POJ 1466 Girls and Boys (匈牙利算法 最大独立集)

每日一题40. 旅游 (树形DP解决树的最大独立集)

BZOJ 4808 马 二分图最大独立集