APP下载

从一个问题看算法思维的培养

2014-04-29喻文喜宋新波

中国信息技术教育 2014年23期
关键词:棋盘方格程序设计

喻文喜 宋新波

● 问题的提出

给定一个n×n的方格棋盘,问从左下角走到右上角共有多少种方案?(规则:每次只能向右或向上移动一个方格边长的距离)

例如,当n=2时,方案数为2;当n=3时,方案数为6;当n=6时,如图1。

● 教学过程

1.动手动脑,探究交流

(1)问题提出之后,学生拿出纸笔,以n=6为例,分析问题,思考探究,建立数学模型,寻找问题的答案。

(2)教师走下讲台,深入学生中间,与学生们交流、讨论与答疑。

(3)以邻座为小组,学生之间相互交流,各自分享自己解决问题的办法,展开讨论。

2.分析讲解,图例演示

教师邀请几位学生上讲台借助黑板分析讲解演示自己解决问题的方法,其他同学思考并进行评价。主要方法如下。

(1)规律。以n=6为例,每个方格中的数字为从左下角到达所在方格的方案数,如图2所示。其中的数字排列方式类似于杨辉三角形,根据杨辉三角的规律,得出给定一个n×n的方格棋盘(如图3),从左下角走到右上角的方案数等于杨辉三角形中第2n-1行第n列的数,即为(2n-2)!/((n-1)!(n-1)!)。

(2)组合问题。给定一个n×n的方格棋盘,从左下角走到右上角,其中向上移动由n-1种方式排列而成,向右移动由n-1种方式排列而成,共有2n-2种方式。因此,求解方案总数的问题实质上就是从2n-2种方式中,取出n-1种方式的所有组合(去除所有重复的方案)的个数,故方案总数为。

在解决问题的过程中,学生使用的两种方法都是建立在已有的认知水平基础上,自然而然想到的方法,其中涉及较多的是学生的数学思维能力,为下一步提出信息技术常用的算法思维解决同一个问题作了铺垫。

3.拓展思维,精讲算法

(1)宽度搜索。将棋盘看作二维坐标,棋盘的左下角设为二维坐标的原点(1,1),棋盘的右上角设为二维坐标(n,n)(坐标系的单位长度为方格的边长)。以n=3为例,各个方格坐标值如图4,使用宽度搜索方法,可得的方案总数为6(如图5)。

(2)递推法。仍旧将棋盘看作二维坐标,棋盘的左下角设为二维坐标的原点(1,1),棋盘的右上角设为二维坐标(n,n)(坐标系的单位长度为方格的边长)。用f(I,j)表示从(1,1)到坐标(i,j)的方案总数,其中1<=I,j<=n,f(1,j)=1,f(I,1)=1。于是求解f(i,j)转换为递推问题:f(I,j)=f(i-1,j)+f(I,j-1) (i>1,j>1)。

4.归纳总结,知识延伸

(1)针对提出的问题,学生们凭借数学思维能力找到解决问题的方法,其后,体验了运用信息技术算法解决同一问题的全过程,理解了宽度搜索与递推两种常见算法的思想。通过两种思维的对比,感受到设计恰当的算法利用计算机解决问题的优势与便捷。

(2)课余思考:对于同一问题,假设走步范围限定于黄色区域(如图6),问从左下角走到右上角有多少种方案?

● 教学反思

信息技术课程的发展经历了程序设计文化论、工具论,到现在的信息素养论等几个不同阶段,其中信息技术本身具有日新月异的特性,也有社会发展与需求等因素。作为信息技术学科的一线教师,我们也时常在想,《算法与程序设计》模块作为信息技术课程的一部分,教学目标是什么?它的核心价值在哪里?究竟培养学生什么能力?能否挖掘该模块特有的一些东西?

按照课程标准要求,该模块的学习目的是使学生在原有基础上进一步体验算法思想,了解算法和程序设计在解决问题中的地位和作用;能从简单的问题出发,设计解决问题的算法,并能初步使用一种程序设计语言编写程序实现算法解决问题。

参照多年的教学实践,我们将培养学生的算法思维确立为该模块的最根本教学目标。算法思维以程序设计为载体,让学生能清楚地理解问题解决的规则,能够认识到问题的起点、边界和限定范围,按部就班地完成任务或解决问题。算法思维尽管涉及程序,但更关注算法的实现,强调的是通过算法来理解计算机对预设问题的解决过程,并能清楚地分析问题解决的优劣。

