信息奥赛基础知识.docxVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
信息奥赛基础知识一一常用算法与策略 第一章算法 1.1什么是算法 算法是程序设计的精髓,程序设计的实质就是构造解决问题的算法,将其解释为计算机语言。算法是在有限步骤内求解某一问题所使用的一组定义明确的规则。通俗点说,就是计算机解题的过程。在这个过程中,无论是形成解题思路还是编写程序,都是在实施某种算法。前者是推理实现的算法,后者是操作实现的算法。 一个算法应该具有以下五个重要的特征: 有穷性:一个算法必须保证执行有限步之后结束; 确切性:算法的每一步骤必须有确切的定义;输入:一个算法有0个或多个输入,以刻画运算对象的初始情况;输出:一个算法有一个或多个输出,以反映对输入数据加工后的结果。没有输出的算法是毫无意义的; 可行性:算法原则上能够精确地运行,而且人们用笔和纸做有限次运算后即可完成。 1.2算法的表示方法算法通常有三种表示方法:自然语言法、程序流程图法、程序法。 结构化程序设计三种程序结构的流程图(N-S图)如下: 顺序结构2.选择结构 3.循环结构当型循环直到型循环 例题1:百钱买百鸡问题: 1.3算法分析算法的复杂性算法的复杂性是算法效率的度量,是评价算法优劣的重要依据。一个算法的复杂性的高低体现在运行该算法所需要的计算机资源的多少上面,所需的资源越多,我们就说该算法的复杂性越高;反之,所需的资源越低,则该算法的复杂性越低。 计算机的资源,最重要的是时间和空间(即存储器)资源。因而,算法的复杂性有时间复杂性和空间复杂性之分。 不言而喻,对于任意给定的问题,设计出复杂性尽可能低的算法是我们在设计算法时追求的一个重要目标;另一方面,当给定的问题已有多种算法时,选择其中复杂性最低者,是我们在选用算法适应遵循的一个重要准则。因此,算法的复杂性分析对算法的设计或选用有着重要的指导意义和实用价值。 简言之,在算法学习过程中,我们必须首先学会对算法的分析,以确定或判断算法的优劣。 时间复杂性: 例1:设一程序段如下(为讨论方便,每行前加一行号)fori:=1tondoforj:=1tondox:=x+1 试问在程序运行中各步执行的次数各为多少? 解答: 行号次数(频度)n+1n*(n+1)n*n 可见,这段程序总的执行次数是:f(n)=2m+2n+1。在这里,n可以表示问题的规模,当n趋向无穷大时,如果f(n)的值很小,则算法优。作为初学者,我们可以用f(n)的数量级O来粗略地判断算法的时间复杂性,如上例中的时间复杂性可粗略地表示为T(n)=O(m)。 空间复杂性: 例2:将一一维数组的数据(n个)逆序存放到原数组中,下面是实现该问题的两种算法: 算法1:fori:=1tondob[i]:=a[n-i+1];fori:=1tondoa[i]:=b[i]; 算法2:fori:=1tondiv2dobegint:=a[i];a[i]:=a[n-iT];a[n-iT]:=tend;算法1的时间复杂度为2n,空间复杂度为2n算法2的时间复杂度为3*n/2,空间复杂度为n+1显然算法2比算法1优,这两种算法的空间复杂度可粗略地表示为S(n)=O(n)信息学比赛中,经常是:只要不超过内存,尽可能用空间换时间。 第二章递归 递归是计算机科学的一个重要概念,递归的方法是程序设计中有效的方法,采用递归编写程序能是程序变得简洁和清晰. 2.1递归的概念概念一个过程(或函数)直接或间接调用自己本身,这种过程(或函数)叫递归过程(或函数). 这种方式是直接调用. 这种方式是间接调用. 例1计算n!可用递归公式如下: 1当n=0时fac(n)= fac(n)= n*fac(n-1)当n0时 例2楼梯有n阶台阶,上楼可以一步上1阶,也可以一步上2阶,编一程序计算共有多少种不同的走法. 设n阶台阶的走法数为f(n)显然有f(n)={2n=21n=1f(n-1)+f(n-2)n22.2如何设计递归算法确定递归公式确定边界(终了)条件练习: f(n)={2n=2 1n=1 用递归的方法完成下列问题求数组中的最大数2.1+2+3+...+n求n个整数的积求n个整数的平均值求n个自然数的最大公约数与最小公倍数有一对雌雄兔,每两个月就繁殖雌雄各一对兔子.问n个月后共有多少对兔子? 已知:数列1,1,2,4,7,13,24,44,...求数列的第n项. 2.3典型例题例3梵塔问题 如图:已知有三根针分别用1,2,3表示,在一号针中从小放n个盘子,现要求把所有的盘子从1针全部移到3针,移动规则是:使用2针作为过度针,每次只移动一块盘子,且每根针上不能出现大盘压小盘.找出移动次数最小的方案. 例4快速排序快速排序的思想是:先从数据序列中选一个元素,并将序列中所有比该元素小的元素都放到它的右边或左边,再对左右两边分别用同样的方法处之直到每一个待处理的序列的长度为1,处理结束.

文档评论(0)

fengbaozheng + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档