单元三 · 用算法解决问题

第10课 猜数游戏有捷径

任务场景
任务场景:猜数游戏有捷径

一、学习目标

  • 通过猜数游戏认识二分法,从具体情境中确定二分法查找的对象、范围和判断条件。
  • 了解二分法在生活中的应用,知道用二分法解决简单的实际问题,初步体会用算法解决问题的优势。

二、情境导入

小智和爸爸玩猜数游戏,爸爸总能很快就猜中。小智好奇爸爸为什么这么快,爸爸告诉小智,自己运用了一种名为「二分法」的算法。

想一想:你是不是也想提高自己猜数的速度呢?一起来探索这个算法吧!

三、核心讲解

本课学习路径:

1体验猜数游戏
2二分法查找的算法描述
3用二分法解决问题

1.体验猜数游戏

两个同学一组,依据以下规则,玩一玩猜数游戏。

  • 有一个 1 到 100 之间的自然数,通过猜测的方式来确定这个数。
  • 每次猜测并说出一个数后会得到一个提示:说出的数相对于要猜的数是大了还是小了,或者猜对了。
  • 通过不断缩小数值范围来逼近要猜测的数,直到猜对这个数。

一位同学默想一个数,让另一位同学猜。两位同学各猜一轮,记录猜测的次数和结果。例如:第 1 次猜 50,判断结果「小了」,猜数范围变为 51~100。

观察猜数范围的变化规律:如果猜的数不正确,猜数的范围就可以根据猜数的位置逐渐缩小,直到找到符合的数。猜数范围越小,猜出指定数的可能性就越大。那么,是否有快速缩小猜数范围的算法呢?

认识二分法:二分法是一种高效的搜索算法,适用于在有序数据中查找目标数。二分法通过将查找范围不断分成两半,并与目标值进行比较,选取目标值所在的那一半,从而迅速缩小查找范围。在 1~100 范围内,最多只需猜 7 次左右。

2.二分法查找的算法描述

扩大猜数范围至 1~1000,利用二分法继续猜数。一个同学默默想一个数,另一个同学猜,直到猜对为止,记录猜测的次数和范围。

当数值范围扩大到 1~1000 时,用二分法来猜所需次数大约是 10 次。如果继续把数值范围扩大到 1~10000、1~100 万,所需的猜测次数大约分别是 14 次和 20 次。相比按顺序依次猜测的方式,猜测次数大大减少了。

二分法查找的算法描述:

  1. 在要查找的一组有序数中,取中间位置的数与要查找的数比较,如果两者相等,则查找成功。
  2. 如果不相等,就以中间位置的这个数为分界,把这组数分成两部分。中间位置的数大于查找数,则进一步查找比这个数小的那部分;否则进一步查找比这个数大的那部分。
  3. 重复以上两个步骤,直到找到满足条件的数。

流程图:二分法猜数(缩小范围循环)

开始设定 low、high取中间数 midmid ≠ 秘密数?是偏大则缩小 high偏小则增大 low继续循环否输出:猜中

3.用二分法解决问题

在早上 8 时到晚上 8 时之间,快递员放在小区货架上的一箱货物不知道被谁错拿了,但有监控摄像头一直可以拍报到这个货架。现在需要查看监控视频,找到拿错快递的人。请想办法提高查看监控视频的效率。

方法提示:利用二分法查看监控视频,即首先查看视频的中间处(下午 2 时),看丢失的货物是否还在。如果还在,就继续查看后半段视频的中间处(下午 5 时);如果不在,就查看前半段视频的中间处(上午 11 时)。以此类推,不断缩小查看的范围。

本课新语法与图形块

本课首次出现:条件循环 while。二分猜数思路见课文;载入后对照积木。

语法图形块说明
while 条件:
…
重复执行
条件成立就一直重复

弄清以上要点后,再进入下方 Python Online,用程序体验二分猜数。

四、动手体验 · Python 3 Online 编程

本课含 2 个程序,请在下拉中切换后分别「载入」运行。

五年级 · 程序自动用二分法逼近秘密数 37,观察每一步猜测。

五、课堂总结

  • 利用二分法猜数,可以快速缩小要猜的数值范围。
  • 在实际生活中,合理利用二分法来解决问题,可以提高效率。
  • 使用算法解决问题时,不同的算法对问题解决的效率也会不同,不同的数据规模也会影响算法的效率。

六、拓展提升

  • 「猜一猜我在哪里」游戏。下图中的一个圆圈表示一个位置,一位同学想定一个位置并写下来,让另一位同学猜这个位置,每猜一次提示对方偏向了哪个方向,直到猜对为止。
  • 猜位置游戏示意图
    下图:每个圆圈表示一个位置

测评

选出后点「检查」。答错会显示简短说明。

  1. 二分法猜数时,每次应猜哪个数?

  2. 把猜数范围从 1~100 扩大到 1~1000,用二分法猜测次数大约变为多少?

  3. 判断:查找错拿快递的人时,从监控视频中间时间点查起、再缩小范围,体现了二分法。

本节小结

二分法每次把搜索范围缩小一半,猜数、查监控都能事半功倍。算法选对了,数据规模再大也不怕——这就是用算法解决问题的优势。