所谓问题教学法也就是在教学中设置问题或疑点,以解决问题为突破口,带动知识点的学习。这种方法与传统的知识讲授法相反,知识讲授法采用的是先学习理论,而后再将理论运用于实践,即先讲授后练习的过程;而问题教学法是先去实践,再实践中发现疑难,在解决疑难的过程当中促进理论知识的学习,有点相似从实践中来,再到实践中去的过程。
采用问题教学法能够在教学中不断制造悬念,带动学生思惟的发展,有利于培养学生的创新思惟品质。
本文将从一些问题教学课堂案例出发,谈谈如何根据问题特性入手,怎样启迪学生的思惟。
1、层层叵悉问题,让思惟由浅入深
【士兵排列】
在二维平面上(采用平面直角坐标系)有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的中位数后,直接计算便可。
一个复杂的问题,能够经过问题分解的办法,逐步深刻,层层剖析,最终发现它的实质,使解决变得简单。
层层叵析是讲对事物由表及里地逐层分析,最后来达到认识事物本质的目的。
2、转换角度思考,开启逆向思惟
【书架设置】
某教授有几册不一样的书籍,它们按习惯排在书架上,教授发现一个有趣的现象,若是将书的册数进行编号,从左到右将造成一个数,例如,教授的书架上摆放了第三、第一、第1册书,则数311为一个素数,删除右边数字1,31仍然为一个素数,再删除右边数字1,3仍然是一个素数。
输入教授书的册数(最多8),问将会有哪些摆放规则符合教授发现的规律?
【教学情景】
先让学生们思考,同窗们热烈讨论,大多数学生都是采用枚举法,先8位数的素数,而后再枚举7位素数,….,可是你们很快发现,这样的素数有不少,并且还要对素数进行断定,时间复杂度很高啊!一时你们陷入迷茫。
这时我启发学生, 若是换一种思惟,枚举数的每一位如何?
这是学生豁然开朗起来。
首先,对数的每一位进行考虑,则符合条件的数的第一位数字只能为(2,3,5,7),其余位置上的数字只能为(3,5,7,9)。
这时K=8时,被处理的数只有48而非108,另外因为从右向左删数时,都为素数,所以在处理数时,能够从左至右进行处理,只有当左边为素数时才添加右边一位数字,加上这个剪枝条件,当K=8时,瞬间便可出解。
经过这个案例,咱们能够看出转化角度思考对解决问题取到了关键做用,转化角度思考,是启迪逆向思惟的方法之一。
3、转换问题模型,启迪发散思惟
【选课】
有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
上述方程既容易理解,实现也很简单,很快能够获得解答。
从这个例子咱们能够看出,适时转换模型是能够促进问题的深刻,转换模型其实是转换思惟方式,它也发散性思惟的一种体现。
4、类比联想,培养思惟的连贯性
【钉子与小球】
有一个三角形木板,竖直立放,上面钉着n*(n+1)/2颗钉子,还有(n+1)个格子(当n=5时如图1)。每颗钉子和周围的钉子的距离都等于d,每一个格子的宽度也都等于d,且除了最左端和最右端的格子外每一个格子都正对着最下面一排钉子的间隙,以下图1。
让一个直径略小于d的小球中心正对着最上面的钉子在板上自由滚落,小球每碰到一个钉子均可能落向左边或右边(几率各1/2),且球的中心还会正对着下一颗将要碰上的钉子。下图2就是小球一条可能的路径。
如今的问题是计算拔掉某些钉子后,小球落在编号为m的格子中的几率pm。假定最下面一排钉子不会被拔掉。下图3是某些钉子被拔掉后小球一条可能的路径。输出的几率用分数表示。

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

两道题目的描述如此类似,那么,他们的解法是否也会类似呢?
通过讨论,学生们发现这道题和数字三角形都是一类典型动态规划问题,知道了“数字三角形”的解决方案就很容易找到“钉子与小球”的解决方案。
当遇到某个问题时,若是能采起类比联想思惟,可以获得事半功倍的效果。
类比联想法,就是在解决问题时由此及彼的逐一联想,从而达到问题的深刻和归类的目的。
5、不断突破问题瓶颈,促进思惟深刻发展
【路径查找】
在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),问题获得完美解决。
经过对这个问题的深刻研究,同时也揭示了单源最短路径算法的优化方法。
当问题出现瓶颈时,突破瓶颈就是解决问题的关键所在。只有深刻不断突破瓶颈,才能把思惟推向更深。
6、把简单问题复杂化,培养创新思惟品质
【求队列的最大值】
给从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的中点)其理论时间复杂度与循环相同。
这时有同窗提出:一个原本很简单就能解决的问题,为何要复杂化呢,而新方法并不比原方法优?
有意把它复杂化,而且效率也没有提升,彷佛彻底没有必要。其实否则。这种方法上升到理论的高度就是“分治策略”的思想,它表明的是一种解决问题的另一种策略,一种全新的思惟方式。它打破了人们认为选取最大值必定要从头至尾扫描一遍的思惟,它以全新的处理和比较顺序一样得到了另一种一样高效的算法。实践证实,在许多问题中,分治策略是一种很是高效的解决问题的基本方法。
故意把简单问题复杂化,目的是告诉学生,不少潜在的知识均可从简单问题逐步深化而来,只要常常不断深刻思考,就能逐步培养本身的创新思惟。
总之,培养学生思惟能力,是咱们教学中的重中之重。本文经过对一些问题教学实录,从中发现了一些培养学生思惟的方法,但愿能给你们的教学带来些许裨益。