- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
算法 1
1、算法的有效性
穷举法:
时间复杂性
问题分类
P 问题:是所有可在多项式时间内用确定算法求解的判定问题的集合。
NP 问题 :就是 Non-deterministic Polynomial 的问题,也即是多项式复杂程度的非确 定性问题。可以在多项式时间内验证一个解是否正确的问题称为 NP 问题。P∈NP.NP 问题采用的是非确定性算法。
(证比求易,求出 48770428433377171 的一个真因子。223092827。)
NPC 问题:如果一个 NPC 问题存在多项式时间的算法,则所有的 NP 问题都可以在多项式时间内求解,即P=NP 成立。现在可能已经有3000 多个NPC 问题. 常见的有代表性的一部分 NP 完全问题有图论中的:顶点覆盖、控制集、控制划分数、K 色图着色、消色数、单色三角形、反馈结点集(弧集)、局部反馈边集、最小最大匹配、三角形划分、同构子图划 分问题、哈密尔顿子图划分、哈密尔顿回路、子图同构、旅行商问题(也称货郎担问题) 、中国邮递员问题。
NPH 问题: 比 NP 问题更难的问题可以称为 NP 难问题。
2、算法的描述
3、贪婪算法(greedy algorithms,也叫贪心算法、登山法)
例 找硬币 假设有四种硬币,它们的面值分别为二角五分、一角、五分和一分。现在要找给某顾客六角三分钱。这时,我们会不假思索地拿出2 个二角五分的硬币,1 个一角的硬币和 3 个一分的硬币交给顾客。这种找硬币方法与其他的找法相比,所拿出的硬币个数是最少的。
这里,我们下意识地使用了这样的找硬币算法:首先选出一个面值不超过六角三分的最
大硬币,即二角五分;然后从六角三分中减去二角五分,剩下三角八分;再选出一个面值不超过三角八分的最大硬币,即又一个二角五分,如此一直做下去。总共用六枚硬币,事实说明这是最好的结果。这个找硬币的方法实际上就是贪婪算法。
顾名思义,贪婪算法总是以当前情况为基础,而不考虑全部各种可能的情况,作出在当前状态看来是最好的选择。也就是说贪婪算法并不从整体最优上加以考虑,它所作出的选择只是在某种意义上的局部最优选择。当然,我们希望贪婪算法得到的最终结果也是整体最优的。上面所说的找硬币算法得到的结果就是一个整体最优解。虽然贪婪算法不是对所有问题都能得到整体最优解,但对范围相当广的许多问题它能产生整体最优解。如图的单源最短路径问题,最小生成树问题等。
例 砝码称物 如果现在问题是:砝码的种类分别为 11 克、5 克和 1 克,待称的物体是
15 克。用贪婪算法应先选一个 11 克的,然后选四个 1 克的,共用五个砝码。但这不是最优
结果,实际只要用三个 5 克的砝码就够了。
在一些情况下,即使贪婪算法不能得到整体最优解,然而,却是一种具有直觉的倾向且一般情况下其最终结果却是最优解的很好的近似解。它利用的规则就是在实际环境中人工所采用的规则。作出贪婪决策的依据称为贪婪准则(greedy criterion) 。
很多同学总认为贪婪法是一种不追求最优解,只能得到较为满意解的方法,所以它不算 好,故而总想找其它能得到最优解的方法。但其实因为贪婪法一般可以快速得到满意的解, 它省去了为找最优解要穷尽所有可能而必须耗费的大量时间。对于 NP 完全类问题,这种方法是经常采用的。这种算法也被称为启发式方法( h e u r i s t i c s )。
4、经典 NP 问题
例 装箱问题 装箱问题可简述如下:设有编号为 1、…、n 的 n 种物品,体积分别为
v 、v
1 2
、…、v
n
。将这 n 种物品装到容量都为 V 的若干箱子里(更一般的装箱问题还可以要
求容量不是相同的)。约定这 n 种物品的体积均不超过 V,即对于 1≤i≤ n,有 0<v ≤V。
i
不同的装箱方案所需要的箱子数目可能不同。装箱问题要求使装尽这 n 种物品的箱子数要少。
模型建立
i:箱子,j:物品
nmin z ( y ) ? ? y
n
i
i ? 1
s.t. ?n
j ?1
v x
j ij
? Vy
i
, i ? N ? {1, , n}
n? x
n
ij
i ?1
? 1 j ? N
求解分析
y ? 0 或1
i
x ? 0 或1
ij
i ? N j ? N
若考察将 n 种物品的集合分划成 n 个或小于 n 个物品的所有子集,最优解就可以找到。但所有可能划分的总数太大。对适当大的 n,找出所有可能的划分要花费的时间是无法承受的。为此,对装箱问题采用非常简单的近似算法,即贪婪法。该算法依次将物品放到它第一个能放进去的箱子中,该算法虽不能保证找到最优解,但还是能找到非常好的解。
NF(Next Fit-下次适应)算法:按照物体给定的顺序装箱:把物品 w
i
放到它第一
个能放进
原创力文档


文档评论(0)