- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
算法合集之《浅特殊穷举思想的应用》
浅谈特殊穷举思想的应用
河北唐山一中 鬲融
穷举的思想
穷举思想是信息学中最重要的思想之一,计算机的高速度使其具备了进行穷举的条件。然而,随着图论、数论、动态规划等方法的发展,以及搜索算法的不断改进,穷举似乎越来越不受重视,成为了‘低效’的代名词。
让我们先来了解一下穷举。
穷举的思想
穷举
完全穷举
部分穷举
参变量法
准确理解题意
确定使用穷举思想
明确穷举对象
下面先来看一下完全穷举的例子
例一 聪明的打字员
题目描述(NOI2001)
使用一个只有加减1(Up/Down),左右移动光标(Left/Right),与1,6交换(Swap0/Swap1)六个键的键盘,用最少的步数把一个6位数转化成另外一个。
例如,初始状态是123456,要求的状态是633451,那么最简单的转化方法是:
123456
623451
623451
633451
Swap1
Up
Right
思路1 搜索
思路很简单:通过广度优先搜索确定按键顺序和最小按键次数并输出
节点数:
6,000,000
过大
解决:HASH+A*或双向广度优先
缺点:实现复杂度太高,而且效率也不高
思路2 使用穷举思想
抓住问题的难点:Swap0/Swap1 !
要是没有这两个键……直接处理就可以
把这两个键先处理,不影响结果!
穷举这两个键的使用,只有6!=720种情况
思路2 使用穷举思想
这样我们通过完全穷举得到了一个算法:
把按键过程分为两步
通过Swap0/1得到一个排列
计算这个排列后剩余的步数
一个问题:
并不是所有的位置都可以改变
解决方法:
再次穷举哪些位置可以改变!
时间复杂度:O(6!*10)=O(1)
例二 逻辑岛
题目描述:
在逻辑岛上有3种居民:永远说真话的神,永远说假话的恶魔和在白天说真话,在夜里说假话的人。
一个社会学家访问了这个岛,但他无法通过外表区分这3种居民,所以他只能靠分析居民们说的话来判断他们的种类。
岛上只有五个居民A,B,C,D,E。
他们说的话只有3种
1. I am [not] divine/evil/human/lying.
2. X is [not] divine/evil/human/lying.
3. It is day/night.
居民们说话的总数不超过50。你的任务就是通过居民们说的话来判断他们的种类以及现在是白天还是黑夜
让我们用人脑分析
A: B is human.
B: A is evil.
A: B is evil.
一个简单的例子:
A的话有矛盾
B是神!
A是恶魔
计算机怎样完成这种推理?
失败!
应用穷举思想
题目特点:
人数少
于是得到了完全穷举的算法:
情况数:35*2=486
对每句话进行判断
时间复杂度:O(35*2*s)=O(s)
小结
先来比较一下例一的两种算法
算法
时空复杂度
评价
搜索
高,指数级
未充分利用题目条件
穷举思想
低,常数级
巧妙选择了穷举对象
穷举或许具有很大的盲目性,但我们自身是灵活的!
部分穷举思想
有时候,问题离高效算法只有一步之遥。
参数K
我们不知道参数K,所以我们不能解决问题。
部分穷举思想
问题的参数
(无法穷举)
重要参数K
部分穷举,作为参变量
可行
通过高效算法得到答案
使用部分穷举思想的一般步骤。
部分穷举思想特别适用于最大最小问题
最大最小问题
定义:
这类问题中定义一种权值,要求产生一种划分(或其他类似的结构),使划分的每一部分权值的最大值达到最小。
这里最大是权的最大值,最小是划分产生的“最大”的最小。
一个重要的问题
已知一个最大权值,如何快速判断是否有满足要求的划分?
如果我们能找到这个问题的答案,那么我们就可以把最大权值作为参变量,通过对它进行部分穷举和判断,得到结论。
一种常用优化
如果参变量的范围很大,我们就需要利用题目的条件进行优化。
题目最重要的性质是单调性。
单调性是指如果参变量为x1时可行,那么参变量大(小)于x1时也可行,而且题目要求的是参变量的最小(大)值。这时,我们有两种选择:
仍然用线形的穷举方法,但是当得到一个可行的解时,就停止
改用二分形式的穷举方法。
当然,二分往往可以使时间复杂度减小。
例三 草莓
这是NOI2003的题目,相信大家都已经很熟悉。这里我们要讨论的是树形数据。
初步想法:
既然是求最值,容易想到树的动态规划。可是,我们很难列出有效的状态转移方程,而且该题数据较大,用动态规划效率太低。
进一步考虑:
这是一个最小最大问题,能否使用部分穷举?
首先面临的问题:
如果已知一个分割方案所对应的x,我们如何去寻找一个解答,或者证明这种分割是不存在的? (问题★)
问题★的解决
这个问题可以用贪心来解决。
10
5
7
8
9
x=17
从下向上处
文档评论(0)