我使用贪婪算法和反向跟踪算法实现了反向跟踪算法。 反向跟踪算法如下:
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−{u}{remove 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,我根据经验发现,后向跟踪算法总是找到比贪婪算法更小的最小独立集。这是预期的吗?
答案 0 :(得分:0)
你的解决方案很奇怪。回溯通常用于是/否问题,而不是优化。您编写的算法在很大程度上取决于您选择u
的方式。它肯定不会回溯,因为你永远不会回溯。
这个问题可以通过多种方式解决,例如:
答案 1 :(得分:0)
根据Wikipedia,这是一个NP难题:
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.
因此,为了找到图的最大独立集,您应该测试所有可用状态(使用其时间复杂度为指数的算法)。所有其他更快的算法(例如贪心算法,遗传算法或随机算法)都无法找到确切的答案。他们可以保证找到一个最大独立集合,但不能找到最大一个集合。
总而言之,我可以说您的回溯方法较慢且准确;但是贪婪方法只是一种近似算法。