算法基本概念
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
《计算机公共基础》课程教案2011-2012学年第2学期
专业层次本科二年级
教学班次
授课学时30+6(实验)
授课教员签名
教员技术职务
教研室主任签名
信息技术教研室
2011年12月20日
教案首页第(1)次课授课时间( 90分钟)
授课内容
基本内容备注
(第1课时)
1.1算法
引入
日常工作生活中,如果我们需要解决某个问题,大的如举办
奥运会,小的如最简单的做菜,你要知道做这个菜的完整过程及
程序,才能很好地做好这个菜,计算机要解决问题,也要有相应
的方法和过程。
1.1.1算法的基本概念
算法是解题方案的准确而完整的描述。
注意:算法和程序是有区别的,即程序未必能满足动态有穷。
在本书中,我们只讨论满足动态有穷的程序,因此“算法”和“程
序” 是通用的。
1、算法的基本特征
(1)可行性(effectiveness)。算法中的每一个步骤都是可以
在有限的时间内完成的基本操作,并能得到确定的结果。
(2)确定性(definiteness)。算法中的每一个步骤都应当是确
定的,而不应当是含糊的、模棱两可的。
(3)有穷性(finiteness)。一个算法应包含有限的操作步骤,
而不能是无限的。
(4)输入(input)。有零个或多个输入,所谓输入是指在执行
算法时需要从外界取得必要的信息。一个算法也可以没有输入。
(5)输出(output)。有一个或多个输出,算法的目的是为了求
解,“解”就是输出。没有输出的算法是没有意义的。
2、算法的基本要素
一个算法由两种基本要素组成:算法中对数据的运算和操作
和算法的控制结构。
(1)算法中对数据的运算和操作
①算数运算:加、减、乘、除;
②逻辑运算:与、或、非;
③关系运算:大于、小于、等于、不等于等;
④数据传输:赋值、输入、输出等。
(2)算法的控制结构
算法中各操作之间的执行顺序称为算法的控制结构。
操作的执行顺序是算法的重要组成部分,算法的控制结构给出算法的执行框架,决定算法中各种操作的执行顺序。
1)顺序结构
最基本的控制结构,从算法入口开始到算法出口结束,算法操作顺序执行,具有单入单出性质。
2)选择结构
通过逻辑或关系表达式结果,算法有选择地执行相应的操作,进行条件分支。选择结构也具有单入单出性质,而且是开放型的。
可分为:单选结构、双选结构和多选结构。
3)循环结构
算法中某组操作要求执行多次时采用的结构。具有单入单出性质,但它是封闭型的。
可分为:先判断后执行和先执行后判断。
3、算法表示方法
(1)流程图法;
(2)伪语言法;
(3)N-S盒图法。
1.1.2、算法设计基本方法
1、列举法:穷举搜索法是对可能是解的众多候选解按某种顺序进行逐一枚举和检验,并从众找出那些符合要求的候选解作为问题的解。
例1:百钱买百鸡;
写出使用100元钱购买100只鸡的方案,其中公鸡5元/只,母鸡3元/只,小鸡1元/5只。
例2:将A、B、C、D、E、F这六个变量排成如图所示的三角形,这六个变量分别取[1,6]上的整数,且均不相同。求使三角形三条边上的变量之和相等的全部解。如图就是一个解。
程序引入变量a、b、c、d、e、f,并让它们分别顺序取1至6的证书,在它们互不相同的条件下,测试由它们排成的如图所示的三角形三条边上的变量之和是否相等,如相等即为一种满足要求的排列,把它们输出。当这些变量取尽所有的组合后,程序就可得到全部可能的解。
2、递推法:递推法是利用问题本身所具有的一种递推关系求问题解的一种方法。设要求问题规模为N的解,当N=1时,解或为已知,或能非常方便地得到解。能采用递推法构造算法的问题有重要的递推性质,即当得到问题规模为i-1的解后,由问题的递推性质,能从已求得的规模为1,2,…,i-1的一系列解,构造出问题规模为I的解。这样,程序可从i=0或i=1出发,重复地,由已知至i-1规模的解,通过递推,获得规模为i的解,直至得到规模为N的解。
例3:阶乘计算
问题描述:编写程序,对给定的n(n≦100),计算并输出k 的阶乘k!(k=1,2,…,n)的全部有效数字。
由于要求的整数可能大大超出一般整数的位数,程序用一维数组存储长整数,存储长整数数组的每个元素只存储长整数的一位数字。如有m位成整数N用数组a[ ]存储:
N=a[m]×10m-1+a[m-1]×10m-2+ …+a[2]×101+a[1]×100并用a[0]存储长整数N的位数m,即a[0]=m。按上述约定,数组的每个元素存储k的阶乘k!的一位数字,并从低位到高位依次存于数组的第二个元素、第三个元素……。例如,5!=120,在数组中的存储形式为:
例5:八皇后问题。
1.1.3算法的复杂度
1、算法的时间复杂度
概念:执行算法所需要的计算工作量。
(1)平均性态:就是指用各种特定输入下的基本运算次数的加权平均值来度量算法的工作量。
(2)最坏情况复杂度:指在规模为N时,算法所执行的运算次数的最大次数。
2、算法的空间复杂度
概念:执行这个算法所需要的内存空间。
例6:从“百钱买百鸡”(“一百元钱买一百支笔”)的算法例子说明选择算法的重要性:
方案1:
for( i = 0; i < =100; i++)
for( j = 0; j < =100; j++)
for( k= 0; k< =100; k++)
if(i+j+k==100 &&3*i+2*j+0.5*k==100)
printf(“i=%d,j=%d,k=%d”,i,j,k) 方案2:
for( i = 0; i < =20; i++)
for( j = 0; j < =34-i; j++)
if(3*i+2*j+(100-i-j) *0.5==100)
printf(“i=%d,j=%d,k=%d”,i,j, 100-i-j);
方案1 内层循环超过100万次,在某机器上运行了50分钟;