博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
从子集和问题的动态规划解看判断问题与优化问题的区别与联系
阅读量:6268 次
发布时间:2019-06-22

本文共 739 字,大约阅读时间需要 2 分钟。

一,子集和问题的动态解

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://gkppa.baihongyu.com/

你可能感兴趣的文章
《ArcGIS Runtime SDK for Android开发笔记》——问题集:如何解决ArcGIS Runtime SDK for Android中文标注无法显示的问题(转载)...
查看>>
Spring Boot日志管理
查看>>
动态注册HttpModule管道,实现global.asax功能
查看>>
使用 ES2015 编写 Gulp 构建
查看>>
[转]Using NLog for ASP.NET Core to write custom information to the database
查看>>
BZOJ 4766: 文艺计算姬 [矩阵树定理 快速乘]
查看>>
MySQL 的instr函数
查看>>
Hibernate的核心对象关系映射
查看>>
接口与抽象类的使用选择
查看>>
if __name__ == '__main__'
查看>>
CF 375D. Tree and Queries【莫队 | dsu on tree】
查看>>
Maven最佳实践 划分模块 配置多模块项目 pom modules
查看>>
Hadoop学习笔记——WordCount
查看>>
Unity应用架构设计(4)——设计可复用的SubView和SubViewModel(Part 1)
查看>>
Java-Spring-获取Request,Response对象
查看>>
opencv项目报错_pFirstBlock==pHead解决办法
查看>>
MySQL日志
查看>>
Oracle性能优化之Oracle里的执行计划
查看>>
电脑如何连接远程服务器?听语音
查看>>
使用Xcode 查看objective-C的汇编代码
查看>>