当前位置:首页 期刊杂志

中学信息技术课程中渗透算法思想的二进制教学实践研究

时间:2024-05-18

文 / 北京市第八十中学 贾志勇 中国科学院附属实验学校 王娟

一、人工智能背景下中学信息技术教学现状

自2017年7月我国发布《新一代人工智能发展规划》[1],提出要在中小学阶段设置人工智能相关课程并逐步推广编程教育以来,以程序设计课为代表的编程教育在中小学信息技术教学中如火如荼地开展起来[2]。2017年出版的《普通高中信息技术课程标准》将“算法与程序实现”作为必修《数据与计算》模块的一个专题,根据调研,编程教育在2013年已进入校内信息技术课堂中[3]。

笔者调研发现,目前中小学编程教学重点往往落在编程语言学习上,教学内容围绕程序设计的三大结构展开[4]。算法模块的教学重点落在解析、枚举等简单算法上。随着新课标发布实施,中学信息技术教学开始以信息技术核心素养发展为主要目标。针对计算思维核心素养的培养,教师普遍采用项目式教学策略,引领学生在完成项目过程中经历 “界定问题—抽象特征—建立结构模型—设计算法—解决问题—迁移应用”的过程,以此发展学生的计算思维素养。

二、信息技术课程中编程教育的核心

中学信息技术作为一门以培养学生信息意识、计算思维、数字化学习与创新和信息社会责任为要务的学科,需要教师深抓学科本质,在日常教学中彰显信息技术课程的思维价值[5]。新课程实施以来,编程教育在中学信息技术教学中占据一大部分课时,编程教育的核心在于培养学生以算法思想为主的计算思维能力[6]。本质是让学生通过设计程序解决问题来培养算法思想。如何在简单的编程过程中发现不一样的解题思路,拓展视野,逐步培养算法思想,是中学信息技术编程教育中需要探索和突破的。

三、渗透算法思想的二进制教学案例分析

算法是解决问题的过程和方法。培养学生的算法思想,本质上也是培养学生解决问题的思维方法。因此,算法教学也要基于问题或情景任务,通过分析问题、设计算法、解决问题等环节,帮助学生形成解决某几类问题的方法。

本文根据中学生的知识结构,以基本二进制为基础,由二进制的概念、二进制与十进制的转换到以二进制为思想的倍增算法,多角度、多切面探讨如何设计任务和活动环节,帮助学生拓展视野,形成和发展计算思维。

(一)二进制概念教学

二进制概念对学生来讲比较陌生,在进行概念教学时,教师可从学生熟悉的十进制入手进行类比法教学。从十进制是由0~9共10个数字组成的,引出二进制是由0~1两个数字组成。十进制计数中,从0开始计,当计到9时,已经没有数字可以使用了,因此在9的基础上向前计数,需要在前面进一位,变成10,这就是十进制中逢十进一。同样,二进制计数中,0、1再向前计,没有数字可用了,也要前进1位,变成10,这就是二进制中逢二进一的思想。教师可借助图1示意图引导学生理解二进制的概念。

图1十进制与二进制概念类比

由类比概念教学,学生会理解二进制是逢二进位的进制数数码有0和1两个,从右向左位数的权值为2的对应次幂。由少到多,自然理解了多位二进制的计数原理。

此时学生虽然能理解二进制的概念,但对其与十进制的关系还不太容易理解,且类比方法相对抽象,学生思维容易被分散,可借助游戏方法帮助学生进一步理解其与十进制的关系。

(二)二进制与十进制的转换

从原理上讲二进制与十进制之间的转换不容易吸引学生专注力,可借助“猜生日”的游戏方式,吸引学生兴趣。教师可提前制作如图2所示的生日卡片,找一组学生说出自己的出生月份和年份分别出现在哪几张卡片中,教师根据学生的回答立即给出学生的出生月和日。例如,当某位学生说他的月份出现在1、4卡片中,出生日出现在2、3、5卡片中时,教师能立即给出该学生的出生月日是9月22日。

图2 生日卡片

教师能在不观察卡片中数字的前提下迅速说出月份和日,很大程度上激发了学生的好奇心,调动了后续知识学习的积极性。接下来,从分析问题、归纳抽象、建立结构模型的角度引导学生解谜老师的神奇之法。

分析问题,已知有5张编了序号的卡片,每张卡片上有16个数字,问题是出生月日均出现在第几张卡片上,引导学生为5张卡片建立如图3所示的抽象模型,模型是5位的二进制数,二进制位编号从右向左编号分别为0、1、2、3、4,若月份出现在第1张卡片中,则第0位为1,否则该位为0。

图3 生日卡片5位二进制数抽象模型

对于上述学生的回答月份出现在第1、4卡片中,出生日出现在第2、3、5卡片中,则对应月日模型的取值如图4所示。

图4 9月22日出生的同学生日卡片的模型取值

在已经理解二进制概念的基础上,教师稍加点拨,学生即可明白9来自于2的0次幂加上2的3次幂的和,22来自于2的1次幂加上2的2次幂,再加上2的4次幂的和。引导学生经过多次尝试和练习后,即可明白二进制转十进制的方法。

