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