程序设计基础.pptVIP

  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文档。上传文档
查看更多
程序设计基础

程序设计基础 E-mail:yumihs@126.com 程序设计基础 一、算法与算法的描述 算法的概念 算法的特性 算法的描述 算法的概念 : 为解决一个问题而采取的方法和步骤 。 问题1:有8个小球,其中7个重量相同,仅有一个较重,用天平如何称出那个重的小球。 算法(1): 把8个小球分成四组,依次将每组放在天平上,直到某一组天平不平衡,就可确定重的小球,最多需称4次。 算法(2): ①从8个小球中任取6个小球,将这6个小球每边3个置于天平上; ②若天平平衡,则表明重的小球在剩余的2个小球中,只需将那两个小球放在天平上再称一次就可找到重的那个小球; ③若天平不平衡,则从较重的一边的3个球中任取2个球称量,若平衡,则剩下的那个即为要找的那个小球,若不平衡,则重的那边就是要找的小球。 算法(2)只需2次称量,比算法(1)优越。 算法的特性 ⑴确定性 算法的每一步必须是确切定义的,且无二义性; ⑵有穷性 一个算法必须在执行有穷次运算后结束; ⑶可行性 算法中的每一步骤必须能用可执行指令精确表达,并在有限步骤内完成; ⑷有0个或多个输入; ⑸有输出。 算法的描述 自然语言 流程图 算法的评价 算法执行时间需通过依据该算法编制的程序在计算机上运行时所消耗的时间来度量。而度量一个程序的执行时间通常有两种方法: (1)事后统计法。因为很多计算机内部都有计时功能,有的甚至可精确到毫秒级,不同算法的程序可通过一组或若干组相同的统计数据以分辨优劣。但这种方法有两个缺陷:一是必须先运行依据算法编制的程序;二是所得时间的统计依赖于计算机的硬件、软件等环境因素,有时容易掩盖算法本身的优劣。因此人们通常采用另一种事前分析估算的方法。 (2)事前分析估算法。一个用高级程序语言编写的程序在计算机上运行时所消耗的时间取决于下列因素: a.依据的算法选用何种策略; b.问题的规模。例如求100以内还是1000以内的素数; c.书写程序的语言。对于同一个算法,实现语言的级别越高,执行效率就越低; d.编译程序所产生的机器代码的质量; e.机器执行指令的速度。 显然,同一个算法用不同的语言实现,或者用不同的编译程序进行编译,或者在不同的计算机上运行时,效率均不相同。这表明使用绝对的时间单位衡量算法的效率是不合适的。 问题中的n表示了问题的大小,次数n是问题的规模。 算法①: y:=a[0]; for k:=1 to n do begin t:=a[k]; for i:=1 to k do t:=t*x; {计算ak·xk} y:=y+t ;end; writeln(y=,y); 可见,内循环计算ak·xk用了k次乘法,计算y共用乘法的次数为1+2+3+…+n,即n(n+1)/2,时间复杂度为n2。 算法②:从算法①中可以发现x,x2,…xn不必每次都用乘法实现,xk+1=xk?x,增加数组b[0]至b[n],用于存放x0,x1,x2,…xn,则该算法的空间复杂度为2n。 b[0]:=1; for k:=1 to n do b[k]:=b[k-1]*x; y:=a[0]; for k:=1 to n do y:=y+a[k]*b[k]; writeln(y=,y); 此算法中,时间复杂度和空间复杂度均为2n。 算法③:将y的计算公式改写为 y=(…((an*x+an-1)*x+an-2)…+a1)*x+a0 如y=7x5+4x4-8x3+6x+2,可改写为 y=((((7x+4)x-8)x+0)X+6)x+2,其中a5=7,a4=4,a3=-8,a2=0,a1=6, a0=2 y:=a[n]; for i:=n-1 to 0 do y:=y*x+a[i]; writeln(y=,y); 算法的时间复杂度为n,空间复杂度也为n,是三个算法中效果最好的。 算法常见的量级估计 O(1)  表示问题规模变化时,复杂性变化不大,这类算法是十分优秀的。 O(n) 算法复杂性是问题规模的线性函数,这类算法是很好的。 O(nlog2n) 虽比O(n)差,但仍属不错的算法。 O(nk) 应尽可能改进,使k值愈小愈好。 O(2n) 当n较大时,复杂性会变得很大。 1971年,瑞士的Niklaus Wirth 教授正式发表了一种名为Pascal的程序设计语言的报告。Pascal首次将人们带进结构化程序设计之中。Pascal问世以来,先后产生了适合不同机型的各种版本,其中Turbo Pascal 6.0是国际奥林匹克信息学(计算机)竞赛指定使用的语

文档评论(0)

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

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

1亿VIP精品文档

相关文档