编程-scratch-算法初体验-01(穷举法)

人的算法叫做人算,天的算法叫做天算,按照这种简称方式,那么计算机的算法难道叫做“计算”?感觉瞬间降了几个档次呀!不过总算还是比“算计”来得好。以上纯属插科打诨,下面进入正题。

依旧是本着生涯教育的第一步——通识教育为出发点,除了从计算机语言方面的学习来了解信息技术之外,通过对基础算法的学习,不仅可以深入了解计算机如何“思考”,而且还可以提升自我的逻辑思维能力以及解决问题的能力。另外,算法是独立于语言之外的,而语言只是实现算法的媒介,所以,当您理解了相关的算法之后,就可以用不同的语言在计算机上实现,比如c、c++、java、python、scratch等等,甚至在现实世界中,有意识地将算法加入到自己的方法体系中,以应付这个万千世界。

本系列课程面向对象为小学三年级以上学生,为使在学习算法的过程中,更便于不同业界大佬在计算机上实操,课程将借助scratch来实现算法。(不懂scratch的同学可以百度搜索一下,只要你懂得搭建积木,那么入门还是非常容易的,这里不赘述。考虑部分同学可能第一次接触scratch,所以本课针对算法的实现过程录制了微课视频)因为课程主要介绍基础算法部分内容,相信大部分同学也是第一次接触算法,顾,本课程题为——《算法初体验》。

壹·地毯式搜索

 

一天,小A的爷爷来学校接小A回家,因为重新分了班,小A的爷爷只记得小A的教室在5楼,但不记得具体是哪个教室哪个班级了。所以他上到5楼之后,就从第一个教室开始找,没有,就到第二个教室找,再没有,就到第三个教室找,就这样一个教室一个教室找直到找到小A为止。找到小A了后,如果5楼的教室还有很多,那小A的爷爷还需要继续去剩下的教室找吗?

在这种情形下,当然是不用了。

刚才小A爷爷找小A其实就是要解决一个搜索问题,我们来分析一下,解决搜索问题一般有哪些步骤。

第一步,确定要找的东西,也就是要找的目标,在开头的故事中就是“小A”;

第二步,确定你要搜哪里,也就是搜索的范围,在开头的故事中就是5楼的教室;

第三步,确定你如何展开搜索,也就是搜索的方法,在开头的故事中小A的爷爷用的是什么方法呢?对了,就是穷举法

其实,日常生活中我们经常会用到穷举法来找东西,特别是在凌乱无序的房间里找东西;在解决数学问题的过程中,我们也会用穷举法来帮助我们找到符合问题所要的答案,比如中国古代的百鸡问题等等;在计算机的世界里,穷举法则是求解问题最常用的方法之一。

 

 

贰·千篇不如一例

说一千道一万,不如来一个实例,我们一起来看下面一道练习:新建一个列表,随机生成12个数字插入到列表中。用户输入一个数字,利用穷举法判断这个数字在不在这个列表里,如果在,则返回这个数字在列表中首次出现的序号,否则,返回“不存在”。

比如:下面的列表,输入“10”,返回“您查找的数字在第8项”。输入“50”,返回“您查找的数字不存在”。输入“19”,返回什么呢?这里我们只需要知道这个数字在不在列表中,而且题目要求只需要返回列表中首次出现的序号,所以我们只需要返回“您查找的数字在第4项”就可以了。

接下来,我们用scratch来实现一下,具体看如下步骤:(同学也可以直接观看步骤后紧接着的微课视频)

1、这里用“空格”来作为触发一个开始的事件

2、新建一个列表:命名很重要,我们把这个列表命名为“RandomList”--随机列表。

3、为了多次使用,首先要“初始化”列表,清空列表:每一个软件都会有一个最初的状态,这个最初的状态在计算机的世界里通常通过“初始化”来实现。

4、利用随机数,运用循环结构,将随机生成12个数字插入到列表中。

5、现在要开始询问用户需要查找什么数字了,我们用到“询问”积木块,询问句子可以为“请输入您要查找的数字。”

6、scratch执行到这里会自动等待用户输入结果,结果会存在“回答”里。

