- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
算法合集之《探深度优先搜索中的优化技巧》
探寻深度优先搜索中的优化技巧;正方形剖分问题;分析;设fi,j表示一个i×j的矩形最少可以被剖分成多少个小正方形:;;搜索的对象和顺序;剪枝;改进搜索的顺序;猜想:任何剖分方案是否都能通过若干条剖分线把一个个小正方形剖分出来呢?;证明;新的搜索顺序;新增剪枝;搜索效率:在最慢时(n=31)只要20s左右就能够出解了。(测试环境 (R)4 CPU 1.7GHz)
还有什么方法能够使搜索效率再大幅提高呢?
看下边这棵搜索树:;那么,若已知y的值,蓝色节点就变为了搜索树中的叶子节点,因为搜到它就可直接回溯了。
若求出了大量的节点的y值,就能使许多非叶子节点变为叶子节点,总节点数就会大大减少。;状态的表示;优化状态的表示;状态的对应的实现;动态规划;显然无法求出所有的状态的fi值,但是我们只需求出其中的若干个就足够了。当然应该尽量多求一些,因为求出的状态越多搜索的效率就会越高。
观察上面的动态规划方程,假如把将每个状态看作一个点,若状态i添加一个小正方形能变成状态j就连一条有向边i?j,那么fi就是点1到点i的最短距离。由于每条边长度都为1,可以从点1开始广搜,不断扩展直到产生出足够多的状态。;为了搜索时查找方便,每扩展出一个节点,就将它放入Hash表中。
搜索时,每搜到一个节点,就查找当前的状态i是否在表中,如果找到了相应的fi值就可改进当前最优值然后直接回溯。
查找的复杂度仅为常数(≤9)
算法缺陷:每搜索一个节点时都要进行一次查找,在多数情况下其实是找不到的,白白浪费了大量的时间。;优化:只计算fi小于≤c(自定的常数)的状态。搜索时,若已经使用了x个小正方形,且x+c+1≥当前最优解,那么就查找未覆盖区域对应的fi值:
1、若未找到,说明少于c+1个小正方形不能拼成未覆盖区域,也就是说搜下去的话最少也要x+c+1个,不比当前最优值更优;
2、如果找到了,那么搜下去的最优值显然为x+fi,就可直接令当前最优值=min{当前最优值,x+fi};
这样一来,避免了无谓的查找,效率大大提高。;经过以上的优化过程,搜索的层次能够减少了c层,效率得到了大大的提高。
如果结合各种各样剪枝条件,最大数据(n =31)也仅要4秒多。;回顾解决???题的步骤;搜索,因其时间效率的 “先天不足”,人们有针对性的研究出了很多优化技巧。
一、搜索的对象和顺序是优化中非常重要的一个环节,好的顺序往往是高效率的前提。但是,它也仅仅是一个前提,要保障高效率仅仅靠它是不够的;
二、“剪枝”是最常见的优化方法,几乎可以说,只要用搜索解决问题,就必须考虑剪枝优化。但是,无论剪枝多么巧妙,都不能从本质上降低搜索算法的时间复杂度。;三、预求某些状态的最优值,降低搜索的层数。它能够起到降低搜索复杂度的功效。
由于FreePascal的开发使用,使得空间上的限制放松了上百倍,而题目对运行时间的限制历来都是十分苛刻的,这使得我们想到用牺牲空间的代价来换取更多的时间。若把它利用到搜索中来,就产生以上这种优化方法。
这一优化中最重要的一步就是状态的表示。
算法的优化是永无止境的,搜索的优化更是如此,需要我们具体问题具体分析,充分发挥思维的灵活性。只有积累了足够的经验,才能够熟练的应用各种优化技巧。;Thank you!;
文档评论(0)