基于此,我们尝试在《算法与程序设计》模块教学中探索算法思维培养的途径及方法。本节课合理地设计了教学过程,相继安排了“问题”、“探究”、“交流”、“展示”等多种认知活动,以学习者为主体,鼓励学生自己动手去探索,通过数学思维与计算机算法思维的对比,引导和组织学生通过灵活多样的学习方式和活动方式建构算法思维,进而实现课程目标。

在优化算法的过程中,学生均能在自身原有水平基础上得到发展。优化的主体是学生,教师应尊重学生的想法,把选择判断的主动权交给学生,将优化的过程作为引导学生主动寻找更好算法的过程,尊重学生的选择,并以合作方式展开教学活动。优化的过程是学生自我完善的过程,产生修正自我的内需,从而“悟”出属于自己的最佳方法。在评价算法时,主要评价算法的“特点”,让学生自己去感悟算法的“优点”,进而达到优化的目的。

当然,由于信息技术课程存在课时少、巩固难等问题,因此,我们在课堂教学中主要采用“重算法培养,轻编程实现”的策略,但也导致少数学生在算法思维巩固方面出现了一些困难。

经过对整个模块长时间的学习,学生普遍反映教学效果不错,具体表现为以下几个方面:①促进了信息技术学科与数学学科的深度融合。从新课程促使学生学习方式转变的角度看,算法教学为数学学科提供了数学实习的课程内容和课程环境,教学使学生在更广泛的范围内全面地学习了数学的相关知识,提高了学生的数学应用实践能力。算法教学作为信息技术的教学内容,使学生更加深入地理解了数学学科在信息技术学科中的基础作用,使学生感受和体会到在使用计算机解决问题的过程中,数学建模与程序设计的关系和作用,对学生结构化思维方式的形成具有促进作用。②拓展了《课程标准》中算法的教学内容。由于课程标准中要求的算法不是很多,主要有解析法、穷举法、查找算法、排序算法与递归算法等。经过反复论证,我们在原有内容的基础上

甄选了搜索、递推、动态规划、分治、贪心等算法作为拓展学习内容,同时列举了这些算法的具体应用,并结集成册形成校本课程。③增强了学生学习算法知识的兴趣。首先,每位学生都有着独特的先天生理遗传和不同的家庭背景、生活经历,因此他们的认知基础和思维方式也各不相同。认知上的差异不可避免地影响到学生的学习活动,在新知建构和解决问题的过程中表现为从不同角度进行分析、思考,由此而产生了不同的算法。在教学中,我们尊重学生的个体差异,鼓励算法的多样化,以便让不同的学生得到不同的发展,促进学生的个性化学习。其次,学生觉得算法是有用的。将教学活动定位于用编程方法解决实际问题,算法只有融入到实际运用中,其价值才能表现出来。例如,在讲述穷举算法时,学生动手解决物质调运、产品安排、生产下料等规划类问题,体验感受算法在解决实际问题中的价值。④提升了学生的多种能力与素养。首先,不同的算法展示了学生不同的认知方式,让每位学生都能发表自己的观点,倾听别人的想法,有利于学生感受解决问题策略的多样性与灵活性,从中受到启发,学会理解他人、欣赏他人。其次,学生增强了自信心,情感意志均得到了发展。教学中,教师要善于发现学生各种想法的可取之处,及时给予学生肯定与赞扬,充分调动学生的学习积极性。思维的火花相互撞击、闪烁,才能更好地推动学生努力思考、探索、创造,享受成功的喜悦,逐步形成积极进取的学习心态,促进心理的健康发展。再次,算法的多样化,能在学生中形成一种积极思考、大胆求异的心理氛围,培养学生的创新思维和进取精神。学生在解决问题的同时获得了重要的算法知识,学生在多样、丰富的学习过程中,思维能力与学习能力有所提高,创新意识得到培养,激发了学生的发散性思维、批判性思维以及创造性思维。

● 结语

算法来源于生活,是人类智慧的结晶。从某一问题出发,以算法思维培养为核心思想,关注课堂教学生活化,编写程序解决学生生活与学习中遇到的实际问题,对于《算法与程序设计》模块的教学可能具有一定的普适意义。在不增加任何硬件投入的前提下,日积月累,也会使学生在学习动力、算法思维能力、动手实践能力、创新思维能力等方面会得到有效提升。

猜你喜欢

棋盘方格程序设计
方格里填数
方格里填数
基于Visual Studio Code的C语言程序设计实践教学探索
从细节入手,谈PLC程序设计技巧
分方格
分方格
高职高专院校C语言程序设计教学改革探索
棋盘人生
PLC梯形图程序设计技巧及应用
棋盘里的天文数字