張霖
【摘 要】計(jì)算思維是新課程標(biāo)準(zhǔn)下信息技術(shù)課程的核心學(xué)科素養(yǎng),采用“一題多解”的方式來設(shè)計(jì)教學(xué)內(nèi)容,可以有效地培養(yǎng)計(jì)算思維、拓寬思維廣度和提高思維深度。本文以排序算法為例,設(shè)計(jì)一個(gè)“一題多解”的教學(xué)實(shí)例,以此論述基于“一題多解”思想的教學(xué)設(shè)計(jì)方法、策略和技巧。
【關(guān)鍵詞】排序算法;一題多解;計(jì)算思維;教學(xué)設(shè)計(jì)
【中圖分類號(hào)】G434? 【文獻(xiàn)標(biāo)識(shí)碼】A
【論文編號(hào)】1671-7384(2021)010-060-03
案例背景
隨著2017版普通高中信息技術(shù)課程標(biāo)準(zhǔn)的發(fā)布,信息技術(shù)學(xué)科核心素養(yǎng)的理念也開始滲透到我們的課堂教學(xué)中來,為此浙江義烏市組織了一次面向計(jì)算思維培養(yǎng),主題為“算法綜合復(fù)習(xí)課”的教研活動(dòng)。我準(zhǔn)備了這節(jié)《基于一題多解的算法教學(xué)設(shè)計(jì)案例》專題復(fù)習(xí)課,作為公開課與市里的老師們開展交流研討。
案例描述
課前我了解到學(xué)校里剛剛舉辦過校園藝術(shù)節(jié),于是上課后,我借著藝術(shù)節(jié)的話題設(shè)置了如下的情境:我們班安排了若干同學(xué)參加學(xué)校的合唱比賽,比賽要求按照一定的隊(duì)形來安排隊(duì)列,隊(duì)列的要求是:男生在左,女生在右,且整個(gè)隊(duì)列從左向右看時(shí),男生從低到高,女生從高到低。隨后我提出了這節(jié)課的第一個(gè)問題:“若知道這些同學(xué)的身高(數(shù)組a、身高數(shù)值)和性別(數(shù)組b、“M”和“W”),用什么辦法能夠編程實(shí)現(xiàn)隊(duì)列的排列呢?”
假設(shè)有10個(gè)學(xué)生,其身高與性別依次為:
162(女)、187(男)、155(女)、152(女)、166(男)、165(女)、177(男)、152(男)、160(女)、168(女)。
按照題目要求排成隊(duì)列后的順序?yàn)椋?/p>
152(男)、166(男)、177(男)、187(男)、168(女)、165(女)、162(女)、160(女)、155(女)、152(女)。
學(xué)生很容易就想到了一個(gè)辦法:先將男生從低到高排序,再將女生從高到低排序,然后先輸出男生數(shù)組再輸出女生數(shù)組,就能夠?qū)崿F(xiàn)了。我說:“對(duì),那么請(qǐng)大家打開我們素材里的任務(wù)一,用冒泡排序算法將隊(duì)列排出來?!?/p>
“已經(jīng)有幾位同學(xué)實(shí)現(xiàn)了,我們請(qǐng)實(shí)現(xiàn)的同學(xué)展示一下他們的結(jié)果。”我讓一位學(xué)生演示了他的作品。隨后我提高了問題的難度,提出了本節(jié)課的第二個(gè)問題:“同學(xué)們,剛才我們是寫了兩遍冒泡排序算法。那么有沒有可能只用一個(gè)冒泡算法把隊(duì)列排出來呢?”學(xué)生很明顯被這個(gè)問題難住了,我順勢(shì)給出了一個(gè)表格:“其實(shí)冒泡排序的本質(zhì)就是交換,請(qǐng)大家看看表格(表1),思考一下哪些情況是需要將元素交換,哪些又是不用交換的呢?”
學(xué)生完成了上述的表格后,總結(jié)出了三種需要交換的情況。
情況1:兩個(gè)男生且前面的男生比后面的男生高。
情況2:前面女生且后面男生。
情況3:兩個(gè)女生且前面的女生比后面的女生低。
“好,那么請(qǐng)大家根據(jù)這一總結(jié),打開我們素材里的任務(wù)二,試著完成程序填空并運(yùn)行實(shí)現(xiàn)?!蔽医又f。學(xué)生在前面討論和總結(jié)的前提下,順利地完成了任務(wù)二,并且有部分學(xué)生已經(jīng)開始思考后續(xù)的任務(wù)。在大部分同學(xué)完成任務(wù)二后,我又提出了這節(jié)課的第三個(gè)問題:“同學(xué)們,既然能夠用一個(gè)冒泡排序來解決這個(gè)問題,那么有沒有可能用一個(gè)選擇排序來解決呢?”由于前面問題的順利解決,這個(gè)問題學(xué)生明顯更愿意來思考和討論,有學(xué)生提到可以在選擇排序的過程中,保存下最矮男生和最矮女生的位置,并將他們交換到兩頭來實(shí)現(xiàn)。我就根據(jù)他們的想法在黑板上畫出了算法實(shí)現(xiàn)示意圖。
“第一輪的時(shí)候,我們用p來保存最矮男生的位置、q來保存最矮女生的位置,然后將他們交換到隊(duì)伍的兩頭;第二輪的時(shí)候,我們?cè)僬掖伟哪信恢?,再交換到兩頭第二個(gè)位置,以此類推是不是就可以實(shí)現(xiàn)用一個(gè)選擇排序就排好順序了?!蔽铱偨Y(jié)了剛才學(xué)生的思路,也順勢(shì)提出了更深層次的問題:“但是這樣做,真的沒有問題嗎?”有學(xué)生就舉手提出了問題:“如果最矮女生的位置就在隊(duì)伍前面,那不是就會(huì)被換到最矮男生的位置上了嗎?”“對(duì),這位同學(xué)的問題提得非常好,也說明大家開始用算法思維來考慮問題了。那么,我們應(yīng)該如何解決剛才同學(xué)提出的問題呢?”學(xué)生們經(jīng)過討論和思考后,提出了解決方案:當(dāng)我們要換最矮的女生之前,先判斷一下她原本是否在隊(duì)頭上;若是的,則需要修正一下位置。
結(jié)合學(xué)生的討論,我又進(jìn)一步分析出了這個(gè)算法還存在一個(gè)特殊情況需要處理,就是“男女生人數(shù)可能不一致,如何協(xié)調(diào)每次交換后p和q的起始位置”。解決方案也很容易被學(xué)生總結(jié)了出來:每次排完后,根據(jù)選出的結(jié)果來確定是否要讓變量p、q的起始值為+1或-1。
接下來,學(xué)生們根據(jù)剛才的討論和分析,完成了素材里面的任務(wù)三。最后,我給出了本節(jié)課最難的一個(gè)問題:“如何用索引來減少排序時(shí)交換的次數(shù)?”并且直接給出了利用索引來排序的算法實(shí)現(xiàn)示意圖。
由于有了前面三個(gè)問題的解決,學(xué)生對(duì)于第四個(gè)問題的思考顯然深入了很多。我們首先抽象出了一個(gè)數(shù)組p來保存所有人的序號(hào),那么交換的時(shí)候所要比較的對(duì)象就變成了“a(q(j))”和“a(q(j+1))”,突破了這一難點(diǎn)后,學(xué)生很容易就完成了素材里任務(wù)四的程序填空,并調(diào)試運(yùn)行加以實(shí)現(xiàn)。
最后,我對(duì)這節(jié)課的內(nèi)容進(jìn)行了總結(jié),由“基礎(chǔ)冒泡的應(yīng)用”→“冒泡排序本質(zhì)的討論”→“選擇排序的變形”→“輔助索引數(shù)組的引入”,通過一個(gè)問題的不同解法,將排序算法中涉及到的各種算法模型進(jìn)行了強(qiáng)化和總結(jié)。
案例反思
在本節(jié)課的教學(xué)設(shè)計(jì)中,我關(guān)注了以下4個(gè)設(shè)計(jì)要點(diǎn)。
1.思維難度的漸進(jìn)式設(shè)計(jì)
學(xué)生對(duì)于任何內(nèi)容的學(xué)習(xí)都應(yīng)當(dāng)遵循由易到難的原則,本文所提的4個(gè)解法就遵循了由易到難的遞進(jìn)順序,先從基于基礎(chǔ)算法的“先分類,再排序”的思想引入解法1,再到將解題思路限制于一個(gè)冒泡/選擇排序的解法2與解法3,最后遞進(jìn)到基于“索引”的解法4,算法思維深度逐級(jí)遞進(jìn),讓學(xué)生在解決問題的過程中對(duì)排序算法的理解逐步加深。
2.思維表達(dá)的具象化設(shè)計(jì)
計(jì)算思維培養(yǎng)的關(guān)鍵,在于如何引導(dǎo)學(xué)生思考并將思考的要點(diǎn)呈現(xiàn)出來。在本節(jié)課中,我采用了多種方式來表達(dá)思維過程:比如問題1,由于問題難度較低,我采用總結(jié)性的語言將算法概括了出來;而到問題2,由于情況較多,我采用表格的方式將思維要點(diǎn)分類并呈現(xiàn);對(duì)于較難的問題3和問題4,則采用圖示的方式,利用框圖、線條、序號(hào)等符號(hào)將問題解決的抽象過程呈現(xiàn)了出來。
學(xué)生在這些算法呈現(xiàn)的基礎(chǔ)上,再將算法步驟歸納就容易了很多,也讓抽象的問題解決過程具象化,起到了很好的學(xué)習(xí)支架功能。
3.教學(xué)組織的多樣性設(shè)計(jì)
一節(jié)課的課堂節(jié)奏會(huì)直接影響學(xué)生的學(xué)習(xí)興趣和學(xué)習(xí)效果。本節(jié)課在“講”與“做”、“問”與“答”、“看”與“寫”等問題的解決過程中,貫穿了四次問題分析、四次解法討論和四次程序?qū)嵗帉懀龅搅苏n堂組織的張弛有度,達(dá)到了教學(xué)過程的收放自如。雖然問題難度在加深,但是由于學(xué)生在看、想、說、做等思維活動(dòng)過程中的有序切換,使得學(xué)生學(xué)習(xí)時(shí)不至于太過疲勞,也有效地提升了學(xué)生對(duì)于算法學(xué)習(xí)的興趣度和參與感。
4.算法題目的有效性設(shè)計(jì)
不同難度和不同層次的算法思維,應(yīng)當(dāng)采用不同方式的題目設(shè)計(jì)來表現(xiàn)。比如本文中的解法1,由于難度較淺且使用了學(xué)生普遍掌握的算法模板來實(shí)現(xiàn),教師可以采用讓學(xué)生自主完成代碼編寫并調(diào)試的方式來設(shè)計(jì)題目。又比如解法2,就比較適合采用程序填空的方式來設(shè)計(jì)題目,讓學(xué)生在透徹理解算法的基礎(chǔ)上,通過閱讀理解代碼來歸納算法的實(shí)現(xiàn)過程,進(jìn)而推演分析出空白處的代碼內(nèi)容。再比如解法3,由于不同過程有較大的相似性,可以采用給一個(gè)過程,讓學(xué)生構(gòu)造另一個(gè)過程,整塊代碼重寫并調(diào)試的方式來設(shè)計(jì)題目。最后,如解法4這類思維深度較深的算法,不易直接讓學(xué)生構(gòu)造和編寫,而應(yīng)該采用部分代碼挖空的方式來設(shè)計(jì)題目,通過題目的完成情況來驗(yàn)證學(xué)生對(duì)算法理解是否正確。
“一題多解”的教學(xué)設(shè)計(jì)方法可以廣泛應(yīng)用于算法思維的課堂教學(xué)中,采用這種方式設(shè)計(jì)的學(xué)習(xí)內(nèi)容,能夠有效培養(yǎng)學(xué)生構(gòu)造算法模型的基本能力,在提升學(xué)生算法思維深度、拓寬算法思維廣度等方面具有明顯的作用。
作者單位:浙江義烏市教育研修院