算法合集之《浅谈类比思想》

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

本资料由-大学生创业|创业|创业网提供资料在线代理|网页代理|代理网页|减肥药排行榜|淘宝最好的减肥药|什么减肥药效果最好|减肥瘦身药|浅谈类比思想长沙市长郡中学周戈林【目录】摘要2关键字2正文2引言2常见的类比模式3具体事物类比抽象模型3相似算法之间的类比6图形类比数式8总结10感谢10参考文献10附录11本资料由-大学生创业|创业|创业网提供资料在线代理|网页代理|代理网页|减肥药排行榜|淘宝最好的减肥药|什么减肥药效果最好|减肥瘦身药|【摘要】信息学是一门变幻莫测的艺术,它包含着海量的知识点。我们不能奢求掌握所有的知识,只能在已有知识的基础上,尽可能的把不熟悉的问题转化为熟悉的问题。类比思想,就是一种非常优秀的转化方法。本文尝试诠释一些常用的类比模式。【关键字】类比思想模型算法理性认识【正文】一、引言:类比是最有创造力的一种思维方法。它关注两个对象在某些方面的相同或相似,从而推测它们在其它方面也可能存在相同或相似之处。举例来说,我们在小学一年级学到正确的握铅笔方法是“笔杆放在拇指、食指和中指的三个指梢之间。食指在前,拇指在左后,中指在右下,食指应较拇指低些,手指尖应距笔尖约3厘米。笔杆与作业本保持六十度的倾斜,掌心虚圆,指关节略弯曲”。学会了握铅笔,那么在三年级也可以用类似的方法使用钢笔书写。概括一下,这次握笔类比的形式为:对象A具有性质P、Q;对象A’具有性质P’(P与P’类似);对象A’可能具有性质Q’(Q与Q’类似)。拿握笔来说,铅笔(对象A)笔杆比较细(性质P),所以我们采用上述“笔杆放在三个指梢之间”的方法握笔(性质Q);而钢笔(对象A’)笔杆也比较细(性质P’),所以我们采用同样的方法握笔(性质Q’)。很幸运,这次类比是正确的,我们成功地学会了写字。但有些时候就没那么幸运了,譬如说,当面对一支毛笔时,以上的握笔方法写出的字就会产生相当的幽默效果。为什么我们的握笔方法面对毛笔失败了呢?这是因为毛笔是软笔,并且笔杆粗细不同,因此类比失败了。正确的握毛笔方法是用拇指和食指捏住笔的上端,用中指和无名指活动笔的下端,小指随无名指自本资料由-大学生创业|创业|创业网提供资料在线代理|网页代理|代理网页|减肥药排行榜|淘宝最好的减肥药|什么减肥药效果最好|减肥瘦身药|然活动。概括这次握笔方法的转换,就是:对象A具有性质P、Q和关系R;对象A’具有性质P’;对象A’具有性质Q’和关系R’。具体到握毛笔这个例子,铅笔(对象A)是笔(性质P),并且是硬笔(关系R),需要用三根手指托笔(性质Q)。而毛笔同样是笔(性质P’),但却是软笔(关系R’),只需要两根手指夹笔(性质Q’)。这种类比形式考虑到了性质之间的关系,因此准确性提高了。总结一下对握笔的研究:第一次握笔类比关键在于铅笔和钢笔恰好都是硬笔,因此其成功具有偶然性,它是基于直观上的感性认识,称之为简单类比;第二次握笔类比注意到铅笔与毛笔的不同点,其成功带有某种必然性,它是基于逻辑上的理性认识,称之为科学类比。在信息学竞赛中需要的类比,往往是科学类比。下文将试图论述一些常见的类比模式:具体事物类比抽象模型;相似算法之间的类比;图形类比数式。二、常见的类比模式:2.1具体事物类比抽象模型:这是一种最常见的类比。现实事物不是严格的数学模型,在研究它们的过程中必须根据需要提炼相应的数学模型,否则便失去了建模的意义。在建模中要联想具体事物的固有属性和抽象模型的独有特点,才能恰如其分地建立模型和解决问题。举例来说:研究地球的公转可以把地球看成质点,这是因为相对于公转半径来说地球半径极其微小,可以忽略。但是研究地球的自转时又不能忽略地球半径,这是因为地球半径比起质点来又远远大得多了。从下面这个例子也可以看到,建模的角度不同,效果便截然不同。例一:山顶问题题目描述奶牛成群、土地众多的FJ有一个地形狭长的农场,农场被分成了n块土地,本资料由-大学生创业|创业|创业网提供资料在线代理|网页代理|代理网页|减肥药排行榜|淘宝最好的减肥药|什么减肥药效果最好|减肥瘦身药|。这些土地位于一条直线上,并从左到右编号为1至n。每块土地的面积都相同,但是高度不一定相同。每块土地都拥有一个海拔高度值,这个值不超过1000000。如果一段相同高度土地的两边都比它低或者是农场的边界,那么这段土地将被称之为“山顶”。FJ希望通过搬走泥土来降低某些土地的海拔高度,使“山顶”的数目不超过k,其中1≤k≤25。在这一前提下,FJ希望搬运的泥土体积最小,也就是所有的土地减少的高度和最小。解法分析题目中要求了一个很奇怪的“削平山顶”的任务。一个或几个“山顶”往往由一个“山脊”支撑。值得注意的是,“山顶”被削平后有可能会使“山脊”变成“山顶”。从解题的一般感觉上看,这似乎是一道动态规划的题目,尝试着用动态规划来解这道题目。根据一般的状态设计方法,我们用f(i,j)表示前i块土地留j个“山顶”的需要搬走泥土的最小体积。但是光用这两个值无法完全描述出当前土地的高度,因此也无法得知它们对以后状态的影响。为了能准确表述土地的高度,我们需要记录一个描述高度的序列集合,但存储这个集合的费用是让人无法忍受的。换一种思维看问题,不妨把整个农场180度翻转,使“山顶”朝下。以下是翻转样例得到的图形:一块土地按照高度被剖分成了最多n个层面,每个层面按照高度被染成了不同的颜色。当然,较高的层面需要较低的层面支撑。而如果一个层面两边的层面都比它低,那么就是“山顶”。把层面看作结点,在相互支撑和被支撑的层面之间连一条边。让人惊讶的是,这是一棵有根树:本资料由-大学生创业|创业|创业网提供资料在线代理|网页代理|代理网页|减肥药排行榜|淘宝最好的减肥药|什么减肥药效果最好|减肥瘦身药|为什么会是一棵有根树呢?这一点很好解释:每个层面都只跟它支撑的层面与支撑它的层面相连。一个层面可以支撑多个层面,但是每个层面都只能被一个层面支撑,这正好与树的定义(每个结点有多个后继,但除根结点以外只有一个前趋)类似。既然农场可以类比成一棵有根树,那么“山顶”在树中又对应着什么呢?显然“山顶”是不能支撑其它层面的,否则其它层面才是“山顶”。由于“山顶”没有“后继”层面,它就对应着树中的叶子结点。而搬走泥土相当于把结点删除,搬走泥土的体积就是删除这个结点的费用。至此已经完全把题目类比转化成一个我们非常熟悉的问题:给定一棵有根树,每个结点有一个权值。删除某些结点,使删除后树的叶子数目不超过K,在这一前提下删除的结点权值和最小。特别的,根结点永远不算叶子。这是一个经典且基础的树形动态规划问题,可以用O(nk2)的算法解决,在此略去。于是问题转化为如何高效、优美地建树。以下介绍一个算法,利用栈在O(n)时间内建树和将树转化为左儿子右兄弟形式,同时求出其拓扑序。栈内每个元素记录着一段高度相同的连续土地,也就是一个层面。从左到右扫描整个农场,每扫描到一块新的土地就分情况处理:1.这块土地的高度大于栈顶层面,直接将其入栈;2.这块土地的高度等于栈顶层面,将栈顶层面土地块数加一;3.这块土地的高度小于栈顶层面,表明已经出现了一个栈顶层面支撑的层面已经扫描完毕,可以导出成为一个新的结点了,遂退栈。当前扫描的土地再与新的栈顶元素比较。同时为了求出结点的权值与结点间的连结关系,还要分配两个额外的域记录层面的高度与支撑的结点。算法的具体实现可以参见源程序。由于每个层面只有当它支撑的层面都被处理后才会被导出,因此顶点标号是满足动态规划计算的拓扑顺序的。而每块土地都最多进栈一次,出栈一次,时间复杂度为O(n)。整个算法的时间复杂度即为O(nk2),对于题目中的数据范围绰绰有余。小结本例尤其体现了处理具体事物时模型选取的重要性。题目给出的n块土地是线性排列的,给人的第一感是建立线性的动态规划模型。但我们经过仔细分析,本资料由-大学生创业|创业|创业网提供资料在线代理|网页代理|代理网页|减肥药排行榜|淘宝最好的减肥药|什么减肥药效果最好|减肥瘦身药|发现线性模型对问题的研究没有很大帮助。与此相反,我们把农场按高度剖分成层面,层面与节点类比,层面的连接关系与有根树的性质类比,关键的“山峰”正好对应了树的叶子。复杂的“移山”就变成了简单的删除节点。2.2相似算法之间的类比:有些算法是相似的:有的在算法思想上相似,有的在算法依据上相似,有的在算法实现上相似。因此我们可以对某些算法进行改造,利用与其它算法的相似性,扩展功能和提高效率。类比思想在算法改造的过程中起到相当大的作用。通过类比,就可以发现算法的相似之处;通过类比,就可以分析相似点的本质;通过类比,就可以对算法进行组合应用。例二:最小最大边问题题意描述有n个城市,p条双向道路把这些城市连接起来,一对城市之间可能有多条道路连接。FJ要找到t条从城市1到城市n的路径,不同的路径不能包含相同的道路。在这一前提条件下,FJ希望所有路径中经过的最长的道路最短。解法分析很明显这是一个关于流的问题。题目给定n个点和p条容量为1的无向边,每条边都拥有一个边权,要求找到一个流量至少为t的流,同时流通过的边权最大的边最小。很容易就能得到如下的朴素算法:二分枚举最长边的长度m,忽略长度超过m的边,求出此时的最大流t’。若t’t,则m应增加;否则应减少,同时用m更新当前最优解。求最大流的费用为O(tp),因此这个算法的时间复杂度为O(tplog2p)。这个算法已经很不错了,但是有没有更好的算法呢?本题是一个要求最小权的流问题,这让人想到了另外一个跟边权有关的流问题——最小费用最大流问题。最小费用最大流问题要求流通过每条边的流量与边权乘积总和最小,本问题要求最大边权最小。再回顾一下两个似乎跟本题无关的问题:单源最短路问题,它要求找到一棵生成树,使源点通过树边到达其它点经过的边权和最小;最小生成树问题,它同样要求找到一棵生成树,使任意点通过树边到达其它点经过的边本资料由-大学生创业|创业|创业网提供资料在线代理|网页代理|代理网页|减肥药排行榜|淘宝最好的减肥药|什么减肥药效果最好|减肥瘦身药|中权最大的最小。两组问题都是“一个要求总和最小,另一个要求最小边最小“这种形式,解决问题的算法也应该有相似的地方。求最小费用最大流的经典算法是连续最短路算法:根据当前流的分布设定费用函数,不断找到费用最小的增广链增广,直到找不到增广链为止。这时我们不禁猜想,如果把求最短路的部分用求最小生成树的算法替代会如何?联合后的算法如下:仍然是不断寻找增广轨增广。寻找增广轨时设立临时距离标号dist[i],表示当前能扩展到i的增广轨中最长边长度的最小值,初始时除源点以外的临时距离标号都为正无穷大。在计算距离标号时,假设dist[u]已经被扩展,正在考察边(u,v):1.若u到v的流量为0且v到u的流量为0,那么dist[v]←min{dist[v],max{dist[u],w(u,v)}};2.若v到u的流量为1,那么dist[v]←min{dist[u],dist[v]};以上两

1 / 16
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功