算法基本概念.docx
- 文档编号:10158445
- 上传时间:2023-02-08
- 格式:DOCX
- 页数:12
- 大小:30.25KB
算法基本概念.docx
《算法基本概念.docx》由会员分享,可在线阅读,更多相关《算法基本概念.docx(12页珍藏版)》请在冰豆网上搜索。
算法基本概念
《计算机公共基础》课程教案
2011-2012学年第2学期
专业层次本科二年级
教学班次
授课学时30+6(实验)
授课教员签名
教员技术职务
教研室主任签名
信息技术教研室
2011年12月20日
教案首页
第
(1)次课授课时间(90分钟)
教学章节
第1章数据结构与算法第1节算法
学时
2学时
教材
和参考书
二级教程《公共基础知识》(2010版),高等教育出版社,2010
教学目的与要求
目的要求:
1.理解算法的基本概念;
2.理解算法的基本特征;
3.掌握算法的表示方法及组成要素;
4.掌握几种简单的算法及应用。
教学重点:
1.算法的基本特征;
2.几种简单的算法。
教学难点:
几种简单的算法及应用。
教学内容与时间安排
教学内容:
1.1算法
1.1.1算法
1、算法的概念;2、算法的基本特征;3、算法的基本要素;4、算法表示方法。
1.1.2算法举例
1、穷举算法及应用;2、递推算法及应用;
3、递归法及应用;4、减半递推技术及应用;5、回溯法及应用。
1.1.3算法的复杂度
1、算法的时间复杂度;2、算法的空间复杂度;3、算法分析举例。
小结
作业
教学方法:
多媒体教学+启发式教学+案例法讲解
教学手段:
操作演示+精讲多练
授课内容
基本内容
备注
(第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,在数组中的存储形式为:
3
0
2
1
……
首元素3表示长整数是一个3位数,接着是低位到高位依次是0、2、1,表示成整数120。
计算阶乘k!
可采用对已求得的阶乘(k-1)!
连续累加k-1次后求得。
例如,已知4!
=24,计算5!
,可对原来的24累加4次24后得到120。
3、递归法:
递归是设计和描述算法的一种有力的工具,由于它在复杂算法的描述中被经常采用,为此在进一步介绍其他算法设计方法之前先讨论它。
能采用递归描述的算法通常有这样的特征:
为求解规模为N的问题,设法将它分解成规模较小的问题,然后从这些小问题的解方便地构造出大问题的解,并且这些规模较小的问题也能采用同样的分解和综合方法,分解成规模更小的问题,并从这些更小问题的解构造出规模较大问题的解。
特别地,当规模N=1时,能直接得解。
例4:
编写计算斐波那契(Fibonacci)数列的第n项函数fib(n)。
斐波那契数列为:
0、1、1、2、3、……,即:
fib(0)=0;
fib
(1)=1;
fib(n)=fib(n-1)+fib(n-2)(当n>1时)。
(4)减半递推技术:
二分法求方程的解;
(5)回溯法:
迷宫问题。
将问题的候选解按某一顺序逐一枚举和检验,当发现当前的候选解不可能是解时,就放弃它而选择下一候选解;如果当前候选解不满足问题规模要求时,则扩大当前候选解的规模继续试探,直到找出符合所有要求的候选解,该候选解为问题的一个解。
放弃当前候选解,寻找下一个候选解的过程称为回溯。
扩大当前候选解的规模并继续试探的过程称为向前试探。
例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分钟;方案2的if语句执行525次,运行了2秒钟,相差1500倍。
3、算法分析举例
(1)常量阶:
时间复杂度为O
(1)
++x;
s=0;
语句频度为1,时间复杂度为O
(1)。
for(j=1;j<=10000;++j)
{++x;s+=x;}
语句频度为10000,时间复杂度为O
(1)。
(2)对数阶:
时间复杂度为O(logn)
s=0;
for(j=1;j<=n;j*=2)
s++;
语句频度为logn,所以时间复杂度为O(logn)。
(3)线性阶:
时间复杂度为O(n)
S=0;
for(j=1;j<=n;++j)
s++;
语句频度为n,所以时间复杂度为O(n)。
(4)时间复杂度为O(nlogn)
s=0;
for(j=1;j<=n;j*=2)
for(k=1;k<=n;++k)
s++;
时间复杂度为O(nlogn)
(5)平方阶:
时间复杂度为O(n2)
s=0;
for(j=1;j<=n;++j)
for(k=1;k<=n;++k)
s++;
语句频度为n2,所以时间复杂度为O(n2)。
s=0;
for(j=1;j<=n;j++)
for(k=1;k<=j;++k)
s++;
语句频度为n(n+1)/2,所以时间复杂度仍为O(n2)。
(6)立方阶:
时间复杂度为O(n3)
矩阵乘法:
nxn
for(i=0;i for(j=0;j {c[i][j]=0;//n2 for(k=0;k c[i][j]=c[i][j]+a[i][k]*b[k][j];//n3 } 说明: 各语句行后的数字是该语句重复执行的次数; 本算法时间复杂度为O(n3) (7)原地空间复杂度 算法原地(就地)工作: 若所用额外存储空间相对于输入数据量来说是常数,则称此算法为原地(就地)工作。 本节习题: 1、在算法正确前提下,评价一个算法的标准是()。 A、时间复杂度 B、空间复杂度 C、时间复杂度和空间复杂度 D、以上都不对 2、下面程序段的时间复杂度为()。 Forj=1Ton Fork=1Ton x=x+1 s=s+x EndFor EndFor A、O(n)B、O(n2)C、O(log2n)D、O(2n) 教案尾頁 回顾和小结 通过本次的讲解,学员应该掌握了算法的基本概念,基本特征与组成要素,算法的表示方法。 算法是有别于特定程序的,算法是解决一类问题的方法,程序是专门用于解决一个固定问题的。 通过举例认识了几个简单的算法,并进行了简单的应用,可见,学习算法也并不是十分困难的。 算法的复杂度又告诉我们,算法的研究主要是对其进行改进,提高算法的效率,这才是算法学习的根本,但解决这个问题需要一定的数学基础。 复习思考题 或作业题 1、算法的有穷性与程序的死循环有什么区别? 2、算法的确定性有什么具体意义? 3、算法表示方法中N-S盒图与流程图有什么区别? 4、总结归纳一个你日常使用的解决问题的算法(如查找、排序等)? 5、算法的时间复杂度与空间复杂度有没有关系? 它们互相有没有影响? 实施情况及分析
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 算法 基本概念