所謂問題教學法也就是在教學中設置問題或疑點,以解決問題爲突破口,帶動知識點的學習。這種方法與傳統的知識講授法相反,知識講授法採用的是先學習理論,而後再將理論運用於實踐,即先講授後練習的過程;而問題教學法是先去實踐,再實踐中發現疑難,在解決疑難的過程當中促進理論知識的學習,有點相似從實踐中來,再到實踐中去的過程。
採用問題教學法能夠在教學中不斷製造懸念,帶動學生思惟的發展,有利於培養學生的創新思惟品質。
本文將從一些問題教學課堂案例出發,談談如何根據問題特性入手,怎樣啓迪學生的思惟。
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的中點)其理論時間複雜度與循環相同。
這時有同窗提出:一個原本很簡單就能解決的問題,爲何要複雜化呢,而新方法並不比原方法優?
有意把它複雜化,而且效率也沒有提升,彷佛徹底沒有必要。其實否則。這種方法上升到理論的高度就是「分治策略」的思想,它表明的是一種解決問題的另一種策略,一種全新的思惟方式。它打破了人們認爲選取最大值必定要從頭至尾掃描一遍的思惟,它以全新的處理和比較順序一樣得到了另一種一樣高效的算法。實踐證實,在許多問題中,分治策略是一種很是高效的解決問題的基本方法。
故意把簡單問題複雜化,目的是告訴學生,不少潛在的知識均可從簡單問題逐步深化而來,只要常常不斷深刻思考,就能逐步培養本身的創新思惟。
總之,培養學生思惟能力,是咱們教學中的重中之重。本文經過對一些問題教學實錄,從中發現了一些培養學生思惟的方法,但願能給你們的教學帶來些許裨益。