(共24张PPT)
第14课 算法效率比一比
授课人:曾老师
第四单元 发挥算法的优势
学习目标
知道解决同一个问题可以有不同的算法,不同的算法具有不同的效率。
1
通过实例比较和算法分析,了解算法执行的关键步骤和执行次数,体会算法存在的效率差异。
2
情境思考
课堂导入
一堆物体摆放如下图所示,要统计有多少个,你能想到哪些方法?
学习活动
一 用不同方法统计物体数量
三 感受不同算法的运算效率
二 累加运算的效率分析
学习活动
学习活动一:用不同方法统计物体数量
学习活动1:用不同方法统计物体数量
第一种算法:把物体逐层进行累加
通过数一数每层的物体个数,发现其中的变化规律。
物体共 10 层,从上到下,每层分别是 1 至 10 个。
1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 = 55
学习活动1:用不同方法统计物体数量
第二种算法:通过求平行四边形中物体的个数来计算
利用正反放置的两个梯形组成平行四边形
平行四边形中物体的个数 = 每层个数 × 层数 =(1+10)×10=110 个
梯形中物体个数 = 平行四边形中物体的个数 ÷2 = 110÷2 = 55 个
累加之和 = ( 第一个数 + 最后一个数 ) × 数的总个数 ÷2
学习活动二:累加运算的效率分析
学习活动2:累加运算的效率分析
通过比较发现:
算法1简单直观,易于理解;算法2所用的步数较少,计算起来更快。
算法一
算法二
解决同一个问题时,不同的算法会有不同的步骤,也存在不同的效率。
学习活动2:累加运算的效率分析
解决某个问题可能会有多种不同的算法,如何评价算法的“好”与“差”呢
学习活动2:累加运算的效率分析
通常,用计算机解决问题时会用以下两种方法来比较算法的效率:
一是比较算法运行所需要的时间。
二是比较算法运行时所需的步数或者占用的资源。
衡量计算机在运行程序时的效率,没有统一的标准,通常选择只比较其中的一个方面。
下面主要从时间上来进行分析。
学习活动2:累加运算的效率分析
大家听过数学家高斯小时候计算“1+2+3+…+100”的故事吧?
高斯使用第二种算法很快给出了答案,比所有其他孩子的速度都快。
我们先来做一个“合理假设”:
做 1 次加法用时 1 秒
做 1 次乘法用时 10 秒
做 1 次除法用时 15 秒
学习活动2:累加运算的效率分析
第一种算法:逐个进行累加
1+2+3+…+100
99次加法
每次加法用时1秒
总共需要99秒
第二种算法:根据公式计算
s = (1+n)* n / 2
只需要一次加法(1+100)用时1秒
1次乘法(101×100)用时10秒
1次除法(除以2)用时15秒
总共需要26秒
单从计算步骤和时间上看,第 种算法似乎更高效。
这就是在“合理假设”前提下,高斯比其他同学算得更快的一种解释。
学习活动2:累加运算的效率分析
但是,问题并没有那么简单。
因为做乘法和除法时,通常比做加法需要更长时间。
因此,如果以上假设并不成立,比如,如果做 1 次乘法或 1 次除法都需要 50 秒,那么用第二种算法所需的时间就会变成 1 + 50 + 50 =101 秒 。
从用算法解决问题的角度看,要准确地比较不同算法的效率,往往比我们预想的要难很多。通常需要从数据量、步骤多少、所需时间等方面综合考虑。
学习活动三:感受不同算法的运算效率
学习活动3:感受不同算法的运算效率
解决同一个问题通常可以用不同的算法,选择不同算法并编程实现后,程序一般会在运算速度、计算精度等方面有不同的表现。
下面通过用程序验证上述累加运算的两种算法:
“累加 1.py”程序是用算式直接累加与用公式累加的对比。
“累加 2.py”程序是用循环结构实现累加与用公式累加的对比。
学习活动3:感受不同算法的运算效率
在“累加 1.py”程序中,操作步骤如下:
第 1 步:打开配套资源中的“累加 1.py”程序,运行这个程序。
第 2 步:输入要重复执行的次数,观察运行结果。例如,分别输入500、1 000、10 000、100 000 等,对比两种算法所用的时间。
算式直接累加
公式累加
学习活动3:感受不同算法的运算效率
在“累加 2.py”程序中,操作步骤如下:
第 1 步:输入要重复执行的次数,观察运行结果。例如,同样分别输入500、1 000、10 000、100 000 等。
第 2 步:尝试用更多更大的数进行反复实验。这样经由多次数值实验得出的结论会更加趋于稳定,也更加可靠。
循环结构实现累加
公式累加
学习活动3:感受不同算法的运算效率
为何使用高斯公式比使用 for 循环逐个相加快?
需要执行 n 次加法,计算时间随 n 增大而线性增长。
只需要 3 次运算(1 次加法、1 次乘法、1 次整数除法),计算时间恒定。
课堂总结
课堂总结
1.解决同一个问题时,不同的算法会有不同的步骤,也就存在不同的效率。
2.用计算机解决问题时,通常会从执行步骤、执行时间、内存占用等方面比较算法的效率。
3.有些人计算起来较困难的问题,可以尝试通过算法利用计算机来解决,充分发挥计算机的计算速度和存储能力优势。
拓展与提升
拓展与提升
圆周率作为数学中的一个重要常数,其更多位数的精确值求解一直是数学家们所追求的。
配套资源中有两个计算圆周率的程序,打开这两个程序并运行,对比计算圆周率的效率。
好 好 学 习
天 天 向 上
授课人:曾老师