此时,好奇心强的学生可能会问,生日卡片为什么这样编排,有何原理?教师可适时引入十进制转二进制知识的学习。十进制转二进制方法很多,在此例子的基础上可以利用“除2取余,逆序排列”的方法讲解:用十进制数除以2,得到商和余数;用上一次除法操作得到的商继续除以2,又会得到新的商和余数。反复执行该过程,直到商为零;将上述过程产生的余数逆序排列即为该十进制数对应的二进制数。

在掌握十进制转换为二进制的方法后,教师引导学生挑选出卡片上的某几个数字,将其转为二进制观察,比如十进制31,其对应的二进制数为11111,各二进制位均为1,因此在第5、4、3、2、1张卡片中均有31;再比如十进制21,其对应的二进制数为10101,因此在第5、3、1张卡片中均有21。

对于十进制转二进制,教师可以在学生理解算法思想的基础上,引导其用程序实现,加深对算法的理解。

(三)巧用二进制培养学生倍增的算法思想

教师可以在学生掌握二进制的概念及基本原理后,增加思维深度,以二进制思想为基础讲授倍增算法。

首先让学生体验一个感性和理性选择游戏:

一份工作,假如有两种薪资:A方案一个月(按照30天标准)一次性发放薪资30万元,相当于每天薪资1万元;B方案按天发放,第一天一分钱,后一天是前一天的 2 倍,以此类推共发放30天。让每个学生选择一种方式,引导学生写出表1所示B方案每天变化过程,解谜到底哪一种方案更有吸引力。

在写表1的过程中会发现,第25天的时候,得到的总薪资已经超过30万,之后每一天都是前一天的2倍,第30天累计达到了10737418.23元。此时,学生能够初步体验出倍增思想,接下来教师再多切面引出倍增算法应用,引导学生进一步体会并理解以二进制为基础的倍增算法思想。

表1 B方案每天薪资变化过程

在Python语言入门阶段,学生学习了乘方运算符,计算An可以写成A★★n的形式。在循环结构教学中,教师还会用幂次方的案例讲授,例如,“求2的1000次方”,一般的方法是用以下程序片段实现:

这样程序的效率会比较低,可以用倍增思想优化程序。倍增思想的数学基础是指数幂,从逻辑的角度出发就是根据已经得到的信息,将下一次的信息扩大一倍,从而加快操作。1个字节的二进制数从右到左,各位的权值分别为20、21、22、23、24、25、26、27,后一位数是前一位的2倍数,可以利用此性质快速计算幂次方。

假如求一个正整数A的128次幂,可以计算1次幂,得到A1,倍增一次就是A★A:A1★ A1=A1+1=A2,再倍增一次,就是让A2自乘:A2★ A2=A2+2=A4,依此基础进行倍增,会得到A8、A16、A32、A64、A128,做7次乘法计算即可得到A128。

在此基础上,教师可引导学生思考如何用倍增思想计算正整数A的任意次幂。比如要计算A100,可以将幂数100转化为2的次幂数,用1,2,4,8,……,2n某几个数相加获得。因为(100)10=(1100100)2,所以100=22+25+26,那A100= A4★A32★A64,假设A=3,倍增的方法求3100的过程如表2所示。

表2 倍增法求3100的过程

算法核心技巧:根据b次方转换二进制的位数,有几位就倍增几次,答案需要将b的二进制位1的位置对应的倍增数累乘,比如364★332★34=364+32+4=3100。显然,将表2中二进制位为1的结果相乘即可得到3100。

总结一下,对于A的任意b次幂,倍增法求解的关键在于,将幂数b转换为二进制数,依据二进制位数,以A1为基础数进行倍增,然后将b的二进制数位为1的倍增结果累乘,即可得到Ab。

用Python语言实现快速幂方法求ab的参考代码如下:

四、结语

本文展示和分析了如何在信息技术教学中从学生的兴趣点和知识基础出发设计算法教学案例,在教学实践中就某一类问题设计进阶式的环节帮助学生逐步掌握解决问题的算法思想,逐步发展学生的算法思维。

人工智能新技术的发展,给中学生的生活环境正带来日新月异的变化。未来世界,单一技能型人才将不能满足发展需要,社会需要更多具有完善知识结构、高阶思维能力和强感知力的复合型人才。

中学信息技术作为一门以培养学生信息意识、计算思维、数字化学习与创新和信息社会责任为要务的学科,需要教师在科技发展浪潮中深抓学科本质,在日常教学中贯穿知识与技能,以思维素养为主线,通过知识点间的连接设计进阶式的算法教学内容,发展学生的计算思维。相信通过这样长期的实践,学生必定会在思维训练和解决问题的实践过程中成长、成才,未来能够运用学到的算法思想,探索真实的世界,解决真正的问题。

免责声明

我们致力于保护作者版权,注重分享,被刊用文章因无法核实真实出处,未能及时与作者取得联系,或有版权异议的,请联系管理员,我们会立即处理! 部分文章是来自各大过期杂志,内容仅供学习参考,不准确地方联系删除处理!