信息学奥赛算法及基础知识复习材料两篇doc.docx
- 文档编号:27361568
- 上传时间:2023-06-29
- 格式:DOCX
- 页数:8
- 大小:21.21KB
信息学奥赛算法及基础知识复习材料两篇doc.docx
《信息学奥赛算法及基础知识复习材料两篇doc.docx》由会员分享,可在线阅读,更多相关《信息学奥赛算法及基础知识复习材料两篇doc.docx(8页珍藏版)》请在冰豆网上搜索。
信息学奥赛算法及基础知识复习材料两篇doc
信息学奥赛算法及基础知识复习材料两篇
第1条
信息学中奥赛罗算法的基本章节学过编程的人对算法这个词并不陌生。
从广义上说,算法是指用来解决问题的方法和步骤。
从程序设计的角度来看,算法是指使用编程语言的各种语句来解决特定问题而形成的各种逻辑组合。
在编程的过程中,我们在实现某些算法,所以编程的本质就是用计算机语言来构造算法来解决问题。
算法是编程的灵魂。
一个好的程序必须有一个好的算法。
没有有效算法的程序就像没有灵魂的躯体。
该算法有五个特点
具有1、有限性的算法应该包括有限的操作步骤。
该操作将在执行完有限操作后终止,并且不能是死循环。
2、精确度算法的每一步都必须有一个明确的定义,当读者理解它时不会产生歧义。
此外,在任何条件下,该算法只有一条执行路径,并且对于相同的输入只能获得相同的输出。
例如,在算法中不允许诸如“计算8/0”或“将7或8加到x上”的操作,因为前者的计算结果不清楚,而后者不知道应该进行两种可能的操作中的哪一种。
3、输入一个算法有0个或更多的输入来描述操作对象的初始条件。
所谓的0输入是指算法本身定义的初始条件。
如果找到五个数字中最小的一个,则有五个输入。
4、输出算法有一个或多个输出来反映输入数据的处理结果,这是算法设计的目的。
它们是与输入有特定关系的量。
如上所述,在5个数字中找出最小的数字,它的输出是最小的数字。
如果一个程序没有输出,这个程序就没有意义。
5、可行性算法中的每个操作都应该是可行的。
原则上,该算法可以精确运行,并且可以在用笔和纸进行有限次数的操作后完成。
如何评估一个算法主要是从两个方面:
一是运行算法所花费的时间;我们用时间复杂度来衡量,例如,在以下三个程序中,
(1)x1
(2)forI1tondoxx1(3)forI1tondoforJ1tondoxx1语句xx1包含基本运算“x+1”分别出现1次,n和n2,那么这三个程序段的时间复杂度分别为O
(1),O(n),O(n2),分别称为常数阶、线性阶和平方阶。
在算法时间复杂度的表示中,也可以有对数有序的ogn、指数有序的O2n等。
当n较大时,不同数量级的时间复杂度为O11。
要求在三个实根和同一行的根之间从小到大留一个空格,并精确到小数点后两位。
注意等式fx0,如果有2个数字x1和x2,以及x1ar
(2)其中,例如n7、k3,以下三个子方法被认为是相同的。
1,1,5;1,5,1;5,1,1;询问有多少种不同的方法。
输入n,k6nk。
writelnt。
End.回溯法是通过尝试和纠正错误来找到答案。
这是一种通用的解决问题的方法。
在NOIP,许多涉及搜索问题的问题可以用回溯法解决。
信息学中的基本算法奥赛罗递归算法递归算法的定义如果一个对象的描述包括它自己,我们称之为对象递归。
这种用递归描述的算法称为递归算法。
让我们来看看一个著名的故事。
从前,山上有一座山和一座庙。
寺庙里的一个老和尚正在给一个小和尚讲故事。
他说山上有一座山和一座庙。
寺庙里的一个老和尚正在给一个小和尚讲故事。
他说,上述故事本身是递归的,并描述了讲述故事的过程;-带有递归算法的故事。
故事的结尾从前,有一座山和一座庙,一个老和尚在里面给一个小和尚讲故事。
和尚讲故事;
endend从上面的递归例子中,不难看出递归算法有两个必要条件
(1)必须有一个递归终止条件;
(2)过程的描述包括其本身;
在设计递归算法时,如何将问题转化为递归是初学者的一个难题。
让我们分析一下汉诺塔问题,看看如何用递归算法来解决这个问题。
递归算法应用于实例1中的汉诺塔问题。
如下图所示,有三列:
a、b、c。
a柱上从小到大堆放着n块板。
现在,在b柱的帮助下,将所有板从a柱移至c柱。
移动时有以下要求:
(1)一次只能移动一个板;
(2)不允许将大盘放在小盘上面;
(3)板只能放置在三根柱子上;
算法分析当板块越多,问题就越复杂,所以我们首先分析简单的情况。
如果只有一个板,我们只需要一步将它从a柱直接移动到C柱。
如果是两块板,则需要移动3个步骤
(1)将A柱上的小板移动到B柱上;
(2)将a柱上的大板移到C柱上;
(3)将B柱上的大板移动到C柱上;
如果N相对较大,则需要许多步骤才能完成。
我们首先考虑能否将复杂的移动过程转化为简单的移动过程。
如果我们想将a柱上最大的板移动到C柱上,我们必须首先将上部N-1板从a柱移动到B柱上,以便临时存放。
根据这一思想,我们可以将N块板的移动过程分为三个步骤:
(1)将A柱上的N-1块板移动到B柱上;
(2)将a柱上的剩余板移动到C柱上;
(3)将b柱上的N-1板移至c柱;
根据相同的方法,N-1个板的移动过程可以分为三个步骤,从而将移动过程转换成递归过程,直到只剩下一个板,根据移动一个板的方法移动,并结束递归。
递归过程程序a,b,c整数。
;{将n块板从A列移至C列,B列作为转移柱}beginifn1thenwirita,’-’,C{将板直接从A移至C}elsebeginHanoiN-1,A,C,B;a、c、b;{使用列c作为转移列,将N-1板从列a移至列b}写a、“-”、c;{将剩余的板从a移动到c}hanoin-1,b,a,c;{将N-1板从B柱移动到C柱,A柱作为转换柱}端;结束;从上面的例子中,我们可以看到,在使用递归算法时,我们应该首先找出简单条件下的解,然后找出如何将复杂的情况简化为更简单的情况。
《信息学奥赛罗》中某些问题的结构或处理的数据是递归定义的。
这些问题非常适合用递归算法来解决。
对于这样的问题,我们把它们分解成几个具有相同性质的子问题。
如果子问题解决了,原来的问题也就解决了。
例2第一级的NOIP20XXpj和A的值是(4,4),这意味着坐标(4,4)可以从两个点到达。
两点(2,3)、(3,2)可以从(1,1)得到,所以A可以存储两点中的任何一点。
递归后,如果一个值为0,0表示没有路径,否则一个值就是马下一步递归输出路径的坐标。
-1,-14,44,42,3任务1源程序常量constdxarrayofmapbeginreadn,m;fillchara,sizeofa,0;a[n,m].x-1;a[n,m].y-1;{标记为end}fordonto2do{backward}foj1tomidifa[I,j].x0然后用于k1至4dobegina[i-dx[k],j-dy[k]].Xi;a[i-dx[k],j-dy[k]].yj;结束;IFA.x0Thenwritelnoelsbein{存在路径}i1J1;写,I,,j,;而[i,j].x-1;ia[i,j].x;ja[k,j].y;写-,I,,,j,;结束;结束;End.对于任务2,也可以使用递归方法。
阵列A[i,j]用于存储从起始点x1,y1到(I,j)的路径总数。
递归以同样的方式从左到右进行,直到(x2,y2)。
[x2,y2]是期望的解决方案。
源程序(略)在上面的例子中,递归过程中的某个状态只与前一个状态相关,递归关系并不复杂。
如果递归中的某个状态与以前的所有状态都相关,那么就不容易找到递归关系,这就要求我们分析和总结实际问题,寻找突破口,总结递归关系。
我们可以按照以下四个步骤进行分析:
(1)仔细观察;
(2)丰富的联想;
(3)坚持尝试;
(4)总结递归关系。
让我们看看另一个更复杂的例子。
示例2、堆栈(noip20XXpj)本主题的主要思想是在通过堆栈后找到n行的总数。
(1≤n≤18)例如,输入3输出5算法分析首先模拟入栈、出栈操作,看是否能找到规则。
我们使用fn来表示堆栈操作后排列的n个数字的总数。
当n很小时,f11可以很容易地模拟。
f22F35,通过观察,我们看不出它们之间的复发关系。
我们将再次分析N4的情况,假设进入堆栈前的排列是“4321”。
我们将根据离开堆栈后第一个数字“4”的位置来讨论这种情况。
(1)如果先输出“4”,则与N3完全相同,总数为F3;
(2)如果“4”是第二个输出,它只能是“4”之前的“1”和“4”之后的“23”。
此时可分别视为N1和N2两种情况,排列号分别为f1和f2,所以此时的总数为f1*f2(3)如果“4”是第三个输出,“4”的前两个数字是“12”,最后一个数字是“3”,排列的总数是f2*f1(4)如果第四个输出“4”与情况
(1)相同,则总数为F3;因此,有F4F3f1*F2F2*f1F3;如果零的数目通过堆栈,排列的总数是f01;
上述公式可改为f4f0*f3f1*f2f2*f1f3*f0。
经过进一步推导,不难推导出递推公式fnf0*fn-1f1*fn-2fn-1*F0;即fn101*niinfifn1初始值f01有了上述递推公式,用递推方法编写程序就很容易了。
瓦拉雷·[018]伦敦;n,I,jintegerbeginreadlnnfillchara,sizeofa,0;a[0]1;对于1东多弗罗里0托伊-1多阿[1]阿[1]阿[1]*阿[1];[·n];end.递归算法的主要优点是结构简单,易于实现。
难点在于从问题的分析中找到解决问题的递推公式。
对于以上两个例子,如果在竞争中找不到递推公式,也可以用回溯法求解。
算法在信息学中的应用奥赛罗分治算法的基本思想是将一个n大小的问题分成k个较小的子问题,这些子问题相互独立,并且具有与原问题相同的性质。
通过寻找子问题的解,可以得到原问题的解。
分治法的一般步骤如下:
(1)分解,将待解决的问题分成几个较小的类似问题;
(2)当子问题划分得足够小时,用更简单的方法解决;
(3)合并:
根据原问题的要求,逐层合并子问题的解,形成原问题的解。
分治法的应用
1、比赛安排noip1996有2nn张牌从②中取出并放入①(10101010)。
[输入]键盘输入文件名。
文件格式N(N堆卡片,1ba,将a放在b前面,否则将a放在b后面
字符串的源程序瓦尔萨尔雷[120];tstringI,j,k,nlongintbeginreadlnnfori1tondobeginreadk[一世;结束;国际单项体育联合会[国际单项体育联合会[分会]2,4,4。
如果没有路径,则输出“否”算法分析。
我们以一个44棋盘为例进行分析。
我们使用树形结构来表示所有的走马过程(如下图所示)。
找到从起点到终点的路径实际上是先从根节点开始深入搜索树。
马从(1,1)开始,根据深度优先搜索方法前进一步到(2,3),以判断它是否已经到达终点。
如果没有,它会继续前进,然后再前进一步到达(4,4)。
然后它判断是否已经到达终点。
如果有,则退出,搜索过程结束。
为了减少搜索次数,在走马的过程中,判断下一步是否在棋盘上,如果不是,选择另一条路径再次行走。
程序如下:
整数2,2,1,1的常数[14];1,-1,2,-2的[;typemaprecordx,yinteger结束;vari,n,minteger[050]ofmap;proceduredfsiintegervarjinteger[I-1].xdx[j]0anda[I-1].xdx[j]0anda[I-1].ydy[j],a[j].x,,a[j].y;停止;{输出结果和退出程序}结束;dfsi1{搜索下一个}a[I].x0;a[I].y0;{push}结束。
结束;begina[1].x1;a[1].y1;readlnn,m;dfs2writelnno。
End.从上面的例子中,我们可以看到深度优先搜索算法有两个特点
1、生成的节点按深度排序。
具有大深度的节点首先被扩展,即它们的子节点首先被生成。
深度为2、的节点生成较晚,但它们先扩展,即“生成较晚,先扩展”,这与堆栈的工作原理相同。
因此,堆栈被用作算法的主要数据结构来存储生成的节点。
对于不同的问题,深度优先搜索算法基本相同,但具体的处理方法和编程技巧不同,甚至有很大差异。
让我们看看另一个例子。
第二个选择数(保存名称nop20xxPj)[问题描述]被称为n个整数x1、x2、xn和一个整数kk 一系列的和可以通过将n个整数中的任意k个整数相加而得到。 例如,当n4、k=3和4个整数分别为3、7、12和19时,所有组合及其总和为3+7+12223+7+19=297+12+19=383+12+19=34。 现在,你需要计算有多少种和是质数。 例如,在上面的例子中,只有一个素数的和3+7+19=29。 [输入]键盘输入,格式为n,k1thenincans(如果是质数,总数加1}结束;proceduredfsi,mbyte。 {搜索依赖项d;beginreadlnn,k;对于[一世];ans0s0;dfs1,1;writelnansEnd.从以上两个例子中,我们可以看到使用递归实现深度优先搜索比使用非递归更方便。 在使用深度搜索方法解决问题时,搜索效率不高,因此要注意算法的优化,尽可能缩小搜索范围,提高程序速度。 另一种搜索方法,广度优先搜索,将在下一篇文章中继续介绍。 算法在信息学中的应用奥赛罗(搜索方法2)在深度优先搜索算法中,深度较大的节点首先被扩展。 如果将其改为深度较小的节点并先扩展,则是广度优先的搜索方法。 广度优先搜索的基本算法程序;初始化;建立队列数据;设置队列头指针关闭0;队列尾部指针打开1;Repeatclosed递增1,closed指示的节点被取出进行扩展。 对于i1tordobeginif子节点,如果满足条件,则beginopen增加1,新节点存储在数据库队列的末尾; 如果新节点与原始节点有重复,则在节点open减1处删除它。 如果新节点是目标,则输出并退出;结束{if};结束{for};untilclosedopen{queue为空}使用广度优先搜索时,最靠近根节点的节点会先扩展,因此广度优先搜索方法更适合于寻找步骤最少的解决方案。 因为深度优先使用标志方法,存储空间大大减少,而广度优先需要保留所有搜索到的节点。 随着搜索程度的加深,所需的存储空间呈指数级增长。 因为
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 信息学 算法 基础知识 复习 材料 doc