喻文喜 宋新波



● 問題的提出
給定一個n×n的方格棋盤,問從左下角走到右上角共有多少種方案?(規(guī)則:每次只能向右或向上移動一個方格邊長的距離)
例如,當(dāng)n=2時,方案數(shù)為2;當(dāng)n=3時,方案數(shù)為6;當(dāng)n=6時,如圖1。
● 教學(xué)過程
1.動手動腦,探究交流
(1)問題提出之后,學(xué)生拿出紙筆,以n=6為例,分析問題,思考探究,建立數(shù)學(xué)模型,尋找問題的答案。
(2)教師走下講臺,深入學(xué)生中間,與學(xué)生們交流、討論與答疑。
(3)以鄰座為小組,學(xué)生之間相互交流,各自分享自己解決問題的辦法,展開討論。
2.分析講解,圖例演示
教師邀請幾位學(xué)生上講臺借助黑板分析講解演示自己解決問題的方法,其他同學(xué)思考并進(jìn)行評價。主要方法如下。
(1)規(guī)律。以n=6為例,每個方格中的數(shù)字為從左下角到達(dá)所在方格的方案數(shù),如圖2所示。其中的數(shù)字排列方式類似于楊輝三角形,根據(jù)楊輝三角的規(guī)律,得出給定一個n×n的方格棋盤(如圖3),從左下角走到右上角的方案數(shù)等于楊輝三角形中第2n-1行第n列的數(shù),即為(2n-2)!/((n-1)!(n-1)!)。
(2)組合問題。給定一個n×n的方格棋盤,從左下角走到右上角,其中向上移動由n-1種方式排列而成,向右移動由n-1種方式排列而成,共有2n-2種方式。因此,求解方案總數(shù)的問題實質(zhì)上就是從2n-2種方式中,取出n-1種方式的所有組合(去除所有重復(fù)的方案)的個數(shù),故方案總數(shù)為。
在解決問題的過程中,學(xué)生使用的兩種方法都是建立在已有的認(rèn)知水平基礎(chǔ)上,自然而然想到的方法,其中涉及較多的是學(xué)生的數(shù)學(xué)思維能力,為下一步提出信息技術(shù)常用的算法思維解決同一個問題作了鋪墊。
3.拓展思維,精講算法
(1)寬度搜索。將棋盤看作二維坐標(biāo),棋盤的左下角設(shè)為二維坐標(biāo)的原點(1,1),棋盤的右上角設(shè)為二維坐標(biāo)(n,n)(坐標(biāo)系的單位長度為方格的邊長)。以n=3為例,各個方格坐標(biāo)值如圖4,使用寬度搜索方法,可得的方案總數(shù)為6(如圖5)。
(2)遞推法。仍舊將棋盤看作二維坐標(biāo),棋盤的左下角設(shè)為二維坐標(biāo)的原點(1,1),棋盤的右上角設(shè)為二維坐標(biāo)(n,n)(坐標(biāo)系的單位長度為方格的邊長)。用f(I,j)表示從(1,1)到坐標(biāo)(i,j)的方案總數(shù),其中1<=I,j<=n,f(1,j)=1,f(I,1)=1。于是求解f(i,j)轉(zhuǎn)換為遞推問題:f(I,j)=f(i-1,j)+f(I,j-1) (i>1,j>1)。
4.歸納總結(jié),知識延伸
(1)針對提出的問題,學(xué)生們憑借數(shù)學(xué)思維能力找到解決問題的方法,其后,體驗了運用信息技術(shù)算法解決同一問題的全過程,理解了寬度搜索與遞推兩種常見算法的思想。通過兩種思維的對比,感受到設(shè)計恰當(dāng)?shù)乃惴ɡ糜嬎銠C解決問題的優(yōu)勢與便捷。
(2)課余思考:對于同一問題,假設(shè)走步范圍限定于黃色區(qū)域(如圖6),問從左下角走到右上角有多少種方案?
● 教學(xué)反思
信息技術(shù)課程的發(fā)展經(jīng)歷了程序設(shè)計文化論、工具論,到現(xiàn)在的信息素養(yǎng)論等幾個不同階段,其中信息技術(shù)本身具有日新月異的特性,也有社會發(fā)展與需求等因素。作為信息技術(shù)學(xué)科的一線教師,我們也時常在想,《算法與程序設(shè)計》模塊作為信息技術(shù)課程的一部分,教學(xué)目標(biāo)是什么?它的核心價值在哪里?究竟培養(yǎng)學(xué)生什么能力?能否挖掘該模塊特有的一些東西?
按照課程標(biāo)準(zhǔn)要求,該模塊的學(xué)習(xí)目的是使學(xué)生在原有基礎(chǔ)上進(jìn)一步體驗算法思想,了解算法和程序設(shè)計在解決問題中的地位和作用;能從簡單的問題出發(fā),設(shè)計解決問題的算法,并能初步使用一種程序設(shè)計語言編寫程序?qū)崿F(xiàn)算法解決問題。
參照多年的教學(xué)實踐,我們將培養(yǎng)學(xué)生的算法思維確立為該模塊的最根本教學(xué)目標(biāo)。算法思維以程序設(shè)計為載體,讓學(xué)生能清楚地理解問題解決的規(guī)則,能夠認(rèn)識到問題的起點、邊界和限定范圍,按部就班地完成任務(wù)或解決問題。算法思維盡管涉及程序,但更關(guān)注算法的實現(xiàn),強調(diào)的是通過算法來理解計算機對預(yù)設(shè)問題的解決過程,并能清楚地分析問題解決的優(yōu)劣。
基于此,我們嘗試在《算法與程序設(shè)計》模塊教學(xué)中探索算法思維培養(yǎng)的途徑及方法。本節(jié)課合理地設(shè)計了教學(xué)過程,相繼安排了“問題”、“探究”、“交流”、“展示”等多種認(rèn)知活動,以學(xué)習(xí)者為主體,鼓勵學(xué)生自己動手去探索,通過數(shù)學(xué)思維與計算機算法思維的對比,引導(dǎo)和組織學(xué)生通過靈活多樣的學(xué)習(xí)方式和活動方式建構(gòu)算法思維,進(jìn)而實現(xiàn)課程目標(biāo)。
在優(yōu)化算法的過程中,學(xué)生均能在自身原有水平基礎(chǔ)上得到發(fā)展。優(yōu)化的主體是學(xué)生,教師應(yīng)尊重學(xué)生的想法,把選擇判斷的主動權(quán)交給學(xué)生,將優(yōu)化的過程作為引導(dǎo)學(xué)生主動尋找更好算法的過程,尊重學(xué)生的選擇,并以合作方式展開教學(xué)活動。優(yōu)化的過程是學(xué)生自我完善的過程,產(chǎn)生修正自我的內(nèi)需,從而“悟”出屬于自己的最佳方法。在評價算法時,主要評價算法的“特點”,讓學(xué)生自己去感悟算法的“優(yōu)點”,進(jìn)而達(dá)到優(yōu)化的目的。
當(dāng)然,由于信息技術(shù)課程存在課時少、鞏固難等問題,因此,我們在課堂教學(xué)中主要采用“重算法培養(yǎng),輕編程實現(xiàn)”的策略,但也導(dǎo)致少數(shù)學(xué)生在算法思維鞏固方面出現(xiàn)了一些困難。
經(jīng)過對整個模塊長時間的學(xué)習(xí),學(xué)生普遍反映教學(xué)效果不錯,具體表現(xiàn)為以下幾個方面:①促進(jìn)了信息技術(shù)學(xué)科與數(shù)學(xué)學(xué)科的深度融合。從新課程促使學(xué)生學(xué)習(xí)方式轉(zhuǎn)變的角度看,算法教學(xué)為數(shù)學(xué)學(xué)科提供了數(shù)學(xué)實習(xí)的課程內(nèi)容和課程環(huán)境,教學(xué)使學(xué)生在更廣泛的范圍內(nèi)全面地學(xué)習(xí)了數(shù)學(xué)的相關(guān)知識,提高了學(xué)生的數(shù)學(xué)應(yīng)用實踐能力。算法教學(xué)作為信息技術(shù)的教學(xué)內(nèi)容,使學(xué)生更加深入地理解了數(shù)學(xué)學(xué)科在信息技術(shù)學(xué)科中的基礎(chǔ)作用,使學(xué)生感受和體會到在使用計算機解決問題的過程中,數(shù)學(xué)建模與程序設(shè)計的關(guān)系和作用,對學(xué)生結(jié)構(gòu)化思維方式的形成具有促進(jìn)作用。②拓展了《課程標(biāo)準(zhǔn)》中算法的教學(xué)內(nèi)容。由于課程標(biāo)準(zhǔn)中要求的算法不是很多,主要有解析法、窮舉法、查找算法、排序算法與遞歸算法等。經(jīng)過反復(fù)論證,我們在原有內(nèi)容的基礎(chǔ)上
甄選了搜索、遞推、動態(tài)規(guī)劃、分治、貪心等算法作為拓展學(xué)習(xí)內(nèi)容,同時列舉了這些算法的具體應(yīng)用,并結(jié)集成冊形成校本課程。③增強了學(xué)生學(xué)習(xí)算法知識的興趣。首先,每位學(xué)生都有著獨特的先天生理遺傳和不同的家庭背景、生活經(jīng)歷,因此他們的認(rèn)知基礎(chǔ)和思維方式也各不相同。認(rèn)知上的差異不可避免地影響到學(xué)生的學(xué)習(xí)活動,在新知建構(gòu)和解決問題的過程中表現(xiàn)為從不同角度進(jìn)行分析、思考,由此而產(chǎn)生了不同的算法。在教學(xué)中,我們尊重學(xué)生的個體差異,鼓勵算法的多樣化,以便讓不同的學(xué)生得到不同的發(fā)展,促進(jìn)學(xué)生的個性化學(xué)習(xí)。其次,學(xué)生覺得算法是有用的。將教學(xué)活動定位于用編程方法解決實際問題,算法只有融入到實際運用中,其價值才能表現(xiàn)出來。例如,在講述窮舉算法時,學(xué)生動手解決物質(zhì)調(diào)運、產(chǎn)品安排、生產(chǎn)下料等規(guī)劃類問題,體驗感受算法在解決實際問題中的價值。④提升了學(xué)生的多種能力與素養(yǎng)。首先,不同的算法展示了學(xué)生不同的認(rèn)知方式,讓每位學(xué)生都能發(fā)表自己的觀點,傾聽別人的想法,有利于學(xué)生感受解決問題策略的多樣性與靈活性,從中受到啟發(fā),學(xué)會理解他人、欣賞他人。其次,學(xué)生增強了自信心,情感意志均得到了發(fā)展。教學(xué)中,教師要善于發(fā)現(xiàn)學(xué)生各種想法的可取之處,及時給予學(xué)生肯定與贊揚,充分調(diào)動學(xué)生的學(xué)習(xí)積極性。思維的火花相互撞擊、閃爍,才能更好地推動學(xué)生努力思考、探索、創(chuàng)造,享受成功的喜悅,逐步形成積極進(jìn)取的學(xué)習(xí)心態(tài),促進(jìn)心理的健康發(fā)展。再次,算法的多樣化,能在學(xué)生中形成一種積極思考、大膽求異的心理氛圍,培養(yǎng)學(xué)生的創(chuàng)新思維和進(jìn)取精神。學(xué)生在解決問題的同時獲得了重要的算法知識,學(xué)生在多樣、豐富的學(xué)習(xí)過程中,思維能力與學(xué)習(xí)能力有所提高,創(chuàng)新意識得到培養(yǎng),激發(fā)了學(xué)生的發(fā)散性思維、批判性思維以及創(chuàng)造性思維。
● 結(jié)語
算法來源于生活,是人類智慧的結(jié)晶。從某一問題出發(fā),以算法思維培養(yǎng)為核心思想,關(guān)注課堂教學(xué)生活化,編寫程序解決學(xué)生生活與學(xué)習(xí)中遇到的實際問題,對于《算法與程序設(shè)計》模塊的教學(xué)可能具有一定的普適意義。在不增加任何硬件投入的前提下,日積月累,也會使學(xué)生在學(xué)習(xí)動力、算法思維能力、動手實踐能力、創(chuàng)新思維能力等方面會得到有效提升。