从子集和问题的动态规划解看判断问题与优化问题的区别与联系

一,子集和问题的动态解

1)子集和问题:给定一组整数构成的一个集合S,并给定另一个整数W,问:在S中是否存在一个子集A 包含于(属于) S,有A中所有元素的和等于W?

(∑a(i)εAa(i) = W ?)

2) 很明显,子集和问题是NPC问题,证明参考《算法导论第二版中文版》第627页。既然它是NPC的,而我们这里用动态规划来求解该问题,显然是找到该问题的一个近似解。

3)根据1)中子集和问题的描述,该描述是判断问题,即判断集合A中所有的元素之和是不是等于W。当需要用动态规划来求解时,需要将之转化为优化问题。

转化成的优化问题如下:

在集合S中寻找一个子集A,在保证A中所有的元素之和小于等于W的前提下,最大化A中所有的元素之和。

 

这样,得到的子集合问题的动态规划解与K步背包问题的动态规划解非常相似了。这方面的具体解法可以使用GOOGLE搜索Dynamic programming solove subset sum problem.

 

二,判断问题与优化问题的应用场合(区别联系)

优化问题和判断问题(决策问题)是相伴而行的。有一个优化问题就会对应有一个判断问题,反之亦然。

判断问题出现于讨论该问题是否具有NPC性质时,如:顶点覆盖问题是NP完全的,即判断:图G=(V,E)中是否存在一个大小为K的点覆盖。

优化问题出现于在我们用算法设计与分析技术(动态规划、贪心、分治……)来解决某问题时,该问题是一个优化问题。也即,动态规划、贪心、分治针对的是优化问题而不是判断问题。

因此,当证明了某个问题是NPC的之后,就知道它目前没有有效的多项式时间算法解决它了。因此,转而求其次,即求解该问题的近似解。那么,就需要将该问题转化为优化问题,然后再使用算法分析技术进行求解。

 

posted @ 2015-05-30 16:23  大熊猫同学  阅读(2723)  评论(0编辑  收藏  举报