信息學奧賽輔導經驗談 & 問題教學法中的學生思惟能力培養

轉載來自朱全民名師工做室算法

信息學奧賽輔導經驗談

全國青少年信息學奧林匹克分區競賽(簡稱NOI)是經中國科協、國家教育部批准,由中國計算機學會主辦的一項全國性的青少年學科競賽活動。隨着信息學奧林匹克競賽的深刻開展,愈來愈多的教師和學校都已投入此項教學的研究之中。我從事這項工做已有六年時間。現就我在中學信息學奧林匹克競賽教學中的作法與各位同行進行交流。
 
•培養學生的自信心
自信是一種正確、積極的自我觀念和自我評價。積極意味着一種對本身的認同、確定和支持的態度。而在現今的學生當中,廣泛存在着自我評價太低的現象,不少學生在可以完成的事情面前,認爲本身幹不了,因而畏縮猶豫裹足不前,壓抑了內在能力的發揮。在競賽中,自信心對學生相當重要,缺少自信,要想在競賽中取得好成績,根本就是不可能的。結合這些年的教學經驗,我以爲應從下面幾個方面來培養學生的自信心:教師要用本身的自信心鼓舞和感染激勵學生「教師的世界觀,他的品行,他的生活,他對每一現象的態度,都這樣那樣地影響全體學生。」這句話道出了一個道理:教師不只是學生知識的傳授者,更應該作學生的楷模。所以,教師要用本身的自信心鼓舞和感染激勵學生。學生在潛移默化中受到了鼓舞和感染,也信心百倍。

 用確定和賞識來激勵學生,學生一進入個人這個團隊,我就跟學生講,咱們這個團隊是對精英的培養,在信息學奧賽這塊,大家是最棒的,學生有了一點點進步或者說作對了某道題或者說對某個問題有個好的想法,我都對他們給予充分的確定。我常常會對學生講,大家如今作的這份初賽模擬試題難度至關於研究生入學考試的難度,大家居然作的很好,至關的了不得,大家如今作出來的這道程序設計題,計算機專業的學生沒有幾個作的出來等等諸如此類的話,這樣極大的提升了學生的自信。有一個學生,進入個人團隊一段時間下來,我發現他頗有這方面的天賦,學的很快,頗有領悟能力,對問題常常會有本身獨特的思惟方式,我以爲很是的不錯,之後我常常有意無心的將他做爲學生的領軍人物,有的時候我也會叫他替我給學生講課,把他本身的思想教給其餘的學生,就這樣他的能力也愈來愈強,其餘的學生也都以他爲榜樣,無形之中造成了一個你追我趕的局面,這個學生最後進了國家隊。

 •培養學生的自學能力
自學能力是很是重要的。提倡學生堅持自學,鼓勵學生本身收集資料,本身選題來作,這是咱們指導教師必定要給學生強調的。不明白這點,學生就沒有學習的主動性,只是等老師來培訓,培訓就學,不培訓就不學,靠培訓的幾節課哪裏學得好、學得深、學得透呢?優秀的學生老是看大量的課外書、作大量的課外題。指導教師發現有前途的學生很大程度上就是基於這一點,看看他有沒有主動學習、課外閱讀的好習慣!。

 •不要拘泥於常規的教學方式
信息學奧賽的教學不一樣於其它任何學科的教學,信息學奧賽要完全改變「紙上談兵」的陳舊教學模式。不然就會誤人子弟。信息學奧賽的教學就必須打破課堂教學和現有知識結構的限制,因材施教,鼓勵冒尖,不要求一刀切,必要的時候開小竈,爲紮實基礎上的特長髮揮創造條件。課堂教學最大的弊端是講求整齊劃一,在必定程度上抑制了學生特長的發揮。在教學時,我會把個人學生分紅幾組,成績好的,領悟能力強的學生一組,其它通常的,領悟能力要弱一些的學生一組,講課時,針對不一樣組的學生給予不一樣難度的教學,舉一個簡單的例子,如編程計算對能力強的一組學生,我就會把數據的範圍定義的在整數所能承受的範圍,並且我上課時,常常不會採用一種固定的方式,有的時候我會講,還有的時候,我會叫學生上來說,有時學生講課的效果要強於個人,可能我講了半天學生都沒有理解的問題,學生用他們本身的語言跟學生一講,居然明白的很透徹,前面我說的實力不錯的學生,有時,我講的某道題,他理解了,但其它同窗理解不了,我就叫他來說解,效果比我講的要好的多,我常常是這樣認爲,學生和學生之間年齡差很少,對問題的想法也差很少,他們有時能夠用一種更直觀,更簡單的想法把一個複雜的問題簡單化,我常常這樣作,效果還不錯,更多的時候,我是把問題提出來,而後讓學生進行討論,討論以後我再給以總結,或者說發表本身的見解,這樣,一樣一個題,通過討論以後,問題就明朗了許多,同時也造成了許多想法,學生的思路也開闊了許多,之前咱們有些老師和家長都認爲學習了信息學奧賽以後,學習成績會降低,但實踐證實,咱們的學生成績不但沒有降低,反而隱中有升,相比同檔次沒有參加信息學奧賽的學生其文化成績更好,由於學生思路開闊了。
 

問題教學法中的學生思惟能力培養

所謂問題教學法也就是在教學中設置問題或疑點,以解決問題爲突破口,帶動知識點的學習。這種方法與傳統的知識講授法相反,知識講授法採用的是先學習理論,而後再將理論運用於實踐,即先講授後練習的過程;而問題教學法是先去實踐,再實踐中發現疑難,在解決疑難的過程當中促進理論知識的學習,有點相似從實踐中來,再到實踐中去的過程。
 
採用問題教學法能夠在教學中不斷製造懸念,帶動學生思惟的發展,有利於培養學生的創新思惟品質。
本文將從一些問題教學課堂案例出發,談談如何根據問題特性入手,怎樣啓迪學生的思惟。

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的中點)其理論時間複雜度與循環相同。
 
這時有同窗提出:一個原本很簡單就能解決的問題,爲何要複雜化呢,而新方法並不比原方法優?
有意把它複雜化,而且效率也沒有提升,彷佛徹底沒有必要。其實否則。這種方法上升到理論的高度就是「分治策略」的思想,它表明的是一種解決問題的另一種策略,一種全新的思惟方式。它打破了人們認爲選取最大值必定要從頭至尾掃描一遍的思惟,它以全新的處理和比較順序一樣得到了另一種一樣高效的算法。實踐證實,在許多問題中,分治策略是一種很是高效的解決問題的基本方法。
 
故意把簡單問題複雜化,目的是告訴學生,不少潛在的知識均可從簡單問題逐步深化而來,只要常常不斷深刻思考,就能逐步培養本身的創新思惟。
總之,培養學生思惟能力,是咱們教學中的重中之重。本文經過對一些問題教學實錄,從中發現了一些培養學生思惟的方法,但願能給你們的教學帶來些許裨益。
相關文章
相關標籤/搜索