回溯与。贪心算法最大独立集
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.
因此,为了找到图的最大独立集,您应该测试所有可用状态(使用其时间复杂度为指数的算法)。所有其他更快的算法(如贪心算法、遗传算法或随机算法)都找不到确切的答案。他们可以保证找到一个最大独立集,而不是最大一个。
总之,我可以说你的回溯方法更慢更准确;但贪心法只是一种近似算法。
【讨论】:
以上是关于回溯与。贪心算法最大独立集的主要内容,如果未能解决你的问题,请参考以下文章