- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
浅析信息学中的“分”与“合”
福建省福州第三中学 杨沐
目录
【摘要】 3
【关键字】 3
【正文】 3
一、引言 3
二、例题分析 3
[例一]牛奶模版 4
[例二]树的重建 6
[例三]最优序列 9
三、总结 12
【感谢】 12
【参考文献】 13
【附录】 13
【摘要】
本文就“分”与“合”的思想在信息学中的应用进行讨论与研究。
“分”与“合”思想的精髓在于通过在“分”与“合”之间的转化中找到问题的本质从而解决问题,该思想的应用并非仅限于传统意义上的“分治法”。本文通过分析例题《牛奶模版》、《树的重建》与《最优序列》来介绍“分”与“合”思想在解题中的具体应用。
【关键字】
“分”与“合”、转化、辨证关系
【正文】
一、引言
——“话说天下大势,合久必分,分久必合”,这富有辨证意味的第一句话可以说是《三国演义》的精髓。
浩浩中华几千年的历史,充分说明了“合久必分,分久必合”这一观点的正确性。“合久必分,分久必合”是从低级到高级,螺旋式发展的过程, 纵观天下事,无不是在“分”与“合”之间互相转化下发展的。
“分”与“合”的规律不仅在社会发展上得到应验,在信息学中的许多题目的解题过程中也有着充分的体现。
“分”的思想是将一个难以直接解决的大问题,分成一些规模较小问题,以
问题简述
由于奶牛们的产奶品质波动不定, FJ决定找出奶牛产奶品质波动的规律。FJ用一个由到的整数组成的长度为的序列记录了各天奶牛们的产奶品质,FJ希望从中找出最长的一段模版串,使得该模版串在序列中出现至少次,请输出最长模版串的长度。
(例如2323出现了2次,最长的模版长度为4。)
问题分析
本题是一道与串匹配有关的问题,我们很自然的想到使用解决字符串问题的利器——后缀树,事实上,使用后缀树确实可以在线性时间内解决本题,但后缀树的高编程复杂度使我们很难在限定时间内完成解题任务。那么,是否存在简单而又行之有效的算法呢?
普通枚举法
解决此题最简单的方法莫过于枚举法了,我们可以枚举出原串的所有子串,互相比对并统计出它们各自出现的次数,从中选出出现次数不少于次的最长子串。由于原串的子串数达到的级别,而字符串比较的时间复杂度为因此该枚举法的时间复杂度高达,完全无法在限定时间内出解。
上述枚举法之所以低效,很重要的一个原因是重复比较过多。这时我们又想到了高效的串匹配算法——KMP算法。
在枚举原串的子串后,我们可以使用KMP算法在的时间内算出该串在原串中的出现次数,因而将总算法复杂度降为。
但是,当我们试图使用串匹配算法继续优化算法时间复杂度的时候遇到了重重困难,在多次尝试无果后,不得不回到问题的起点,换一角度思考问题。
枚举法改进
观察普通的枚举法,我们发现其实枚举所有子串的做法存在许多冗余,因为对于任意两个子串,相等的先决条件是它们的长度必须相同,这提示我们可以枚举子串的长度。
而题目中存在着一个很明显的单调性,即在原串中若存在一个长度为的子串出现了至少次,则对于任意长度,必然能找到一个长度为的子串在原串中出现至少次(只需取为的子串即可)。根据此单调性,我们可以二分枚举答案,之后只判断相同长度的子串是否相等,效率大大提升,时间复杂度优化为。
转换枚举方式后,低效的子串判等方法成为了算法新的瓶颈。但我们发现,确定了子串的长度后,符合要求的子串只有个,可以使用hash表来存储各串,并用以判等。
根据题目特点,我们设计如下hash函数:
对于子串,
可以取任意素数,为大素数,表示在hash表中的位置,使用代替的内容(使得冲突时的比较时间复杂度降为)。若二子串的与值分别相同,则认为这两个子串相同(由于设置了两个函数,误判的概率大约仅为,可以忽略)。
由于与只有个元素不同,因此,同理。这样就能在的时间内算出所有长度为的子串所对应的与值,因此在理想情况下本方法的时间复杂度已经优化为了,并且正确率极高,足以通过所有数据。
小结
“分”的思想在很多场合都有应用,在本题的求解过程中,先后尝试了多种方法,最终利用“分”的思想二分答案,巧妙地将限制下的最优化问题转化成限制下的存在性问题,从而得出了一个十分简便而有效的可行算法。
[例二]树的重建
问题简述
给出一棵树的叶子节点数,以及任意两个叶子间的树中距离(不超过),树中任意边边权均为,要求还原原树,对于未知节点可任意标号,若无解输出。
问题分析
本题与树有关,题目给出的条件仅为各叶子间的距离关系,对于树中其他节点没有任何描述,这使得直接构树困难重重。
既然直接考虑原问题过于复杂,就从简单情况入手。
考虑若只有个叶节点,则答案显而易见,即一条链的情况。
若有个叶节点,情况略显复杂,设表示叶节点与叶节点的距离。为了简单起见,不妨指定树的根为。
⒈当时
根据树的
文档评论(0)