zoukankan      html  css  js  c++  java
  • 信息学奥赛辅导经验谈 & 问题教学法中的学生思维能力培养

    转载来自朱全民名师工作室

    信息学奥赛辅导经验谈

    全国青少年信息学奥林匹克分区竞赛(简称NOI)是经中国科协、国家教育部批准,由中国计算机学会主办的一项全国性的青少年学科竞赛活动。随着信息学奥林匹克竞赛的深入开展,越来越多的教师和学校都已投入此项教学的研究之中。我从事这项工作已有六年时间。现就我在中学信息学奥林匹克竞赛教学中的做法与各位同行进行交流。
     
    •培养学生的自信心
    自信是一种正确、积极的自我观念和自我评价。积极意味着一种对自己的认同、肯定和支持的态度。而在现今的学生当中,普遍存在着自我评价过低的现象,很多学生在能够完成的事情面前,认为自己干不了,于是畏缩犹豫裹足不前,压抑了内在能力的发挥。在竞赛中,自信心对学生至关重要,缺乏自信,要想在竞赛中取得好成绩,根本就是不可能的。结合这些年的教学经验,我觉得应从下面几个方面来培养学生的自信心:教师要用自己的自信心鼓舞和感染激励学生“教师的世界观,他的品行,他的生活,他对每一现象的态度,都这样那样地影响全体学生。”这句话道出了一个道理:教师不仅是学生知识的传授者,更应该做学生的楷模。因此,教师要用自己的自信心鼓舞和感染激励学生。学生在潜移默化中受到了鼓舞和感染,也信心百倍。

     用肯定和赏识来激励学生,学生一进入我的这个团队,我就跟学生讲,我们这个团队是对精英的培养,在信息学奥赛这块,你们是最棒的,学生有了一点点进步或者说做对了某道题或者说对某个问题有个好的想法,我都对他们给予充分的肯定。我经常会对学生讲,你们现在做的这份初赛模拟试题难度相当于研究生入学考试的难度,你们竟然做的很好,相当的了不起,你们现在做出来的这道程序设计题,计算机专业的学生没有几个做的出来等等诸如此类的话,这样极大的提高了学生的自信。有一个学生,进入我的团队一段时间下来,我发现他很有这方面的天赋,学的很快,很有领悟能力,对问题经常会有自己独特的思维方式,我觉得非常的不错,以后我经常有意无意的将他作为学生的领军人物,有的时候我也会叫他替我给学生讲课,把他自己的思想教给其他的学生,就这样他的能力也越来越强,其他的学生也都以他为榜样,无形之中形成了一个你追我赶的局面,这个学生最后进了国家队。

     •培养学生的自学能力
    自学能力是非常重要的。提倡学生坚持自学,鼓励学生自己收集资料,自己选题来做,这是我们指导教师一定要给学生强调的。不明白这点,学生就没有学习的主动性,只是等老师来培训,培训就学,不培训就不学,靠培训的几节课哪里学得好、学得深、学得透呢?优秀的学生总是看大量的课外书、做大量的课外题。指导教师发现有前途的学生很大程度上就是基于这一点,看看他有没有主动学习、课外阅读的好习惯!。

     •不要拘泥于常规的教学方式
    信息学奥赛的教学不同于其它任何学科的教学,信息学奥赛要彻底改变“纸上谈兵”的陈旧教学模式。否则就会误人子弟。信息学奥赛的教学就必须打破课堂教学和现有知识结构的限制,因材施教,鼓励冒尖,不要求一刀切,必要的时候开小灶,为扎实基础上的特长发挥创造条件。课堂教学最大的弊端是讲求整齐划一,在一定程度上抑制了学生特长的发挥。在教学时,我会把我的学生分成几组,成绩好的,领悟能力强的学生一组,其它一般的,领悟能力要弱一些的学生一组,讲课时,针对不同组的学生给予不同难度的教学,举一个简单的例子,如编程计算对能力强的一组学生,我就会把数据的范围定义的在整数所能承受的范围,而且我上课时,经常不会采用一种固定的方式,有的时候我会讲,还有的时候,我会叫学生上来讲,有时学生讲课的效果要强于我的,可能我讲了半天学生都没有理解的问题,学生用他们自己的语言跟学生一讲,竟然明白的很透彻,前面我说的实力不错的学生,有时,我讲的某道题,他理解了,但其它同学理解不了,我就叫他来讲解,效果比我讲的要好的多,我经常是这样认为,学生和学生之间年龄差不多,对问题的想法也差不多,他们有时可以用一种更直观,更简单的想法把一个复杂的问题简单化,我经常这样做,效果还不错,更多的时候,我是把问题提出来,然后让学生进行讨论,讨论之后我再给以总结,或者说发表自己的看法,这样,同样一个题,经过讨论之后,问题就明朗了许多,同时也形成了许多想法,学生的思路也开阔了许多,以前我们有些老师和家长都认为学习了信息学奥赛之后,学习成绩会下降,但实践证明,我们的学生成绩不但没有下降,反而隐中有升,相比同档次没有参加信息学奥赛的学生其文化成绩更好,因为学生思路开阔了。
     

    问题教学法中的学生思维能力培养

    所谓问题教学法也就是在教学中设置问题或疑点,以解决问题为突破口,带动知识点的学习。这种方法与传统的知识讲授法相反,知识讲授法采用的是先学习理论,然后再将理论运用于实践,即先讲授后练习的过程;而问题教学法是先去实践,再实践中发现疑难,在解决疑难的过程中促进理论知识的学习,有点类似从实践中来,再到实践中去的过程。
     
    采用问题教学法可以在教学中不断制造悬念,带动学生思维的发展,有利于培养学生的创新思维品质。
    本文将从一些问题教学课堂案例出发,谈谈如何根据问题特性入手,怎样启迪学生的思维。

    一、层层叵悉问题,让思维由浅入深

    【士兵排列】
    在二维平面上(采用平面直角坐标系)有n个士兵,他们的位置为:(x1,y1)(x2,y2),…,(xn,yn),任何一个士兵向上下左右四个方向移动一个坐标,被称为移动一步。
     
    问:用最少的移动步数使得n个士兵走到一条与x轴平行的直线上,并依前后顺序站好队。
    【教学情景】
    当问题给出后,我让学生先独自思考,学生们看完这道题感到无从下手,直线的位置没有确定,士兵人数很多,且有四个移动方向,哪个士兵走到什么位置,不确定因素太多,难以一时找到行之有效的方法,看来该问题有一定的难度。
     
    当一个问题比较复杂,出现山穷水尽疑无路的情况时,是否可以由简单入手,将问题简化呢?
    由此,我给出子问题1。
    【子问题1】
    N个士兵走到给定的某条直线上(比如X轴)最少需要移动多少步?
    此时学生开始活跃起来。很显然,对于每个点,都要走到X轴,显然,每个点走到X轴的移动步数,为每个点的到X轴的距离,即Y坐标的绝对值之和(如上图)。
    问题是走到X轴后,要按顺序排好队,那么以谁为中心呢?
    由此提出子问题2。
    【子问题2】
    某条直线上有N个士兵,要排成前后相连的队列,需要移动多少步?
    直观的看,可以以某个点为基准,将这个点两边的士兵尽可能的往中间移动,这样整体移动步数较少,为了证明这个直观的认识,我们将问题用数学模型描述。变成子问题3:
    【子问题3】
    已知X轴上N个点的坐标,不妨设为x1<=x2<=……<=xn,求中间某个点x,使得
    求: S=|x1-x|+|x2-(x+1)|+……+|xn-(x+n-1)|,使得S最小。
    容易证明x是x1,x2,…,xn的中点时候,S最小(证明略,上课时留給学生自己证明)
    如此分析以后,原问题将被大大简化为:确定(x,y),使得坐标(x1,y1)(x2,y2),…,(xn,yn)经过最少的步数变换到(x,y),(x+1,y),(x+2,y),……,(x+n-1,y)。
    对于Y坐标, 已知:y1<=y2<=……<=y, 求:MinS=|y1-y|+|y2-y|+……+|yn-y|
    对于X坐标,已知:x1<=x2<=……<=xn,求:MinS=|x1-x|+|x2-(x+1)|+……+|xn-(x+n-1)|
    经过上述一系列分析,原问题的雏形已经,可以用数学模型描述成子问题4。
    【子问题4】
    已知:y1<=y2<=……<=yn,x1<=x2<=……<=xn
    求:MinS=|y1-y|+|y2-y|+……+|yn-y|+|x1-x|+|x2-(x+1)|+…+|xn-(x+n-1)|
    显然只要求Xi和Yi的中位数后,直接计算即可。
    一个复杂的问题,可以通过问题分解的办法,逐步深入,层层剖析,最终发现它的实质,使解决变得简单。
    层层叵析是讲对事物由表及里地逐层分析,最后来达到认识事物本质的目的。

    二、转换角度思考,开启逆向思维

    【书架设置】
    某教授有几册不同的书籍,它们按习惯排在书架上,教授发现一个有趣的现象,如果将书的册数进行编号,从左到右将形成一个数,例如,教授的书架上摆放了第3、第1、第1册书,则数311为一个素数,删除右边数字1,31仍然为一个素数,再删除右边数字1,3仍然是一个素数。
     
    输入教授书的册数(最多8),问将会有哪些摆放规则符合教授发现的规律?
    【教学情景】
    先让学生们思考,同学们热烈讨论,大多数学生都是采用枚举法,先8位数的素数,然后再枚举7位素数,….,但是大家很快发现,这样的素数有很多,而且还要对素数进行判定,时间复杂度很高啊!一时大家陷入迷茫。
    这时我启发学生, 如果换一种思维,枚举数的每一位如何?
    这是学生豁然开朗起来。
    首先,对数的每一位进行考虑,则符合条件的数的第一位数字只能为(2,3,5,7),其他位置上的数字只能为(3,5,7,9)。
    这时K=8时,被处理的数只有48而非108,另外由于从右向左删数时,都为素数,因此在处理数时,可以从左至右进行处理,只有当左边为素数时才添加右边一位数字,加上这个剪枝条件,当K=8时,瞬间即可出解。
    通过这个案例,我们可以看出转化角度思考对解决问题取到了关键作用,转化角度思考,是启迪逆向思维的方法之一。

    三、转换问题模型,启迪发散思维

    【选课】
    有n门课程,选修每一门课程都能得到相应的学分。但在选修课程时,必须先选修它的直接先修课,每一门课程最多有一门直接选修课程。譬如:像选修数据结构,必须先选修PASCAL语言,则PASCAL称数据结构的直接先修课。
     
    问:对给定的n门课程、它们学分、及其直接先修课,怎样选修哪m门课程能得到最大学分?
    【教学情景】
    本题与现实生活息息相关,学生比较感兴趣,很快就有学生发现此问题数据模型由多棵树(森林)组成。
    如果我们直接按问题的原始模型,对每棵树求解,会怎么样呢?
    显然我们需要枚举每棵树所选的课程数量,有的同学说可以采用搜索方法求解,可是搜索的时间复杂度很高。
    有的说可以采取动态方法求解,那么模型又如何构造呢?大家展开了热烈的讨论。
    这时,有学生提出,如果把每棵树看成一个元素,那么这是一个集合的模型,可以采用集合类型的动态方法方法求解。
    我对这个学生深入分析的精神大加赞赏。要大家顺着这个思路继续讨论,如果采用这个模型程序如何实现?
    学生们很快发现,如果去掉树的根节点后,又变成了森林,这实际上又是归结到一个集合模型,形成了递归的概念。大家热情很高,感觉收获很大。
    这是,我说:能够把这个森林转变成一棵树呢?大家学过了如何将森林转变成二叉树,这个知识对解决这个问题到底有什么帮助?
    课堂更加活跃了,最后学生们发现,这个方法确实很妙,可以采用树型动态规划来解决这个问题,得到了另一种解决方案。
    分析树转化为二叉树的操作规则:节点的第一个孩子作为该节点的左孩子,下一个兄弟作为第一个孩子的右孩子。根据题目特性,那么选修左孩子,则一定选修父亲节点,选修右孩子,则可以选修也可以不选修父亲节点,很容易写出状态转移方程:
    设F(I,X)表示以I为根的树选X门课程所得到的最多学分,则
    F(I,X)=Max{ F(I的左孩子,K)+ F(I的右孩子,X-K-1)+P(I),F(I的右孩子,X)}  K=1,2,…,X-1         
    上述方程既容易理解,实现也很简单,很快可以得到解答。
    从这个例子我们可以看出,适时转换模型是可以促进问题的深入,转换模型实际上是转换思维方式,它也发散性思维的一种体现。

    四、类比联想,培养思维的连贯性

    【钉子与小球】
    有一个三角形木板,竖直立放,上面钉着n*(n+1)/2颗钉子,还有(n+1)个格子(当n=5时如图1)。每颗钉子和周围的钉子的距离都等于d,每个格子的宽度也都等于d,且除了最左端和最右端的格子外每个格子都正对着最下面一排钉子的间隙,如下图1。
    让一个直径略小于d的小球中心正对着最上面的钉子在板上自由滚落,小球每碰到一个钉子都可能落向左边或右边(概率各1/2),且球的中心还会正对着下一颗将要碰上的钉子。下图2就是小球一条可能的路径。
    现在的问题是计算拔掉某些钉子后,小球落在编号为m的格子中的概率pm。假定最下面一排钉子不会被拔掉。下图3是某些钉子被拔掉后小球一条可能的路径。输出的概率用分数表示。
     


            图1                           图2                     图3
     
    【教学情景】
    这道题给出后,学生们分析发现,这道题目的图像与数字三角形那道题的图像特别的类似,都是三角形,而且走的路径也类似,都是向左下或右下走!下面我们看看数字三角形那道题。
    【数字三角形】
    给定一个由n行数字组成的数字三角形如下图所示。试设计一个算法,计算出从三角形的顶至底的一条路径,使该路径经过的数字总和最大。

    两道题目的描述如此相似,那么,他们的解法是否也会相似呢?
    经过讨论,学生们发现这道题和数字三角形都是一类典型动态规划问题,知道了“数字三角形”的解决方案就很容易找到“钉子与小球”的解决方案。
    当遇到某个问题时,如果能采取类比联想思维,能够得到事半功倍的效果。
    类比联想法,就是在解决问题时由此及彼的逐一联想,从而达到问题的深入和归类的目的。

    五、不断突破问题瓶颈,促进思维深入发展

    【路径查找】
    在n*n的矩阵中找到一条路径<1,1>,…,<Xi,Yi>, <Xi+1,Yi+1>,…,<n,n>,使得<Xi,Yi>与<Xi+1,Yi+1>相邻,即:
    | Xi- Xi+1| =1且Yi=Yi+1 或 |Yi-Yi+1|=1且Xi=Xi+1,同时使得 最小(n<=100)
     
    【教学情景】
    题目写得很复杂。先把问题描述简化:其实是在一个矩阵中找一条四连通路,使得所有相邻两数的差的绝对值之和最小。
    思考一段时间后,学生们发现若单纯从数的角度去考虑,用数学分析方法去想,确实很难找到好的解决方法。
    我提示,能否将这个问题抽象成图论模型?
    学生们陷入了深思,一阵讨论后,学生们找到了模型。
    将每一个数看作一个点,若两个数相邻,则在它们所对的点之间连一条无向边,边的权值为两数差的绝对值。
    那么问题转化为求点(1,1)到点(n,n)之间的最短路径。直接套用经典的求最短单源最短路径算法,其时间复杂度为O(n2)。
    但是由于图中节点数可达到10000个,则10000的平方达到了1亿,时间复杂度有点高,是不是要另觅它法呢?悬念陡增,学生们继续思索。

    此时,我们再次分析经典算法最短单源最短路径算法的处理过程。该算法采用的是按路径递增的顺序求最短路径,即对已经确定的最短路径添加新点,不断进行插入或更新得到所有的最短路。
    在实现时采用队列保存已确定的最短路,对未确定的最短路进行插入或更新,需要得到当前队列的最小值,由于队列无序,因此需要查找整个队列,共需要两重循环,外循环查找队列最小值,内层循环对未确定的点进行更新,时间复杂度为O(n2)。
     
    是不是有一种能快速得到更新后的最小值呢?此时联想到优先队列---最小堆!
     
    若采用最小堆存放当前确定的最短路,则查找最小值的时间复杂度仅为O(1),插入和更新的时间复杂度只需O(Log2N).这样总的时间复杂度就变成了O(Nlog2N),问题得到完美解决。
     
    通过对这个问题的深入研究,同时也揭示了单源最短路径算法的优化方法。
    当问题出现瓶颈时,突破瓶颈就是解决问题的关键所在。只有深入不断突破瓶颈,才能把思维推向更深。

    六、把简单问题复杂化,培养创新思维品质

    【求队列的最大值】
    给从N个整数X1,X2,……,Xn,要求尽快挑出这N个数的最大值。
    【教学情景】
    这个问题一提出,学生们都笑了,实在是太简单了!不是吗?一次循环逐个比较找出来就可以了。
    当然,这是一种常用的方法。我们要对问题深入研究,那么还有没有其他的方法呢?我要学生们思考这个问题。
    这是有人提出将逐个比较换成两两比较的办法,我鼓励他们朝这个思维迈进。
    我提示,既然所求结果是X[1..n]中最大的,那么它必然是X[1..p]和X[p+1..n]中最大的,问题就转化为求X[1..p]、X[p+1..n]两者最大值中的较大者?
    具体求X[1..p]、X[p+1..n]的最大值又可以采用与求X[1..n]类似的方法,可以递归描述如下:
    已知:X1,X2,……,Xn ,
    Max[a,b]=Max[a,p]+Max[p+1,b](a<=p<=b),其中 Max[i,i]=Xi
    求:Max[1,n]
    可以证明,当上式中p取得恰当时(即a,b的中点)其理论时间复杂度与循环相同。
     
    这时有同学提出:一个本来很简单就能解决的问题,为什么要复杂化呢,而新方法并不比原方法优?
    有意把它复杂化,并且效率也没有提高,似乎完全没有必要。其实不然。这种方法上升到理论的高度就是“分治策略”的思想,它代表的是一种解决问题的另外一种策略,一种全新的思维方式。它打破了人们认为选取最大值一定要从头到尾扫描一遍的思维,它以全新的处理和比较顺序同样获得了另外一种同样高效的算法。实践证明,在许多问题中,分治策略是一种非常高效的解决问题的基本方法。
     
    故意把简单问题复杂化,目的是告诉学生,很多潜在的知识都可从简单问题逐步深化而来,只要经常不断深入思考,就能逐步培养自己的创新思维。
    总之,培养学生思维能力,是我们教学中的重中之重。本文通过对一些问题教学实录,从中发现了一些培养学生思维的方法,希望能给大家的教学带来些许裨益。


  • 相关阅读:
    java中<> 的用法
    Java 中 compareTo方法问题
    class AClass<E extends Comparable>与class AClass<E extends Comaprable<E>>有什么区别?
    zookeeper常用命令
    Storm概念讲解和工作原理介绍
    Storm集群安装部署步骤【详细版】
    Error contacting service. It is probably not running.
    Exception in thread "main" expected '<document start>', but found BlockMappingStart in 'reader', line 23, column 2: nimbus.host: "master"
    zookeeper 启动失败 BindException: Address already in use 或者Error contacting service. It is probably not running
    scss的安装使用
  • 原文地址:https://www.cnblogs.com/tham/p/7856465.html
Copyright © 2011-2022 走看看