第1章 算法分析的基本概念和方法

合集下载

算法基础(详细全面)

算法基础(详细全面)
第1章 算法基础
1.1 算法 1.2 算法分析 1.3 算法的运行时间
1.1.1 冒泡排序
1.1 算 法
冒泡排序(bubble sort)属于基于交换思想的排序方法。它将 相邻的两个元素加以比较,若左边元素值大于右边元素值,则 将这两个元素交换;若左边元素值小于等于右边元素值,则这 两个元素位置不变。右边元素继续和下一个元素进行比较,重 复这个过程,直到比较到最后一个元素为止。
3
do if A[j] < A[j - 1
4
then exchange A[j] A[j - 1
图1-1说明了输入实例为A = 〈5, 2, 4, 6, 1, 3〉时, 算法BUBBLE SORT的工作过程。对于外层for循环的每一次迭 代,则在A[i]位置产生当前元素比较范围A[i..n]内的一个 最小值。下标i从数组第一个元素开始, 从左向右直至数组中最 后一个元素。深色阴影部分表示数组元素A[1..i]构成已排好 的序列,浅色阴影部分表示外层循环开始时的下标i。数组元素 A[i +1..n]表示当前正在处理的序列。
下面, 我们考察这些性质是如何对冒泡排序成立的。 首先 证明内层for循环的不变式。
· 循环不变式:A[j]是A[j..length[A]]中的最小元素。
· 初始: 在内循环第一次开始迭代之前,j =length[A], 因此,子数组A[length[A]..length[A]] 中只包含一个元 素, 也即子数组中的最小元素, 此时, 循环不变式成立。
(9) “and”和“or”是布尔运算符。当对表达式“x and y”
求值时,首先计算x的值,
FALSE,则整个表达式
的值为FALSE,我们也无需计算y的值;如果x的值为TRUE,

算法设计与分析课程教学大纲

算法设计与分析课程教学大纲

算法设计与分析课程教学大纲【适用专业】计算机科学与技术【课时】理论课时:32【学分】 2【课程性质、目标和要求】《算法设计与分析》是计算机科学与技术专业的专业课。

无论是计算科学还是计算实践,算法都在其中扮演着重要角色。

本课程的教学目的是讲授在计算机应用中常常遇到的实际问题的解法,讲授设计和分析各种算法的基本原理、方法和技术,培养学生对算法复杂性进行正确分析的能力。

课程基本要求是⑴掌握算法分析的基本概念和理论。

⑵掌握算法设计技术和分析算法以及算法复杂性。

【教学时间安排】本课程计 2 学分,理论课时32, 学时分配如下:【教学内容要点】第一章算法引论一、学习目的要求1.了解算法的计算复杂性分析方法2.理解算法分析的基本理论3.掌握算法分析的基本概念二、主要教学内容1. 算法的基本概念2. 表达算法的抽象机制3. 采用Java语言与自然语言相结合的方式描述算法的方法4. 算法的计算复杂性分析方法第二章递归与分治策略一、学习目的要求1.理解典型范例中递归与分治策略应用技巧2.掌握递归与分治策略3.掌握数学归纳法证明算法正确性方法二、主要教学内容1. 递归的概念2. 分治法的基本思想3. 二分搜索技术4. 大整数的乘法5. Strassen阵乘法6. 棋盘覆盖7. 合并排序8. 快速排序9. 线性时间选择10. 最接近点对问题11. 循环赛日程表第三章动态规划一、学习目的要求1.理解典型范例中动态规划算法的设计思想2.掌握动态规划算法的基本要求以及算法的设计要点二、主要教学内容1. 矩阵连乘问题2. 动态规划算法的基本要素3. 最长公共子序列4. 最大子段和5. 凸多边形最优三角剖分6. 多边形游戏7. 图像压缩8. 电路布线9. 流水作业调度10. 0—l背包问题11. 最优二叉搜索树12. 动态规划加速原理三、课堂讨论选题1. 最长公共子序列2. 0—l背包问题第四章贪心算法一、学习目的要求1.了解贪心算法的理论基础及基本要素2. 理解典型范例中贪心算法的设计思想3. 掌握贪心算法的设计要点二、主要教学内容1. 活动安排问题2. 贪心算法的基本要素3. 最优装载4. 哈夫曼编码5. 单源最短路径6. 最小生成树7. 多机调度问题8. 贪心算法的理论基础三、课堂讨论选题1. 最优装载2. 单源最短路径第五章回溯法一、学习目的要求1.理解回溯法的效率分析方法2.掌握回溯法的算法框架和应用技巧二、主要教学内容1. 回溯法的算法框架2. 装载问题3. 批处理作业调度4. 符号三角形问题5. n后问题6. 0—l背包问题7. 最大团问题8. 图的m着色问题9. 旅行售货员问题10. 圆排列问题11. 电路板排列问题12. 连续邮资问题13. 回溯法的效率分三、课堂讨论选题1. 0—l背包问题2. 图的m着色问题第六章分支限界法一、学习目的要求1.理解分支限界法的基本思想2.掌握典型范例中分支限界法的应用技巧二、主要教学内容1. 分支限界法的基本思想2. 单源最短路径问题3. 装载问题4. 布线问题5. 0-1背包问题6. 最大团问题7. 旅行售货员问题8. 电路板排列问题9. 批处理作业调度三、课堂讨论选题1. 0-1背包问题2. 批处理作业调度第七章概率算法一、学习目的要求1.理解概率算法的基本思想2.掌握典型范例中概率算法的应用技巧二、主要教学内容1. 随机数2. 数值概率算法3. 舍伍德算法4. 拉斯维加斯算法5. 蒙特卡罗算法第八章 NP完全性理论一、学习目的要求1.了解P类与NP类问题2.了解典型的NP完全问题二、主要教学内容1. 计算模型2. P类与NP类问题3. NP完全问题4. 一些典型的NP完全问题第九章近似算法一、学习目的要求1.掌握近似算法的基本思想2.掌握常用近似算法的应用二、主要教学内容1. 近似算法的性能2. 顶点覆盖问题的近似算法3. 旅行售货员问题近似算法4. 集合覆盖问题的近似算法5. 子集和问题的近似算法第十章算法优化策略一、学习目的要求1.掌握算法优化策略2.掌握算法优化的基本方法二、主要教学内容1. 算法优化策略的比较与选择2. 动态规划加速原理3. 问题的算法特征4. 优化数据结构5. 优化搜索策略【教学(实验)内容要点】算法设计与分析实验是算法设计与分析课的一个实践性教学环节。

计算机算法设计与分析第1章算法概述

计算机算法设计与分析第1章算法概述
课程安排

理论课:1~10周,40学时 周二(5-6)、周五(1-2)
上机: 18学时



期末考试: 闭卷笔试,第 11周
上课点名三次不到者取消考试资格; 迟到或作业缺交,一次扣10分(平时成绩)。
1
教学目的和要求
本课程是计算机类专业的专业基础课程; 通过课程学习和上机实践,对计算机常用算 法有一个较全面的了解,掌握通用算法的一 般设计方法; 学会对算法的时间、空间复杂度分析,掌握 提高算法效率的方法和途径。
24
三、算法复杂性分析

本课程主要对算法的时间复杂性进行分析。
关于算法的复杂性,有两个问题要弄清楚:
(1)用怎样的一个量(指标)来表达一个算法的
复杂性;

(2)对于一个算法,怎样具体计算它的复杂性。
25
1、算法的三种时间复杂性

算法的最坏、最好和平均时间复杂性 (1)最坏情况下的时间复杂性 Tmax(n) = max{ T(I) | size(I)=n } (2)最好情况下的时间复杂性
8
图1.1 算法的概念图
(一)算法的性质

1、算法具有某些特性,如下几条:
(1)输入:有零个或多个外部提供的量作为算
法的输入。

(2)输出:算法产生至少一个量作为输出。这 些输出是和输入有某种特定关系的量。
9
(一)算法的性质

(3)确定性:组成算法的每条指令是清晰,无
歧义的。

(4)有限性(有穷性):算法中每条指令的执

29
2、算法的时间复杂性计算
int search(int A[ ], int m, int c) { int i=1; while( A[i]<c && i<m ) i=i+1; if (A[i]==c) return i; else return 0; }

算法分析的基本概念和方法

算法分析的基本概念和方法

i 1
i 1
i 1
❖ 在最好情况下,ti=1, for 1 i <n;
Tmin(n) c1n c2 (n 1) c3(n 1) c4 (n 1) c7 (n 1)
(c1 c2 c3 c4 c7 )n (c2 c3 c4 c7 ) O(n)
❖ 在最坏情况下,ti i+1, for 1 i <n;
1.1.算法及其特性
❖ 一、 算法(algorithm)
算法就是一组有穷的规则,它们规定了解决某 一特定类型问题的一系列运算。
❖ 二、算法的五个特性
① 确定性 ② 能行性 ③ 有穷性 ④ 输入 ⑤ 输出
1.1.算法及其特性
三、衡量算法性能的标准
衡量算法性能一般有下面几个标准: 确定性 易读性 健壮性 算法的时间和空间性能:高效率和低存储空间
n i1
Байду номын сангаас
2
1.4. 复杂度的有关概念
二、举例
[例2] 直接插入排序算法1.5。
以元素的比较作为基本操作。 最好情况下的时间复杂度: (n) 最坏情况下的时间复杂度: (n2) 在等概率前提下,平均情况下的时间复杂度:(n2 )
算法分析的基本法则
❖ 非递归算法:
(1)for / while 循环 循环体内计算时间*循环次数; (2)嵌套循环 循环体内计算时间*所有循环次数; (3)顺序语句 各语句计算时间相加; (4)if-else语句 if语句计算时间和else语句计算时间的较大者。
1.3. 分析复杂度的基本步骤
二、表示出在算法运行期间基本运算执行的总频数
同一个问题对不同的输入,基本运算的次数亦可能不同。 因此,我们引进问题大小(即规模,size)的概念。例如, 在一个姓名表中寻找给定的Z的问题,问题的大小可用表中 姓名的数目表示。对于两个实数矩阵相乘的问题,其大小可 用矩阵的阶来表示。而对于遍历一棵二叉树的问题,其大小 是用树中结点数来表示等等。这样,一个算法的基本运算的 次数就可用问题的大小n的函数f(n)来表示。

算法设计与分析(第2版) 郑宗汉 第1章-1

算法设计与分析(第2版) 郑宗汉 第1章-1

8
Байду номын сангаас
学习要求
深刻理解每一类算法的思想及其实现
能熟练运用所学知识解决实际问题
培养提高计算思维能力
9
考核方式
Homework and Reading: 20%
Final Exam (Written Test): 80%
10
第1章 算法的基本概念
1.1 引言
1.1.1 算法的定义和特性
c %3 0
(1.1.3)
16
1.1.2 算法的设计和复杂性分析
百鸡问题的穷举法
输入:所购买的3种鸡的总数目n 输出:满足问题的解的数目k,公鸡,母鸡,小鸡的只数g[],m[],s[]
1. void chicken_question(int n, int &k, int g[], int m[], int s[]) 2. { 3. int a,b,c; 分析发现:只能买到n/5 4. k = 0; 只公鸡,n/3只母鸡,将 5. for (a = 0; a <= n; a++) { 算法进行改进。 6. for ( b = 0; b <= n; b++) { 7. for (c = 0; c <= n; c++) { 8. if ((a + b + c == n) && (5 * a + 3 * b + c / 3 == n) && (c%3 == 0)) { 9. g[k] = a; 10. m[k] = b; 11. s[k] = c; 12. k++; 13. } 14. } 15. } 16. } 17. }

算法设计与分析(第2版)

算法设计与分析(第2版)
该教材在编写过程中参考了很多同行的教材和络博客,特别是“牛客”中企业面试、笔试题和资源,河南工 程学院张天伍老师和使用该教材第1版的多位老师指正多处问题和错误。
出版工作
2018年8月1日,该教材由清华大学出版社出版。
内容简介
内容简介
全书由12章构成,各章的内容如下。
第1章概论:介绍算法的概念、算法分析方法和STL在算法设计中的应用。
教材目录
教材目录
(注:目录排版顺序为从左列至右列 )
教学资源
教学资源
该教材配有配套教材——《算法设计与分析(第2版)学习与实验指导》,该配套教材涵盖所有练习题、上 机实验题和在线编程题的参考答案。
该教材每个知识点都配套了视频讲解,提供PPT课件、源码、答案、教学大纲、题库、书中全部源程序代码 (在VC++6.0中调试通过)等教学资源。
算法设计与分析(第2版)
20xx年清华大学出版社出版的图书
01 成书过程
03 教材目录源 06 作者简介
基本信息
《算法设计与分析(第2版)》是由李春葆主编,2018年清华大学出版社出版的高等学校数据结构课程系列 教材。该教材适合作为高等院校“算法设计与分析”课程的教材,也可供ACM和各类程序设计竞赛者参考。
第5章回溯法:介绍解空间概念和回溯法算法框架,讨论采用回溯法求解0/1背包问题、装载问题、子集和问 题、n皇后问题、图的m着色问题、任务分配问题、活动安排问题和流水作业调度问题的典型算法。
第6章分枝限界法:介绍分枝限界法的特点和算法框架、队列式分枝限界法和优先队列式分枝限界法,讨论 采用分枝限界法求解0/1背包问题、图的单源最短路径、任务分配问题和流水作业调度问题的典型算法。
该教材介绍了各种常用的算法设计策略,包括递归、分治法、蛮力法、回溯法、分枝限界法、贪心法、动态 规划、概率算法和近似算法等,并讨论了各种图算法和计算几何设计算法。书中配有图表、练习题、上机实验题 和在线编程题。

算法设计与分析基础

算法设计与分析基础

2023/12/21
20
LingJie/GDUT
1.2.6 详细表述该算法的方法
• 可以用到的工具有自然语言(nature
language)、伪代码(pseudocode)以及程序 流程图(flow chart)等。
• 当对一个问题有了概要的理解后,下面的工作
就是把这个问题的想法进行细化。所谓的细化 就是把它们表示成算法的步骤。
令执行顺序以及同步等问题。并行算法的设计 有相应的理论,这里仅考虑串行算法。
2023/12/21
17
LingJie/GDUT
1.2.3 选择精确或者近似的算法
• 解决问题下一步要考虑的是使用精确的还是近
似的算法。并不是每一个可解的问题都有精确 的算法,例如求一个数的平方根,求非线性方 程的解等。有时候一个问题有精确的解法但是 算法的执行效率很差,例如旅行家问题。因此 如果待处理的问题涉及到上述那些方面,则要 考虑是选择精确的还是近似的算法。
2023/12/21
10
LingJie/GDUT
-- 2* 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
-- 2 3*
5
7
9
11
13
15
17
19
21
23
25
-- 2 3
5*
7
11
13
17
19
23
25
-- 2 3
5
7
11
13
第一步:找出m的所有质因数。 第二步:找出n的所有质因数。 第三步:从第一步求得的m的质因数分解式和第二步求得的n
的质因数分解式中,找出所有公因数。 第四步:将第三步找到的公因数相乘,结果为所求的

大学_计算机算法设计与分析第4版(王晓东著)课后答案下载

大学_计算机算法设计与分析第4版(王晓东著)课后答案下载

计算机算法设计与分析第4版(王晓东著)课后答
案下载
计算机算法设计与分析第4版内容简介
第1章算法概述
1.1 算法与程序
1.2 算法复杂性分析
1.3 NP完全性理论
算法分析题1
算法实现题1
第2章递归与分治策略
2.1 递归的概念
2.2 分治法的基本思想
2.3 二分搜索技术
2.4 大整数的乘法
2.5 Strassen矩阵乘法
2.6 棋盘覆盖
2.7 合并排序
2.8 快速排序
2.9 线性时间选择
2.10 最接近点对问题
第3章动态规划
第4章贪心算法
第5章回溯法
第6章分支限界法
第7章随机化算法
第8章线性规划与网络流
附录A C++概要
参考文献
计算机算法设计与分析第4版目录
本书是普通高等教育“十一五”__规划教材和国家精品课程教材。

全书以算法设计策略为知识单元,系统介绍计算机算法的设计方法与分析技巧。

主要内容包括:算法概述、递归与分治策略、动态规划、贪心算法、回溯法、分支限界法、__化算法、线性规划与网络流等。

书中既涉及经典与实用算法及实例分析,又包括算法热点领域追踪。

为突出教材的`可读性和可用性,章首增加了学习要点提示,章末配有难易适度的算法分析题和算法实现题;配套出版了《计算机算法设计与分析习题解答(第2版)》;并免费提供电子课件和教学服务。

第一章 算法初步全章教案

第一章 算法初步全章教案

第一章 算法初步第一课时 1.1.1 算法的概念教学要求:了解算法的含义,体会算法的思想;能够用自然语言叙述算法;掌握正确的算法应满足的要求;会写出解线性方程(组)的算法、判断一个数为质数的算法、用二分法求方程近似根的算法.教学重点:解二元一次方程组等几个典型的的算法设计.教学难点:算法的含义、把自然语言转化为算法语言.教学过程:一、复习准备:1. 提问:我们古代的计算工具?近代计算手段?(算筹与算盘→计算器与计算机,见章头图)2. 提问:①小学四则运算的规则?(先乘除,后加减) ②初中解二元一次方程组的方法?(消元法) ③高中二分法求方程近似解的步骤? (给定精度ε,二分法求方程根近似值步骤如下:A .确定区间[,]a b ,验证()()0f a f b <,给定精度ε;B. 求区间(,)a b 的中点1x ;C. 计算1()f x : 若1()0f x =,则1x 就是函数的零点; 若1()()0f a f x <,则令1b x =(此时零点01(,)x a x ∈); 若1()()0f x f b <,则令1a x =(此时零点01(,)x x b ∈);D. 判断是否达到精度ε;即若||a b ε-<,则得到零点零点值a (或b );否则重复步骤2~4.二、讲授新课:1. 教学算法的含义:① 出示例:写出解二元一次方程组22(1)24(2)x y x y -=⎧⎨+=⎩的具体步骤. 先具体解方程组,学生说解答,教师写解法 → 针对解答过程分析具体步骤,构成其算法第一步:②-①×2,得5y =0 ③; 第二步:解③得y =0; 第三步:将y =0代入①,得x =2.② 理解算法: 12世纪时,指用阿拉伯数字进行算术运算的过程. 现代意义上的算法是可以用计算机来解决的某一类问题的程序或步骤,程序和步骤必须是明确和有效的,且能在有限步完成. 广义的算法是指做某一件事的步骤或程序. 算法特点:确定性;有限性;顺序性;正确性;普遍性.举例生活中的算法:菜谱是做菜肴的算法;洗衣机的使用说明书是操作洗衣机的算法;歌谱是一首歌曲的算法;渡河问题.③ 练习:写出解方程组()1111221222(1)0(2)a x b y c a b a b a x b y c +=⎧-≠⎨+=⎩的算法.2. 教学几个典型的算法:① 出示例1:任意给定一个大于1的整数n ,试设计一个程序或步骤对n 是否为质数做出判断.提问:什么叫质数?如何判断一个数是否质数? → 写出算法.分析:此算法是用自然语言的形式描述的. 设计算法要求:写出的算法必须能解决一类问题,并且能够重复使用. 要使算法尽量简单、步骤尽量少. 要保证算法正确,且计算机能够执行.② 出示例2:用二分法设计一个求方程230x -=的近似根的算法.提问:二分法的思想及步骤?如何求方程近似解→写出算法.③练习:举例更多的算法例子;→对比一般解决问题的过程,讨论算法的主要特征.3. 小结:算法含义与特征;两类算法问题(数值型、非数值型);算法的自然语言表示.三、巩固练习:1. 写出下列算法:解方程x2-2x-3=0;求1×3×5×7×9×11的值2. 有蓝和黑两个墨水瓶,但现在却错把蓝墨水装在了黑墨水瓶中,黑墨水错装在了蓝墨水瓶中,要求将其互换,请你设计算法解决这一问题.3. 根据教材P6 的框图表示,使用程序框表示以上算法.4. 作业:教材P4 1、2题.第二课时 1.1.2 程序框图(一)教学要求:掌握程序框图的概念;会用通用的图形符号表示算法,掌握算法的三个基本逻辑结构. 掌握画程序框图的基本规则,能正确画出程序框图. 通过模仿、操作、探索,经历通过设计程序框图表达解决问题的过程;学会灵活、正确地画程序框图.教学重点:程序框图的基本概念、基本图形符号和3种基本逻辑结构.教学难点:综合运用框图知识正确地画出程序框图教学过程:一、复习准备:1. 写出算法:给定一个正整数n,判定n是否偶数.2. 用二分法设计一个求方程320x-=的近似根的算法.二、讲授新课:1. 教学程序框图的认识:①讨论:如何形象直观的表示算法?→图形方法.教师给出一个流程图(上面1题),学生说说理解的算法步骤.②定义程序框图:程序框图又称流程图,是一种用规定的图形、指向线及文字说明来准确、直观地表示算法的图形.③④阅读教材P5的程序框图. →讨论:输入35后,框图的运行流程,讨论:最大的I值.2. 教学算法的基本逻辑结构:①讨论:P5的程序框图,感觉上可以如何大致分块?流程再现出一些什么结构特征?→教师指出:顺序结构、条件结构、循环结构.②试用一般的框图表示三种逻辑结构. (见下图)③出示例3:已知一个三角形的三边分别为4,5,6,利用海伦公式设计一个算法,求出它的面积,并画出算法的程序框图. (学生用自然语言表示算法→师生共写程序框图→讨论:结构特征)④出示例4:任意给定3个正实数,设计一个算法,判断分别以这3个数为三边边长的三角形是否存在.画出这个算法的程序框图. (学生分析算法→写出程序框图→试验结果→讨论结构)⑤出示例5:设计一个计算1+2+3+…+1000的值的算法,并画出程序框图. (学生分析算法→写出程序框图→给出另一种循环结构的框图→对比两种循环结构)3. 小结:程序框图的基本知识;三种基本逻辑结构;画程序框图要注意:流程线的前头;判断框后边的流程线应根据情况标注“是”或“否”;循环结构中要设计合理的计数或累加变量等.三、巩固练习:1.练习:把复习准备题②的算法写成框图. 2. 作业:P12 A组1、2题.第三课时 1.1.2 程序框图(二)教学要求:更进一步理解算法,掌握算法的三个基本逻辑结构. 掌握画程序框图的基本规则,能正确画出程序框图.学会灵活、正确地画程序框图.教学重点:灵活、正确地画程序框图.教学难点:运用程序框图解决实际问题.教学过程:一、复习准备:1.2.顺序结构条件结构循环结构程序框图结构说明按照语句的先后顺序,从上而下依次执行这些语句. 不具备控制流程的作用. 是任何一个算法都离不开的基本结构根据某种条件是否满足来选择程序的走向.当条件满足时,运行“是”的分支,不满足时,运行“否”的分支.从某处开始,按照一定的条件,反复执行某一处理步骤的情况. 用来处理一些反复进行操作的问题二、讲授新课:1. 教学程序框图①出示例1:任意给定3个正实数,判断其是否构成三角形,若构成三角形,则根据海伦公式计算其面积. 画出解答此问题算法的程序框图.(学生试写→共同订正→对比教材P7 例3、4 →试验结果)②设计一个计算2+4+6+…+100的值的算法,并画出程序框图.(学生试写→共同订正→对比教材P9 例5 →另一种循环结构)③循环语句的两种类型:当型和直到型.当型循环语句先对条件判断,根据结果决定是否执行循环体;直到型循环语句先执行一次循环体,再对一些条件进行判断,决定是否继续执行循环体. 两种循环语句的语句结构及框图如右.说明:“循环体”是由语句组成的程序段,能够完成一项工作.注意两种循环语句的区别及循环内部改变循环的条件.④练习:用两种循环结构,写出求100所有正约数的算法程序框图.2. 教学“鸡兔同笼”趣题:①“鸡兔同笼”,我国古代著名数学趣题之一,大约在1500年以前,《孙子算经》中记载了这个有趣的问题,书中描述为:今有雏兔同笼,上有三十五头,下有九十四足,问雏兔各几何?②学生分析其数学解法. (“站立法”,命令所有的兔子都站起来;或用二元一次方程组解答.)③欣赏古代解法:“砍足法”,假如砍去每只鸡、每只兔一半的脚,则“独脚鸡”,“双脚兔”. 则脚的总数47只;与总头数35的差,就是兔子的只数,即47-35=12(只).鸡35-12=23(只).④试用算法的程序框图解答此经典问题. (算法:鸡的头数为x,则兔的头数为35-x,结合循环语句与条件语句,判断鸡兔脚数2x+4(35-x)是否等于94.)三、巩固练习:1. 练习:100个和尚吃100个馒头,大和尚一人吃3个,小和尚3人吃一个,求大、小和尚各多少个?分析其算法,写出程序框图. 2. 作业:教材P12 A组1题.第一课时 1.2.1 输入语句、输出语句和赋值语句教学要求:正确理解输入语句、输出语句、赋值语句的结构. 让学生充分地感知、体验应用计算机解决数学问题的方法;并能初步操作、模仿. 通过实例使学生理解3种基本的算法语句(输入语句、输出语句和赋值语句)的表示方法、结构和用法,能用这三种基本的算法语句表示算法,进一步体会算法的基本思想. 教学重点:会用输入语句、输出语句、赋值语句.教学难点:正确理解输入语句、输出语句、赋值语句的作用.教学过程:一、新课导入:1. 提问:学习了哪些算法的表示形式?(自然语言或程序框图描述)算法中的三种基本的逻辑结构?(顺序结构、条件结构和循环结构)2. 导入:我们用自然语言或程序框图描述的算法,计算机是无法“看得懂,听得见”的. 因此还需要将算法用计算机能够理解的程序设计语言翻译成计算机程序. 程序设计语言有很多种. 如BASIC,Foxbase,C语言,C++,J++,VB,VC,JB 等.各种程序设计语言中都包含下列基本的算法语句:输入语句、输出语句、赋值语句条件语句和循环语句.今天,我们一起用类BASIC语言学习输入语句、输出语句、赋值语句. 基本上对应于算法中的顺序结构.二、讲授新课:1. 教学三种语句的格式及功能:①出示例1:编写程序,计算一个学生数学、语文、英语三门课的平均成绩.(分析算法→框图表示→教师给出程序,学生试说说对各语句的理解.)①出示例2:用描点法作函数y=x3+3x2-24x+30的图象时,需要求出自变量和函数的一组对应值. 编写程序,分别计算当x=-5,-4,-3,-2,-1,0,1,2,3,4,5时的函数值②出示例3:给一个变量重复赋值. (程序见P16)③出示例4:交换两个变量A和B的值,并输出交换前后的值.(教法:先分析算法→画出框图→编写程序→分析各语句→变式→小结:先写算法,再编程)3. 小结:输入、输出和赋值语句的格式;赋值“=”及表达式;编写简单程序解决数学问题.三、巩固练习:1. 练习:教材P16 1、2题 2. 作业:P16 3、4题.第二课时 1.2.2 条件语句教学要求:正确理解条件语句的概念,并掌握其结构. 会应用条件语句编写程序. 教学重点:条件语句的步骤、结构及功能.教学难点:会编写程序中的条件语句.教学过程:一、复习准备:1. 提问:算法的三种逻辑结构?条件结构的框图模式?2. 提问:输入语句、输出语句和赋值语句的格式与功能?3. 一次招生考试中,测试三门课程,如果三门课程的总成绩在200分及以上,则被录取. 请对解决此问题的算法分析,画出程序框图. (变题:…总成绩在200分以下,则不被录取)二、讲授新课:1. 教学条件语句的格式与功能:①分析:复习题③中的两种条件结构的框图模式?②给出复习题③的程序,试读懂程序,说说新的语句的结构及含义.③条件语句的一般有两种:IF—THEN语句;IF—THEN—ELSE语句. 语句格式及框图如下.分析语句执行流程,并说明:①“条件”是由一个关系表达式或逻辑表达式构成,其一般形式为“<表达式><关系运算符><表达式>”,常用的运算符有“>”(大于)、“<”(小于)、“>=”(大于或等于)、“<=”(小于或等于),“<>”(不等于). 关系表达式的结果可取两个值,以“真”或“假”来表示,“真”表示条件满足,“假”则条件不满足. ②“语句”是由程序语言中所有语句构成的程序段,即可以是语句组. ③条件语句可以嵌套,即条件语句的THEN 或ELSE后面还可以跟条件语句,嵌套时注意内外分层,避免逻辑混乱.2. 教学典型例题:②出示例5:编写程序,输入一元二次方程ax2+bx+c=0的系数,输出它的实数根.(算法分析→画程序框图→编写程序→给出系数的一组值,分析框图与程序各步结果)注意:解方程之前,先由判别式的符号判断方程根的情况. 函数SQR()的功能及格式.②讨论:例5程序中为何要用到条件语句?条件语句一般用在什么情况下?答:一般用在需要对条件进行判断的算法设计中,如判断一个数的正负,确定两个数的大小等问题,还有求分段函数的函数值等,往往要用条件语句,有时甚至要用到条件语句的嵌套③练习:编写程序,使得任意输入的2个实数从小到大排列.④出示例6:编写程序,使得任意输入的3个实数从小到大排列.(讨论:先用什么语句?→用具体的数值给a、b、c,分析计算机如何排列这些数?→写出程序→画出框图→说说算法→变式:如果是4个实数呢?3. 小结:条件语句的格式与功能及对应框图. 编程的一般步骤:①算法分析:根据提供的问题,利用数学及相关学科的知识,设计出解决问题的算法. ②画程序框图:依据算法分析,画出程序框图. ③写出程序:根据程序框图中的算法步骤,逐步写出相应的程序语句.三、巩固练习: 1. 练习:教材P22 1、2题.2. 试编写程序进行印刷品邮资的计算. (前100g 0.7元,以后每100g 0.4元)3. 作业:P22 3、4题.第三课时 1.2.3 循环语句教学要求:正确理解循环语句的概念,并掌握其结构. 会应用循环语句编写程序. 教学重点:两种循环语句的表示方法、结构和用法,用循环语句表示算法.教学难点:理解循环语句的表示方法、结构和用法,会编写程序中的循环语句. 教学过程:一、复习准备:1. 设计一个计算1+2+3+……+10的算法,并画出程序框图.2. 循环结构有哪两种模式?有何区别?相应框图如何表示?答:当型(while 型)和直到型(until 型). 当型循环语句先对条件判断,根据结果决定是否执行循环体,可能一次也不执行循环体,也称为“前测试型”循环;直到型循环语句先执行一次循环体,再对一些条件进行判断,决定是否继续执行循环体.二、讲授新课:1. 教学两种循环语句的格式与功能:① 给出复习题①的两种循环语句的程序,试读懂程序,说说新的语句的结构及含义.② 两种循环语句的语句结构及框图如下.说明:“循环体”是由语句组成的程序段,能够完成一项工作. 当使用WHIL 语句时,循环内部应当有改变循环的条件,否则会产生无限循环. 学习时注意两种循环语句的区别.③ 讨论:两种循环语句的区别?当型循环先判断后执行,直到型循环先执行后判断,则:在WHILE 语句中,是当条件满足时执行循环体;在UNTIL 语句中,先执行循环体,再当条件不满足时再执行循环体.2. 教学例题:① 出示例:编写程序,计算1+2+3+……+99+100的值.(分析:实现累加的算法 → 分别用两种循环语句编写 → 变题:计算20以内偶数的积.② 给出下列一段程序,试读懂程序,说说各语句的作用,分析程序的功能. (见教材P24)(读,找疑问 → 说各语句 → 分析功能)③ 练习:用描点法作函数y =x 3+3x 2-24x +30的图象时,需要求出自变量和函数的一组对应值. 编写程序,分别计算当x =-5,-4,-3,-2,-1,0,1,2,3,4,5时的函数值. ④ 分析右边所给出程序:当n=10时,结果是多少?程序INPUT “n=”;ni =1 a =0 WHILE i <= n a = a +(i +1)/i i = i+1WENDPRINT “…”;aEND实现功能?3. 小结:① 循环语句的两种不同形式:WHILE 语句和UNTIL 语句(还可补充了For 语句),掌握它们的一般格式.② 在用WHILE 语句和UNTIL 语句编写程序解决问题时,一定要注意它们的格式及条件的表述方法. WHILE 语句中是当条件满足时执行循环体,而UNTIL 语句中是当条件不满足时执行循环体.③ 循环语句主要用来实现算法中的循环结构,在处理一些需要反复执行的运算任务. 如累加求和,累乘求积等问题中常用到.三、巩固练习: 1. 练习:教材P24 1题.2. 编写程序,实现输出1000以内能被3和5整除的所有整数. (算术运算:5 MOD 3 =2)3. 作业:P24 2、3题.第一课时 1.3.1 算法案例---辗转相除法与更相减损术教学要求:理解辗转相除法与更相减损术中蕴含的数学原理,并能根据这些原理进行算法分析; 基本能根据算法语句与程序框图的知识设计出辗转相除法与更相减损术完整的程序框图并写出它们的算法程序.教学重点:理解辗转相除法与更相减损术求最大公约数的方法.教学难点:把辗转相除法与更相减损术的方法转换成程序框图与程序语言. 教学过程:一、复习准备:1. 回顾算法的三种表述:自然语言、程序框图(三种逻辑结构)、程序语言(五种基本语句).2. 提问:①小学学过的求两个数最大公约数的方法?(先用两个公有的质因数连续去除,一直除到所得的商是互质数为止,然后把所有的除数连乘起来.)口算出36和64的最大公约数. ②除了用这种方法外还有没有其它方法?6436128=⨯+,36∴和28的最大公约数就是64和36的最大公约数,反复进行这个步骤,直至842=⨯,得出4即是36和64的最大公约数.二、讲授新课:1. 教学辗转相除法:例1:求两个正数1424和801的最大公约数.分析:可以利用除法将大数化小,然后逐步找出两数的最大公约数. (适用于两数较大时)①以上我们求最大公约数的方法就是辗转相除法,也叫欧几里德算法,它是由欧几里德在公元前300年左右首先提出的. 利用辗转相除法求最大公约数的步骤如下:(1)用较大的数m 除以较小的数n 得到一个商0S 和一个余数0R ;(2)若0R =0,则n 为m ,n 的最大公约数;若0R ≠0,则用除数n 除以余数0R 得到一个商1S 和一个余数1R ;(3)若1R =0,则1R 为m ,n 的最大公约数;若1R ≠0,则用除数0R 除以余数1R 得到一个商2S 和一个余数2R ;……依次计算直至n R =0,此时所得到的1n R -即为所求的最大公约数.②由上述步骤可以看出,辗转相除法中的除法是一个反复执行的步骤,且执行次数由余数是否等于0来决定,所以我们可以把它看成一个循环体,它的程序框图如右图:(师生共析,写出辗转相除法完整的程序框图和程序语言)练习:求两个正数8251和2146的最大公约数. (乘法格式、除法格式)2. 教学更相减损术:我国早期也有求最大公约数问题的算法,就是更相减损术. 在《九章算术》中有更相减损术求最大公约数的步骤:可半者半之,不可半者,副置分母•子之数,以少减多,更相减损,求其等也,以等数约之.翻译为:(1)任意给出两个正数;判断它们是否都是偶数. 若是,用2约简;若不是,执行第二步.(2)以较大的数减去较小的数,接着把较小的数与所得的差比较,并以大数减小数. 继续这个操作,直到所得的数相等为止,则这个数(等数)就是所求的最大公约数.例2:用更相减损术求91和49的最大公约数.分析:更相减损术是利用减法将大数化小,直到所得数相等时,这个数(等数)就是所求的最大公约数. (反思:辗转相除法与更相减损术是否存在相通的地方) 练习:用更相减损术求72和168的最大公约数.3. 小结:辗转相除法与更相减损术及比较①都是求最大公约数的方法,辗转相除法以除法为主,更相减损术以减法为主,计算次数上辗转相除法计算次数相对较少;②结果上,辗转相除法体现结果是以相除余数为0得到,而更相减损术则以减数与差相等而得到.三、巩固练习:1、练习:教材P35第1题 2、作业:教材P38第1题 第二课时 1.3.2 算法案例---秦九韶算法教学要求:了解秦九韶算法的计算过程,并理解利用秦九韶算法可以减少计算次数、提高计算效率的实质;理解数学算法与计算机算法的区别,理解计算机对数学的辅助作用.教学重点:秦九韶算法的特点及其程序设计.教学难点:秦九韶算法的先进性理解及其程序设计.教学过程:一、复习准备:1. 分别用辗转相除法和更相减损术求出两个正数623和1513的最大公约数.2. 设计一个求多项式5432()254367f x x x x x x =--+-+当5x =时的值的算法. (学生自己提出一般的解决方案:将5x =代入多项式进行计算即可)提问:上述算法在计算时共用了多少次乘法运算?多少次加法运算?此方案有何优缺点?(上述算法一共做了5+4+3+2+1=15次乘法运算,5次加法运算. 优点是简单、易懂;缺点是不通用,不能解决任意多项式的求值问题,而且计算效率不高.)二、讲授新课:1. 教学秦九韶算法:① 提问:在计算x 的幂值时,可以利用前面的计算结果,以减少计算量,即先计算2x ,然后依次计算2x x ⋅,2()x x x ⋅⋅,2(())x x x x ⋅⋅⋅的值,这样计算上述多项式的值,一共需要多少次乘法,多少次加法?(上述算法一共做了4次乘法运算,5次加法运算)② 结论:第二种做法与第一种做法相比,乘法的运算次数减少了,因而能提高运算效率,而且对于计算机来说,做一次乘法所需的运算时间比做一次加法要长得多,因此第二种做法能更快地得到结果.③ 更有效的一种算法是:将多项式变形为:5432()254367f x x x x x x =--+-+=,依次计算2555⨯-=,55421⨯-=,2153108⨯+=,10856534⨯-=,534572677⨯+=故(5)2677f =. ――这种算法就是“秦九韶算法”. (注意变形,强调格式) ④ 练习:用秦九韶算法求多项式432()2351f x x x x x =+-++当4x =时的值. (学生板书→师生共评→教师提问:上述算法共需多少次乘法运算?多少次加法运算?)⑤ 如何用秦九韶算法完成一般多项式1110()n n n n f x a x a x a x a --=++++的求值问题?改写:11101210()(()))n n n n n n n f x a x a x a x a a x a x a x a x a ----=++++=+++++. 首先计算最内层括号内一次多项式的值,即11n n v a x a -=+,然后由内向外逐层计算一次多项式的值,即212n v v x a -=+,323n v v x a -=+,,10n n v v x a -=+. ⑥ 结论:秦九韶算法将求n 次多项式的值转化为求n 个一次多项式的值,整个过程只需n 次乘法运算和n 次加法运算;观察上述n 个一次式,可发出k v 的计算要用到1k v -的值,若令0n v a =,可得到下列递推公式:01,(1,2,,)n k k n k v a v v x a k n --=⎧⎨=+=⎩.这是一个反复执行的步骤,因此可用循环结构来实现.⑦ 练习:用秦九韶算法求多项式5432()52 3.5 2.6 1.70.8f x x x x x x =++-+-当5x =时的值并画出程序框图.2. 小结:秦九韶算法的特点及其程序设计三、巩固练习:1、练习:教材P35第2题 2、作业:教材P36第2题 第三课时 1.3.3 算法案例---进位制教学要求:了解各种进位制与十进制之间转换的规律,会利用各种进位制与十进制之间的联系进行各种进位制之间的转换;学习各种进位制转换成十进制的计算方法,研究十进制转换为各种进位制的除k 去余法,并理解其中的数学规律. 教学重点:各种进位制之间的互化.教学难点:除k 取余法的理解以及各进位制之间转换的程序框图及其程序的设计.教学过程:一、复习准备:1. 试用秦九韶算法求多项式52()42f x x x =-+当3x =时的值,分析此过程共需多少次乘法运算?多少次加法运算?2. 提问:生活中我们常见的数字都是十进制的,但是并不是生活中的每一种数字都是十进制的.比如时间和角度的单位用六十进位制,电子计算机用的是二进制,旧式的秤是十六进制的,计算一打数值时是12进制的......那么什么是进位制?不同的进位制之间又有什么联系呢?二、讲授新课:1. 教学进位制的概念:① 进位制是人们为了计数和运算方便而约定的记数系统,“满几进一”就是几进制,几进制的基数就是几. 如:“满十进一”就是十进制,“满二进一”就是二进制. 同一个数可以用不同的进位制来表示,比如:十进数57,可以用二进制表示为111001,也可以用八进制表示为71、用十六进制表示为39,它们所代表的数值都是一样的. 表示各种进位制数一般在数字右下脚加注来表示,如上例中:(2)(8)(16)1110017139==② 一般地,任意一个k 进制数都可以表示成不同位上数字与基数的幂的乘积之和的形式,即1110()1...(0,n n n n k n n n n a a a a a k a a a k a k a ka k a k ----<<≤<=⨯+⨯+⨯+⨯.如:把(2)110011化为十进制数,(2)110011=1⨯25+1⨯24+0⨯23+0⨯22+1⨯21+1⨯20=32+16+2+1=51.把八进制数(8)7348化为十进制数,3210(8)7348783848883816=⨯+⨯+⨯+⨯=.2. 教学进位制之间的互化:①例1:把二进制数(2)1001101化为十进制数.(学生板书→教师点评→师生共同总结将非十进制转为十进制数的方法) 分析此过程的算法过程,编写过程的程序语言. 见P34②练习:将(5)2341、(3)121转化成十进制数.③例2、把89化为二进制数.分析:根据进位制的定义,二进制就是“满二进一”,可以用2连续去除89或所得商,然后取余数. (教师板书)上述方法也可以推广为把十进制化为k 进制数的算法,这种算法成为除k 取余法. ④练习:用除k 取余法将89化为四进制数、六进制数.⑤例3、把二进制数(2)11011.101化为十进制数.解:4(211-=⨯. (小数也可利用上述方法化进行不同进位制之间的互化. )变式:化为八进制→方法:进制互化3. 小结:进位制的定义;进位制之间的互化.三、巩固练习:1、练习:教材P35第3题 2、作业:教材P38第3题 第四课时 1.3.4 生活中的算法实例教学要求:通过生活实例进一步了解算法思想.教学重点:生活实例的算法分析.教学难点:算法思想的理解.教学过程:一、复习准备:1. 前面学习了哪几种算法案例?每种算法的作用及操作方法是怎样的?2. 算法思想在我们的生活中无处不在,如何利用我们所学习的知识解决生活中的实际问题?二、讲授新课:1. 霍奇森算法:提问:同学们经常会面对一个共同的问题,就是有时有太多的事情要做. 例如,你可能要面临好几门课的作业的最后期限,你如何合理安排以确保每门课的作业都能如期完成?如果根本不可能全部按期完成,你该怎么办?(霍奇森算法可以。

计算机算法设计与分析(第5版)第1章

计算机算法设计与分析(第5版)第1章
• 其中I是问题的规模为n的实例,p(I)是实 例I出现的概率。
算法渐近复杂性
• T(n) , as n ; • (T(n) - t(n) )/ T(n) 0 ,as n; • t(n)是T(n)的渐近性态,为算法的渐近复杂性。 • 在数学上, t(n)是T(n)的渐近表达式,是T(n)略去低阶
问题求解(Problem Solving)
理解问题 精确解或近似解
选择数据结构 算法设计策略
设计算法 证明正确性
分析算法 设计程序
算法复杂性分析
• 算法复杂性 = 算法所需要的计算机资源 • 算法的时间复杂性T(n); • 算法的空间复杂性S(n)。 • 其中n是问题的规模(输入大小)。
算法的时间复杂性
项留下的主项。它比T(n) 简单。
渐近分析的记号
• 在下面的讨论中,对所有n,f(n) 0,g(n) 0。 • (1)渐近上界记号O • O(g(n)) = { f(n) | 存在正常数c和n0使得对所有n n0有:
0 f(n) cg(n) } • (2)渐近下界记号 • (g(n)) = { f(n) | 存在正常数c和n0使得对所有n n0有:
• (1)最坏情况下的时间复杂性 • Tmax(n) = max{ T(I) | size(I)=n } • (2)最好情况下的时间复杂性 • Tmin(n) = min{ T(I) | size(I)=n } • (3)平均情况下的时间复杂性
• Tavg(n) = p(I )T (I ) size(I )n

for x > -1,
x ln(1 x) x 1 x

for any a > 0,
Hale Waihona Puke log b nlim

计算机算法设计与分析--第1章 算法概述

计算机算法设计与分析--第1章 算法概述
12
③确认算法。算法确认的目的是使人们确信这一算 法能够正确无误地工作,即该算法具有可计算性。 正确的算法用计算机算法语言描述,构成计算机程 序,计算机程序在计算机上运行,得到算法运算的 结果; ④ 分析算法。算法分析是对一个算法需要多少计算 时间和存储空间作定量的分析。分析算法可以预测 这一算法适合在什么样的环境中有效地运行,对解 决同一问题的不同算法的有效性作出比较; ⑤ 验证算法。用计算机语言描述的算法是否可计算、 有效合理,须对程序进行测试,测试程序的工作由 调试和作时空分布图组成。
16
算法描述
1. 从第一个元素开始,该元素可以认为已 经被排序 2. 取出下一个元素,在已经排序的元 素序列中从后向前扫描 3. 如果该元素(已排序)大于新元素, 将该元素移到下一位置 4. 重复步骤3,直到找到已排序的元素 小于或者等于新元素的位置 5. 将新元素插入到该位置中 6. 重复步骤2
15
1.3 算法示例—插入排序算法
算法的思想:扑克牌游戏
a0,...,n-1 a0,...,n-1 a0,...,n-1 a0,...,n-1 a0,...,n-1 a0,...,n-1 a0,...,n-1
= = = = = = =
5,2,4,6,1,3 5,2,4,6,1,3 2,5,4,6,1,3 2,4,5,6,1,3 2,4,5,6,1,3 1,2,4,5,6,3 1,2,3,4,5,6
8
算法≠程序
算法描述:自然语言,流程图,程序设计
语言,伪代码 用各种算法描述方法所描述的同一算法, 该算法的功用是一样的,允许在算法的描述 和实现方法上有所不同。
本书中采用类C++伪代码语言描述算法
9
人们的生产活动和日常生活离不开算法, 都在自觉不自觉地使用算法,例如人们到 商店购买物品,会首先确定购买哪些物品, 准备好所需的钱,然后确定到哪些商场选 购、怎样去商场、行走的路线,若物品的 质量好如何处理,对物品不满意又怎样处 理,购买物品后做什么等。以上购物的算 法是用自然语言描述的,也可以用其他描 述方法描述该算法。

算法设计与分析教案

算法设计与分析教案

《算法设计与分析》教案张静第1章绪论算法理论的两大论题:1. 算法设计2. 算法分析1.1 算法的基本概念1.1.1 为什么要学习算法理由1:算法——程序的灵魂➢问题的求解过程:分析问题→设计算法→编写程序→整理结果➢程序设计研究的四个层次:算法→方法学→语言→工具理由2:提高分析问题的能力算法的形式化→思维的逻辑性、条理性1.1.2 算法及其重要特性算法(Algorithm):对特定问题求解步骤的一种描述,是指令的有限序列。

算法的五大特性:⑴输入:一个算法有零个或多个输入。

⑵输出:一个算法有一个或多个输出。

⑶有穷性:一个算法必须总是在执行有穷步之后结束,且每一步都在有穷时间内完成。

⑷确定性:算法中的每一条指令必须有确切的含义,对于相同的输入只能得到相同的输出。

⑸可行性:算法描述的操作可以通过已经实现的基本操作执行有限次来实现。

1.1.3 算法的描述方法⑴自然语言优点:容易理解缺点:冗长、二义性使用方法:粗线条描述算法思想注意事项:避免写成自然段欧几里德算法⑶程序设计语言优点:能由计算机执行缺点:抽象性差,对语言要求高使用方法:算法需要验证注意事项:将算法写成子函数欧几里德算法#include <iostream.h>int CommonFactor(int m, int n) {int r=m % n;while (r!=0){m=n;n=r;r=m % n;}return n;}void main( ){cout<<CommonFactor(63, 54)<<endl;}⑷伪代码——算法语言伪代码(Pseudocode):介于自然语言和程序设计语言之间的方法,它采用某一程序设计语言的基本语法,操作指令可以结合自然语言来设计。

优点:表达能力强,抽象性强,容易理解使用方法:7 ± 2欧几里德算法1. r = m % n;2. 循环直到 r 等于02.1 m = n;2.2 n = r;2.3 r = m % n;3. 输出 n ;1.1.4 算法设计的一般过程1.理解问题2.预测所有可能的输入3. 在精确解和近似解间做选择4. 确定适当的数据结构5.算法设计技术6.描述算法7.跟踪算法8.分析算法的效率9.根据算法编写代码1.2 算法分析算法分析(Algorithm Analysis):对算法所需要的两种计算机资源——时间和空间进行估算➢时间复杂性(Time Complexity)➢空间复杂性(Space Complexity)算法分析的目的:➢设计算法——设计出复杂性尽可能低的算法➢选择算法——在多种算法中选择其中复杂性最低者时间复杂性分析的关键:➢ 问题规模:输入量的多少;➢ 基本语句:执行次数与整个算法的执行时间成正比的语句for (i=1; i<=n; i++)for (j=1; j<=n; j++)x++;问题规模:n基本语句:x++1.2.1 渐进符号1. 大O 符号定义1.1 若存在两个正的常数c 和n 0,对于任意n ≥n 0,都有T (n )≤c ×f (n ),则称T (n )=O (f (n ))2. 大Ω符号定义1.2 若存在两个正的常数c 和n 0,对于任意n ≥n 0,都有T (n )≥c ×g (n ),则称T (n )=Ω(g (n ))问题规模n 执行次3. Θ符号定义1.3 若存在三个正的常数c 1、c 2和n 0,对于任意n ≥n 0都有c 1×f (n )≥T (n )≥c 2×f (n ),则称T (n )=Θ(f (n ))例: T (n )=5n 2+8n +1当n ≥1时,5n 2+8n +1≤5n 2+8n +n=5n 2+9n ≤5n 2+9n 2≤14n 2=O (n 2)当n ≥1时,5n 2+8n +1≥5n 2=Ω(n 2)∴ 当n ≥1时,14n 2≥5n 2+8n +1≥5n 2则:5n 2+8n +1=Θ(n 2)0问题规模n 执行次数问题规模n 执行次数定理 1.1 若T(n)=amnm +am-1nm-1 + … +a1n+a0(am>0),则有T(n)=O(nm)且T(n)=Ω(n m),因此,有T(n)=Θ(n m)。

算法设计与分析(第2版)-郑宗汉-第1章-1

算法设计与分析(第2版)-郑宗汉-第1章-1
参考书:算法导论(原书第3版) ,Thomas H. Cormen, Charles E. Leiserson, Ronald L. Rivest, lifford Stein, 殷建平 等译, 机械工业出版社, 第1版,2013年7月
2021/3/10
5
第1章 算法的基本概念
References
1973. 5. A. V. Aho, J. D. Ullman等. The Design and Analysis of Computer Algorithms.
Addison-Wesley, 1974. 6. A. V. Aho, J. D. Ullman等. Data Structures and Algorithms. Addison-Wesley,
1983.4. 7. S. Baase. Computer Algorithms: Introduction to Design and Analysis.
Addison-Wesley, second edition, 1988. 8. E. Horowitz and Sartaj Sahni. Fundamentals of Computer Algorithms.
2021/3/10
12
第1章 算法的基本概念 1.1.1 算法的定义和特性
最大公约数问题:求两个正整数m和n的最大公约数
设计:
确可定行性性::
输入: 输出: 第一步: 第二步:
2021/3/10
8
第1章 算法的基本概念
学习要求
深刻理解每一类算法的思想及其实现 能熟练运用所学知识解决实际问题 培养提高计算思维能力
2021/3/10
9
第1章 算法的基本概念

第一章 算法的概念

第一章 算法的概念

§1.1算法与程序框图1.1.1算法的概念学习目标1.了解算法的含义和特征.2.会用自然语言描述简单的具体问题的算法.知识点一算法的概念知识点二算法的特征算法的五个特征(1)有限性:一个算法的步骤是有限的,它应在有限步操作之后停止.(2)确定性:算法中的每一步应该是确定的,并且能有效地执行且得到确定的结果,而不是模棱两可的.(3)逻辑性:算法从初始步骤开始,分为若干个明确的步骤,前一步是后一步的前提,只有完成前一步,才能进行下一步,而且每一步都是正确无误的,从而组成具有很强逻辑性的步骤序列.(4)普遍性:一个确定的算法,应该能够解决一类问题.(5)不唯一性:求解某一个问题的算法不一定只有唯一的一个,也可以有不同的算法.特别提醒:判断一个问题是不是算法,关键是明确算法的含义及算法的特征.知识点三算法的设计1.设计算法的目的设计算法的目的实际上是寻求一类问题的解决方法,它可以通过计算机来完成.设计算法的关键是把过程分解成若干个明确的步骤,然后用计算机能够接受的“语言”准确地描述出来,从而达到让计算机执行的目的.2.设计算法的要求①写出的算法必须能解决一类问题.②要使算法尽量简单、步骤尽量少.③要保证算法步骤有效,且计算机能够执行.1.算法是解决一个问题的方法.(×)2.一个算法可以产生不确定的结果.(×)3.算法的步骤必须是明确的、有限的.(√)4.求解一类问题的算法是唯一的.(×)题型一对算法概念的理解例1下列说法正确的是()A.算法就是某个问题的解题过程B.算法执行后可以产生不同的结果C.解决某一个具体问题算法不同,则结果不同D.算法执行步骤的次数不可以很多,否则无法实施★答案★ B解析选项B正确,例如:判断一个整数是否为偶数,结果为“是偶数”和“不是偶数”两种;选项A,算法不能等同于解法;选项C,解决某一个具体问题算法不同,但结果应相同;选项D,算法可以为很多次,但不可以为无限次.反思感悟算法实际上是解决问题的一种程序性方法,它通常解决某一个或一类问题,用算法解决问题,体现了从特殊到一般的数学思想.跟踪训练1下列描述不是解决问题的算法的是()A.从中山到北京先坐汽车,再坐火车B.解可化为一元一次方程的分式方程的步骤是去分母、去括号、移项、合并同类项、系数化为1C.方程x2-4x+3=0有两个不相等的实根D.解不等式ax+3>0时,第一步移项,第二步讨论★答案★ C解析A选项,从中山到北京,先坐汽车,再坐火车,解决了怎样去的问题;B选项,解可化为一元一次方程的分式方程的步骤:去分母、去括号、移项、合并同类项、系数化为1,解决了怎样解一元一次方程的问题;D选项,解不等式ax+3>0时,第一步移项,将不等式化为ax>-3,第二步讨论a的符号,进而根据不等式的基本性质,求出不等式的解集,解决了怎样求不等式解集的问题; 选项C 只是一个真命题,没有解决什么问题,因此不是算法.题型二 算法的设计命题角度1 直接应用数学公式设计算法例2 有一个底面半径为3,母线长为5的圆锥,写出求该圆锥体积的算法.解 如图,先给r ,l 赋值,计算h ,再根据圆锥体积公式V =13πr 2h 计算V ,然后输出结果.第一步,令r =3,l =5. 第二步,计算h =l 2-r 2. 第三步,计算V =13πr 2h .第四步,输出运算结果.反思感悟 利用公式解决问题时,必须先求出公式中的各个量,在设计算法时,应优先考虑未知量的求法.跟踪训练2 已知一个等边三角形的周长为a ,求这个三角形的面积.设计一个算法解决这个问题.解 第一步,输入a 的值. 第二步,计算l =a3的值.第三步,计算S =34×l 2的值. 第四步,输出S 的值.命题角度2 非数值性问题的算法例3所谓正整数p为素数是指:p的所有约数只有1和p.例如,35不是素数,因为35的约数除了1,35外,还有5与7;29是素数,因为29的约数就只有1和29.试设计一个能够判断一个任意正整数n(n>1)是否为素数的算法.解算法如下:第一步,给出任意一个正整数n(n>1).第二步,若n=2,则输出“2是素数”,判断结束.第三步,令m=1.第四步,将m的值增加1,仍用m表示.第五步,如果m≥n,则输出“n是素数”,判断结束.第六步,判断m能否整除n,①如果能整除,则输出“n不是素数”,判断结束;②如果不能整除,则转第四步.反思感悟设计一个具体问题的算法,通常按以下步骤(1)认真分析问题,找出解决该问题的一般数学方法.(2)借助有关变量或参数对算法加以表述.(3)将解决问题的过程划分为若干步骤.(4)用简练的语言将这个步骤表示出来.跟踪训练3判断一个大于2的整数是否为质数的算法步骤如何设计?解第一步,给定大于2的整数n.第二步,令i=2.第三步,用i除n,得到余数r.第四步,判断“r=0”是否成立.若是,则n不是质数,结束算法;否则,将i的值增加1,仍用i表示.第五步,判断“i>(n-1)”是否成立.若是,则n是质数,结束算法;否则,返回第三步.解方程组的算法设计典例 写出解方程组⎩⎪⎨⎪⎧2x +y =7,①4x +5y =11②的一个算法.解 方法一 (代入消元法) 第一步,由①得y =7-2x .③ 第二步,将③代入②,得4x +5(7-2x )=11.④ 第三步,解④得x =4.第四步,将x =4代入③,得y =-1.第五步,得到方程组的解为⎩⎪⎨⎪⎧x =4,y =-1.方法二 (加减消元法)第一步,①×5-②得,(2×5-4)x =7×5-11.⑤ 第二步,解⑤得x =4.第三步,①×2-②,得(1×2-5)y =7×2-11.⑥ 第四步,解⑥得y =-1.第五步,得到方程组的解为⎩⎪⎨⎪⎧x =4,y =-1.[素养评析] (1)设计算法时,经常遇到解方程组的算法问题,一般是按照数学上解方程组的方法进行设计,但应注意全面考虑方程组解的情况,即先确定方程组是否有解,有解时有几个解,然后依据求解步骤设计算法步骤.(2)从对运算方法的选择,运算程序的设计,到最后求得运算结果,整个过程就是典型的数学运算素养的体现.1.下列关于算法的说法正确的是()A.一个算法的步骤是可逆的B.描述算法可以有不同的方式C.算法可以看成是按照要求设计好的、有限的、确切的计算序列,并且这样的步骤或序列只能解决当前问题D.算法只能用一种方式显示★答案★ B解析由算法的定义知A,C,D错.2.下列叙述中:①植树需要运苗、挖坑、栽苗、浇水这些步骤;②按顺序进行下列运算:1+1=2,2+1=3,3+1=4,…,99+1=100;③从青岛乘火车到济南,再从济南乘飞机到广州;④3x>x+1;⑤求所有能被3整除的正数,即3,6,9,12,….能称为算法的个数为()A.2B.3C.4D.5★答案★ B解析根据算法的含义和特征知,①②③都是算法;④⑤不是算法.其中④只是一个问题,而没有解决问题,不能称为算法;⑤的步骤是无穷的,与算法的有限性矛盾.3.已知直角三角形两直角边长为a,b,求斜边长c的一个算法分下列三步:(1)计算c=a2+b2;(2)输入直角三角形两直角边长a,b的值;(3)输出斜边长c的值.其中正确的顺序是________. ★答案★ (2)(1)(3)解析 算法的步骤是有先后顺序的,第一步是输入,最后一步是输出,中间的步骤是赋值、计算.4.下面是解决一个问题的算法: 第一步:输入x .第二步:若x ≥4,转到第三步;否则转到第四步. 第三步:输出2x -1. 第四步:输出x 2-2x +3.当输入x 的值为________时,输出的数值最小值为________. ★答案★ 1 2解析 所给算法解决的问题是求分段函数f (x )=⎩⎪⎨⎪⎧2x -1,x ≥4,x 2-2x +3,x <4的函数值问题,当x ≥4时,f (x )=2x -1≥2×4-1=7;当x <4时,f (x )=x 2-2x +3=(x -1)2+2≥2,所以f (x )min =2,此时x =1.即输入x 的值为1时,输出的数值最小,最小值为2. 5.下面算法要解决的问题是____________________________. 第一步,输入三个数,并分别用a ,b ,c 表示.第二步,比较a 与b 的大小,如果a <b ,则交换a 与b 的值. 第三步,比较a 与c 的大小,如果a <c ,则交换a 与c 的值. 第四步,比较b 与c 的大小,如果b <c ,则交换b 与c 的值. 第五步,输出a ,b ,c .★答案★ 输入三个数a ,b ,c ,并按从大到小的顺序输出 解析 第一步是给a ,b ,c 赋值. 第二步运行后a >b . 第三步运行后a >c .第四步运行后b >c ,所以a >b >c .第五步运行后,显示a ,b ,c 的值,且从大到小排列.6.写出解二元一次方程组⎩⎪⎨⎪⎧3x -2y =-1,①2x +y =1 ②的算法.解 第一步,①+2×②得7x =1.③ 第二步,解③得x =17.第三步,②×3-①×2得7y =5.④ 第四步,解④得y =57.第五步,得到方程组的解为⎩⎨⎧x =17,y =57.1.算法的特点:有限性、确定性、逻辑性、普遍性、不唯一性. 2.算法设计的要求:(1)写出的算法必须能够解决一类问题(如判断一个整数是否为质数,求任意一个方程的近似解等),并且能够重复使用.(2)要使算法尽量简单,步骤尽量少.(3)要保证算法正确,且算法步骤能够一步一步执行,每步执行的操作必须确切,不能含混不清,而且在有限步后能得到结果.一、选择题1.下列可以看成算法的是( )A .学习数学时,课前预习,课上认真听讲并记好笔记,课下先复习再做作业,之后做适当的练习题B .今天餐厅的饭真好吃C .这道数学题难做D .方程2x 2-x +1=0无实数根★答案★ A解析 A 是学习数学的一个步骤,所以是算法.2.在用二分法求方程零点的算法中,下列说法正确的是( )A .这个算法可以求所有的零点B .这个算法可以求任何方程的零点C .这个算法能求所有零点的近似解D .这个算法可以求变号零点的近似解★答案★ D解析 二分法的理论依据是函数的零点存在性定理.它解决的是求变号零点的问题,并不能求所有零点的近似值.3.如下算法:第一步,输入x 的值.第二步,若x ≥0,则y =x .第三步,否则,y =x 2.第四步,输出y 的值.若输出的y 值为9,则x 的值为( )A .3B .-3C .3或-3D .-3或9 ★答案★ D解析 根据题意可知,此为分段函数y =⎩⎪⎨⎪⎧x ,x ≥0,x 2,x <0的算法, 当x ≥0时,x =9;当x <0时,x 2=9,所以x =-3.综上所述,x 的值是-3或9.4.对于算法:第一步,输入n .第二步,判断n 是否等于2,若n =2,则n 满足条件;若n >2,则执行第三步.第三步,依次从2到(n -1)检测能不能整除n ,若不能整除n ,则执行第四步;若能整除n ,则结束算法.第四步,输出n.满足条件的n是()A.质数B.奇数C.偶数D.合数★答案★ A解析此题首先要理解质数,只能被1和自身整除的大于1的整数叫质数.2是最小的质数,这个算法通过对2到(n-1)一一验证,看是否有其他约数,来判断其是否为质数.5.有蓝、黑两个墨水瓶,但现在却错把蓝墨水装在了黑墨水瓶中,黑墨水错装在了蓝墨水瓶中,要求将其互换,现有空墨水瓶若干,解决这一问题最少需要的步骤数为()A.2 B.3C.4 D.5★答案★ B解析第一步,将蓝墨水装到一个空墨水瓶中;第二步,将黑墨水装到黑墨水瓶中;第三步,将蓝墨水装到蓝墨水瓶中,这样就解决了这个问题,故选B.6.早上从起床到出门需要洗脸刷牙(5min)、刷水壶(2min)、烧水(8min)、泡面(3min)、吃饭(10min)、听广播(8min)几个过程.下列选项中最好的一种算法是()A.第一步,洗脸刷牙.第二步,刷水壶.第三步,烧水.第四步,泡面.第五步,吃饭.第六步,听广播B.第一步,刷水壶.第二步,烧水同时洗脸刷牙.第三步,泡面.第四步,吃饭.第五步,听广播C.第一步,刷水壶.第二步,烧水同时洗脸刷牙.第三步,泡面.第四步,吃饭同时听广播D.第一步,吃饭同时听广播.第二步,泡面.第三步,烧水同时洗脸刷牙.第四步,刷水壶★答案★ C解析最好算法的标准是方便、省时、省力.A中共需5+2+8+3+10+8=36(min),B中共需2+8+3+10+8=31(min),C中共需2+8+3+10=23(min),D中共需10+3+8+2=23(min),但算法步骤不合理,最好的算法为C.7.对于求18的正因数,给出下列两种算法:算法1:第一步,1是18的正因数,将1列出.第二步,2是18的正因数,将2列出.第三步,3是18的正因数,将3列出.第四步,4不是18的正因数,将4剔除.……第十八步,18是18的正因数,将18列出.算法2:第一步,18=2×9.第二步,18=2×32.第三步,列出所有的正因数1,2,3,32,2×3,2×32.则这两个算法()A.都正确B.算法1正确,算法2不正确C.算法1不正确,算法2正确D.都不正确★答案★ A解析算法1是用1~18的整数逐一验证,得出正因数.算法2是利用因数分解得到18的正因数.两种算法都正确.故选A.8.一个算法步骤如下:第一步,S取值0,i取值1.第二步,若i≤9,则执行第三步;否则,执行第六步.第三步,计算S+i并用结果代替S.第四步,用i+2的值代替i.第五步,转去执行第二步.第六步,输出S.运行以上算法,则输出的结果S等于()A.16 B.25C.36 D.以上均不对★答案★ B解析解本题关键是读懂算法,本题中的算法功能是求S=1+3+5+7+9=25.9.结合下面的算法:第一步,输入x.第二步,判断x是否小于0,若是,则输出x+2,否则执行第三步.第三步,输出x-1.当输入的x的值为-1,0,1时,输出的结果分别为()A.-1,0,1 B.-1,1,0C.1,-1,0 D.0,-1,1★答案★ C解析 依据算法可知,当x =-1时,满足x <0,则输出x +2=-1+2=1;当x =0时,不满足x <0,则输出x -1=0-1=-1;当x =1时,不满足x <0,则输出x -1=1-1=0.故选C.二、填空题10.下面给出了解决问题的算法:第一步:输入x .第二步:若x ≤1,则y =2x -1,否则y =x 2+3.第三步:输出y .(1)这个算法解决的问题是________;(2)当输入的x 值为________时,输入值与输出值相等.★答案★ (1)求分段函数y =⎩⎪⎨⎪⎧2x -1,x ≤1,x 2+3,x >1的函数值 (2)111.以下是解二元一次方程组⎩⎪⎨⎪⎧2x -y +6=0,①x +y +3=0 ②的一个算法,请将该算法补充完整. 第一步,①②两式相加得3x +9=0.③第二步,由③式可得________.④第三步,将④式代入①式得y =0.第四步,输出方程组的解为________.★答案★ x =-3 ⎩⎪⎨⎪⎧x =-3,y =0 解析 该算法的流程实质是解二元一次方程组的过程,由消元法易得.12.下面是求15和18的最小公倍数的算法,其中不恰当的一步是________.第一步,先将15分解素因数:15=3×5.第二步,然后将18分解素因数:18=32×2.第三步,确定它们的所有素因数:2,3,5.第四步,计算出它们的最小公倍数:2×3×5=30.★答案★ 第四步解析 素因数2,3,5的最高指数是1,2,1,算出它们的最小公倍数为2×32×5=90.三、解答题13.某商场举办优惠促销活动.若购物金额在800元以上(不含800元),打7折;若购物金额在400元以上(不含400元),800元以下(含800元),打8折;否则,不打折.请为商场收银员设计一个算法,要求输入购物金额x ,输出实际交款额y .解 算法步骤如下:第一步,输入购物金额x(x>0).第二步,判断“x>800”是否成立,若是,则y=0.7x,转第四步;否则,执行第三步.第三步,判断“x>400”是否成立,若是,则y=0.8x,转第四步;否则,y=x.第四步,输出y,结束算法.14.下面算法的功能是()第一步,令i=1.第二步,i除以3,得余数r.第三步,若r=0,则输出i;否则,执行第四步.第四步,令i的值增加1.第五步,若i≤1000,则返回第二步;否则,算法结束.A.求3的倍数B.求1至1000中3的倍数C.求i除以3D.求i除以3的余数★答案★ B解析由第二步和第三步可知,输出的是3的倍数,由第四步和第五步可知,输出的是1至1000中3的倍数.15.如图所示,汉诺塔问题是指有3根杆子A,B,C,杆子上有若干碟子,把所有的碟子从B杆移动到A杆上,每次只能移动一个碟子,大的碟子不能叠在小的碟子上面.把B杆上的3个碟子全部移动到A杆上,最少需要移动的次数是________.★答案★7解析直接进行分析,将最小的碟子命名为①,中间的碟子命名为②,最大的碟子命名为③,进行如下移动:①→A,②→C,①→C,③→A,①→B,②→A,①→A,此时按要求全部放好,移动7次.。

数据结构与算法分析课后习题答案

数据结构与算法分析课后习题答案

数据结构与算法分析课后习题答案第一章:基本概念一、题目:什么是数据结构与算法?数据结构是指数据在计算机中存储和组织的方式,如栈、队列、链表、树等;而算法是一系列解决问题的清晰规范的指令步骤。

数据结构和算法是计算机科学的核心内容。

二、题目:数据结构的分类有哪些?数据结构可以分为以下几类:1. 线性结构:包括线性表、栈、队列等,数据元素之间存在一对一的关系。

2. 树形结构:包括二叉树、AVL树、B树等,数据元素之间存在一对多的关系。

3. 图形结构:包括有向图、无向图等,数据元素之间存在多对多的关系。

4. 文件结构:包括顺序文件、索引文件等,是硬件和软件相结合的数据组织形式。

第二章:算法分析一、题目:什么是时间复杂度?时间复杂度是描述算法执行时间与问题规模之间的增长关系,通常用大O记法表示。

例如,O(n)表示算法的执行时间与问题规模n成正比,O(n^2)表示算法的执行时间与问题规模n的平方成正比。

二、题目:主定理是什么?主定理(Master Theorem)是用于估计分治算法时间复杂度的定理。

它的公式为:T(n) = a * T(n/b) + f(n)其中,a是子问题的个数,n/b是每个子问题的规模,f(n)表示将一个问题分解成子问题和合并子问题的所需时间。

根据主定理的不同情况,可以得到算法的时间复杂度的上界。

第三章:基本数据结构一、题目:什么是数组?数组是一种线性数据结构,它由一系列具有相同数据类型的元素组成,通过索引访问。

数组具有随机访问、连续存储等特点,但插入和删除元素的效率较低。

二、题目:栈和队列有什么区别?栈和队列都是线性数据结构,栈的特点是“先进后出”,即最后压入栈的元素最先弹出;而队列的特点是“先进先出”,即最先入队列的元素最先出队列。

第四章:高级数据结构一、题目:什么是二叉树?二叉树是一种特殊的树形结构,每个节点最多有两个子节点。

二叉树具有左子树、右子树的区分,常见的有完全二叉树、平衡二叉树等。

算法设计与分析PPT课件

算法设计与分析PPT课件

数组
输出
1 0,0,2 1 2 3
2
1,1,2 0,0,2
123
,2,2
3 1,1,2 1 2 3 1 2 3
0,0,2
2
2,1,2 0,0,2 1 3 2
,2,2
3 2,1,2 1 3 2 1 3 2
0,0,2
2
2,1,2 0,0,2
123
1 1,0,2 2 1 3
层次 栈状态 (i, k, m)
个函数是双递归函数。 Ackerman函数A(n,m)定义如下:
A(1,0)2
A(0,m)1
A(n,0)n2
m0 n2
A(n,m)A(A(n1,m),m1) n,m1
Ackerman函数无法找到非递归的定义。
28
Ackerman函数
A(1,0)2
A(0,m)1
A(n,0)n2
m0 n2
A(n,m)A(A(n1,m),m1) n,m1
P n ( x ) ( ( ( a n x ( a n 1 ) ( a n 2 ) x a n 3 ) ) x a 1 ) x a 0
T(n)n
Horner(int a[n+1],real x) { int p= a[n];
for (i=1;i<=n;i++) p=p*x+a[n-i]; return p; }
算法复杂性是算法运行所需要的计算机资源的量, 需要时间资源的量称为时间复杂性,需要的空间资源的 量称为空间复杂性。这个量应该只依赖于算法要解的问 题的规模、算法的输入和算法本身的函数。如果分别用 n、I和A表示算法要解问题的规模、算法的输入和算法 本身,而且用C表示复杂性,那么,应该有C=F(n,I,A)。 一般把时间复杂性和空间复杂性分开,并分别用T和S来 表示,则有: T=T(n,I)和S=S(n,I) 。
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

1.3. 分析复杂度的基本步骤
五、复杂度比较示意图
各种复杂度比较示意图如下。
1.4. 复杂度的有关概念
一、算法时间复杂度

对于算法的时间复杂度,通常从分平均、最坏、最好几种情 形来衡量,尤其是前两种。 算法的平均复杂性 设Dn是对于所考虑问题来说大小为n的输入的集合,并设i 是Dn的一个元素,p(i)是i出现的概率,t(i)是算法在输入i时 所执行的基本运算次数。那么,算法的平均复杂性定义为: A(n)= i∈Dn p(i)t(i) 算法的最坏复杂性 W(n)= MAX i∈Dnt(i)

在最坏情况下,ti i+1, for 1 i <n;
n(n 1) (i 1) 1 2 i 1
n 1
i
i 1
n 1
n(n 1) 2
Tmax (n) c1n c2 (n 1) c3 (n 1) n(n 1) n(n 1) n(n 1) c4 1 c5 c6 c7 (n 1) 2 2 2 c c c c c c 4 5 6 n 2 c1 c2 c3 4 5 6 c7 n (c2 c3 c4 c7 ) 2 2 O(n 2 )
循环体内计算时间*所有循环次数;
(3)顺序语句 各语句计算时间相加; (4)if-else语句 if语句计算时间和else语句计算时间的较大者。
template<class Type> void insertion_sort(Type *a, int n) { Type key; // for (int i = 1; i < n; i++){ // key=a[i]; // int j=i-1; // while( j>=0 && a[j]>key ){ // a[j+1]=a[j]; // j--; // } a[j+1]=key; // } }
① 复杂度渐近表示的记号:O, , ② 平均时间复杂度,最坏时间复杂度,最好时间复杂度
③ 最优算法

分析算法复杂度的基本方法
① 分析算法时间复杂度的步骤
② 基本运算执行频数的统计方法

数学知识:求和公式、定积分近似求和、递归方程 的求解
学习要求
掌握算法复杂度的基本概念
熟悉算法复杂度分析的基本方法
1.3. 分析复杂度的基本步骤
一、选取一种运算作为基本运算(basic operation)

对算法的分析必须脱离具体的计算机结构和程序设计语言。 因此,比较两个算法的好坏,看其中所需的运算时间的长短 是由算法所需的运算次数决定的。任何一个算法都可能有几 种运算,因此,我们抓住其中影响算法运行时间最大的运算 作为基本运算。如在一个字表中寻找Z的问题,把Z和表中元 素的比较作为基本运算。两个实数矩阵相乘的问题中,则把 两个实数相乘作为基本运算。
1.3. 分析复杂度的基本步骤
四、举例
[例1] 设f(n)=10n2+20n。则有 f(n)=O(n2) f(n)=(n2) f(n)= (n2) [例2] 设f(n)=aknk+ak-1nk-1+…+a1n+ a0 ,(ak>0)。则有 f(n)=O(nk) f(n)=(nk) f(n)= (nk)
1.3. 分析复杂度的基本步骤
3.数集到非负实数集上的 函数。如果存在一个自然数n0和两个正常数c1, c2,使得对于任意的n≥n0 ,均有 c1g(n)≤f(n)≤c2g(n),则,f(n)= (g(n))。 含义: 阶恰好为g(n)的函数。

读法: (g(n))读作“theta g(n)”。
1.3. 分析复杂度的基本步骤
基本运算(basic operation)
在一个算法中,出现的频数最高(在相差一个常数因子的 意义上)的元运算称为基本元算。
常见的基本运算
当分析查找和排序的算法时,如果元素的比较是元运算,


则可作为基本运算; 在矩阵乘法的算法中,数的乘法可作为基本运算; 当遍历链表时,给指针赋值或者更新指针的操作可作为基本 运算; 在图的遍历中,可以将访问节点的操作为基本运算;等等。
第1章 算法分析的基本概念和方法
内容提要
一、算法及其特性
二、算法的时间空间复杂度 三、算法分析(Algorithm Analysis) 1.分析算法时间复杂度的基本步骤 2.算法时间复杂度的有关概念
3.分析、求解算法复杂度的方法
四、最优算法(optimal algorithm)
知识要点

算法分析的概念
i 1 i 1 i 1
n 1
n 1
n 1

在最好情况下,ti=1, for 1 i <n;
Tmin (n) c1n c2 (n 1) c3 (n 1) c4 (n 1) c7 (n 1)
(c1 c2 c3 c4 c7 )n (c2 c3 c4 c7 ) O(n)


算法的空间复杂度:在算法运行期间所需要的内存空间,通 常指除开容纳输入数据之外的附加空间(auxiliary space, or work space)。 通常用渐进形式表示。比如,S(n)= O(n2)、(n2)或 (n2)
1.2. 算法的时间空间复杂度
三、 算法分析 (Algorithm Analysis)
1.1.算法及其特性

一、 算法(algorithm)
算法就是一组有穷的规则,它们规定了解决某 一特定类型问题的一系列运算。

二、算法的五个特性
① 确定性 ② 能行性
③ 有穷性
④ 输入 ⑤ 输出
1.1.算法及其特性
三、衡量算法性能的标准
衡量算法性能一般有下面几个标准: 确定性 易读性 健壮性 算法的时间和空间性能:高效率和低存储空间 本课程中主要讨论算法的时间和空间性能,并以此作为衡量 算法性能的重要标准,而且主要侧重于时间方面。
1.3. 分析复杂度的基本步骤
四、举例
[例3] 设f(n)= 2n ,g(n)= n! 。则有 f(n)=O(g(n)) 但是,f(n)(g(n)) 因此,f(n) (g(n))
此时,记作O(f(n)) < O(g(n))。
1.3. 分析复杂度的基本步骤
五、复杂度比较示意图
各种复杂度比较示意图如下。
[例2] 直接插入排序算法1.5。
以元素的比较作为基本操作。 最好情况下的时间复杂度: (n) 最坏情况下的时间复杂度: (n2 ) 在等概率前提下,平均情况下的时间复杂度:(n2 )
算法分析的基本法则

非递归算法:
(1)for / while 循环 循环体内计算时间*循环次数; (2)嵌套循环
cost c1 c2 c3 c4 c5 c6 c7
times n n-1 n-1 sum of ti sum of (ti-1) sum og (ti-1) n-1
T (n) c1n c2 (n 1) c3 (n 1) c4 t i c5 (t i 1) c6 (t i 1) c7 (n 1)
1.3. 分析复杂度的基本步骤
元运算(elementary operation)

一个计算步骤,如果其时间耗费总是不超过某个常 量,而与输入和算法无关,则称之为元运算。
常见的元运算
算术运算:加、减、乘、除; 比较和逻辑运算; 赋值运算,包括指针赋值(比如,在遍历表或树时 的指针赋值);等等。
1.3. 分析复杂度的基本步骤
三 、渐近时间复杂度(asymptotic time complexity)
在实际中精确地求一个算法的基本运算次数f(n)等于多 少,往往不容易,甚至有时根本不可能,有些即使求出结果 很长,很繁琐,不易比较,需要简化。这时候我们可以不精 确地估计f(n)。此外,我们分析算法的时间目的主要在于, 能区分不同算法的优劣,在n很小时候,差别不大,随着n的 逐渐增大,差别越来越大,是个极限行为。基于上述原因, 引进下面渐近表示的方法。复杂度渐近表示可以将简洁地表 示出复杂度的数量级别。
(2)Tmin(n) = min{ T(i) | size(i)=n }=O(1)
(3)在平均情况下,假设: (a) 搜索成功的概率为p ( 0 p 1 ); (b) 在数组的每个位置i ( 0 i < n )搜索成功的概率相同,均为 p/n。
Tavg (n)
size ( I ) n
1.2. 算法的时间空间复杂度
一、算法的时间复杂度(Time Complexity)

算法的时间复杂度:在算法运行期间所花费的时间。 通常用渐进形式表示。比如,T(n)= O (n2)、 (n2) 或 (n2)
1.2. 算法的时间空间复杂度
二、算法的空间复杂度(Space Complexity)

1.3. 分析复杂度的基本步骤
2. -记号
设f(n)和g(n)均是从自然数集到非负实数集上的 函数。如果存在常数c>0和一个自然数n0,使得 对于任意的n≥n0 ,均有 f(n)≥cg(n),则,f(n)= (g(n))。 含义: 阶至少为g(n)的函数,即下限。

读法: (g(n))读作“omega g(n)”。
算法分析方法

例:顺序搜索算法
template<class Type>
int seqSearch(Type *a, int n, Type k)
{ for(int i=0;i<n;i++) if (a[i]==k) return i; return -1; }
相关文档
最新文档