码迷,mamicode.com
首页 > 其他好文 > 详细

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

时间:2015-05-30 17:59:57      阅读:841      评论:0      收藏:0      [点我收藏+]

标签:

一,子集和问题的动态解

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的之后,就知道它目前没有有效的多项式时间算法解决它了。因此,转而求其次,即求解该问题的近似解。那么,就需要将该问题转化为优化问题,然后再使用算法分析技术进行求解。

 

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

标签:

原文地址:http://www.cnblogs.com/hapjin/p/4540554.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!