7、接收到用户的“回答”后,我们要开始用用户“输入”的回答进行判断。

8、判断的对象就是列表中的每一个数,我们利用穷举法,一个一个来进行比较判断,当我们找到用户要的结果时,按照题目要求,我们不需要再寻找下去了,直接跳出循环。这边我们用“重复执行直到”来进行判断,结束循环的条件有两个:一个是找到了;另一个是找遍了没找到。

9、为了能够标识我们现在比较的是列表中的第几项,我们需要新增一个变量来标记当前比较的是列表中的第几项,变量的名字也是非常重要的,一般根据变量的作用和功能来取名。这边的变量主要是用来记住现在我们在判断列表中的第几项。类似这样的变量我们通常叫做“下标”,这里我们用“Index”来命名它。

10、一开始,我们需要把Index的值标记为项目中的第一项,然后在循环的判断条件中,找到了意味着“列表中的第Index项”等于“回答”,找遍了没找到意味着“Index”大于“列表中的项目数”。

11、循环体结束后,我们做以下工作,利用选择结构来输出反馈的结果。

12、按照题目要求,如果“Index”大于“列表中的项目数”,那么我们回答“你查找的数字不存在”,否则,我们回答“您查找的数字在第Index项”。这里我们用到了字符串的连接。

13、好了,接下来,我们按下“空格键”可以测试啦。

14、如果没问题,我们把完成的穷举法练习代码保存起来,保存的文件名命名也很重要,这里我们可以取名为:“算法初体验_穷举法”。

不熟悉scratch的同学可以通过关注微信公众号,到以下链接的微课视频进一步了解实现过程:

https://mp.weixin.qq.com/s/b0H_6g3i9p9IOMf98zlwGg

具体代码参考如下:

叁·归纳小结实战巩固

实现了人生中第一个算法,非常有成就感有木有。那么接下来我们扩展下,现在小A作为学生干部,要检查5楼的教室的卫生情况,看哪些是没打扫干净的,这里搜索目标是“没打扫干净的教室”搜索范围是“5楼的教室”搜索方法这里当然也需用到穷举法,即“一个教室一个教室去检查”,但是跟我们开头的故事有点不同的是,这里如果检查到了有一间教室卫生状况不好,那小A就停止下来不继续检查剩下的教室了吗?当然不是,在这里,小A需要把所有的教室都检查一遍,然后把卫生状况不好的教室统一列出来。

在这里体现了穷举法的基本思想:列举出所有可能的情况,逐个判断有哪些是符合问题所要求的条件,从而得到问题的全部解答

总之,穷举法是可以解决搜索问题的一种方法,解决搜索问题,我们有三个步骤,分别是确定目标,确定范围,最后,根据目标和范围来确定搜索的方法。

同学们可以通过以下的课后习题巩固一下今天所学的新知,新建一个列表,随机生成20个数字插入到列表中。用户输入一个数字,利用穷举法判断这个数字在不在这个列表里,如果在,则返回这个数字在列表中的所有序号,否则,返回“不存在”。

比如:下面的列表,输入“10”,返回“第8项”。输入“50”,返回“不存在”。输入“19”,返回“4,5”,这里我们看到第4项和第5项都是数字19,所以返回值应该是这两个序号。

 

肆·走出舒适区

村上说:“痛楚不可避免,磨难却可以选择”,疫情当前,很多同学在玩游戏,满足于及时反馈带来的低级成就感,而更多的同学在不断地夯实自己的基础知识、基本技能,甚至乎用自己所学的知识来做游戏、制定游戏规则。希望自觉的学生习得更多的技能和知识,也期盼不自觉的学子早日醒悟。

scratch的教学多数是以制作游戏或者动画为主,本系列课程也想借此来跟大家分享其实scratch还可以做更多有趣的事情。当然了,课程根本目的是为了与大家一起来学习基础的算法,“技多不压身”,期盼大家走出舒适区,就如同肌肉成长一样,不破不立。

 

识别二维码关注“梅外成长记”公众号,跟您一起成长,一起终身学习

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章