高艷
摘要:如何在教學(xué)過程中滲透計(jì)算思維的培養(yǎng)是信息技術(shù)教學(xué)的一個(gè)重要命題。本文以“冒泡排序”為例,將算法游戲化、具象化,再分解具體步驟,設(shè)計(jì)相應(yīng)的算法模型,并嘗試驗(yàn)證算法的正確性,反思優(yōu)化算法,以期達(dá)到“算法”模塊的有效教學(xué)。
關(guān)鍵詞:計(jì)算思維;算法;冒泡排序
中圖分類號(hào):G434? 文獻(xiàn)標(biāo)識(shí)碼:A? 論文編號(hào):1674-2117(2023)15-0056-03
惑中求解,初探課堂四步走
在信息技術(shù)教學(xué)中,圖形化編程及代碼語言編程的使用需要根據(jù)學(xué)生不同階段的特點(diǎn)來選擇。在低年段使用圖形化編程,直觀形象,有利于維持學(xué)生的興趣。而到了中高年級(jí),隨著思維和數(shù)學(xué)能力的發(fā)展,圖形化編程難以拓展,不利于發(fā)展學(xué)生的發(fā)散思維、邏輯思維,長(zhǎng)期使用,會(huì)造成學(xué)生過度依賴圖形化界面,缺乏優(yōu)化腳本意識(shí),無法做好向Python語言過渡的準(zhǔn)備,從而使得算法教學(xué)的效率大打折扣。因此,筆者在教學(xué)中嘗試以排序算法中的“冒泡排序”為主要內(nèi)容,設(shè)計(jì)小學(xué)階段“算法”學(xué)習(xí)能力進(jìn)階模式,具體內(nèi)容如表1所示。
課堂游戲,層層分解算法
在教學(xué)中,教師可以利用生活中的情境,或者通過直觀的、參與互動(dòng)性強(qiáng)的游戲,將算法具體化、直觀化,體現(xiàn)算法的趣味性,把解決問題的難度控制在學(xué)生能力范圍內(nèi)。筆者的具體設(shè)計(jì)如下。
游戲一:如何將班級(jí)內(nèi)的同學(xué)按照從高到矮的順序排列
玩法:找5~6位學(xué)生按照身高從高到矮的順序排列。比較最后兩位學(xué)生的身高,身高較高的往前,再和前一位學(xué)生比較,直到身高最高的學(xué)生排在第一個(gè)。接著,再從最后兩位學(xué)生開始比較,剩下的學(xué)生中最高的就會(huì)排到第二個(gè)……這樣一輪輪地比較,最后實(shí)現(xiàn)從高到矮的順序排列。
擴(kuò)展玩法:每位學(xué)生取5張牌面數(shù)字小于10的撲克牌,并將5張牌打亂順序后使用冒泡排序的方法進(jìn)行排序。
游戲與程序設(shè)計(jì)的算法差異性:在游戲中,兩個(gè)學(xué)生交換位置是直接發(fā)生的,但在程序中,并不會(huì)直接交換位置。
游戲二:兩杯水交換容器
玩法:準(zhǔn)備三個(gè)不同的透明容器,分別做好編號(hào),其中兩個(gè)裝了水,分別滴入紅色和藍(lán)色色素。先出示兩杯水,請(qǐng)學(xué)生交換兩個(gè)容器中的水。從生活中的例子可以明確無法直接交換,需要借助第三個(gè)容器c來完成。學(xué)生動(dòng)手操作,理解容器內(nèi)的水的移動(dòng)路徑。
第一步,將容器a中的水倒入第三個(gè)容器c;
第二步,把容器b中的水倒入容器a;
第三步,把容器c中的水倒入容器b。
這樣就完成了容器a、b內(nèi)液體的交換。
游戲與程序設(shè)計(jì)的算法差異性:當(dāng)把變量a賦值給變量b后,變量a的值不變,不會(huì)像游戲中這樣值變?yōu)?。
游戲三:傳話游戲
玩法:請(qǐng)甲、乙、丙三位學(xué)生上來玩游戲,請(qǐng)學(xué)生甲、乙每人心中想一個(gè)整數(shù),為了便于看到游戲過程中的變化,請(qǐng)這兩位學(xué)生把心中所想的數(shù)字記錄到紙上,每次聽到新的數(shù)字時(shí)劃去之前寫下的數(shù)字。學(xué)生甲把數(shù)字告訴學(xué)生丙,目前甲、丙所記錄的數(shù)字是相同的。然后請(qǐng)學(xué)生乙把數(shù)字告訴學(xué)生甲,現(xiàn)在甲、乙記錄的數(shù)字相同。最后,請(qǐng)學(xué)生丙把數(shù)字告訴學(xué)生乙。請(qǐng)學(xué)生甲、乙說出最后聽到的數(shù)字,會(huì)發(fā)現(xiàn)他們兩個(gè)之前所想的數(shù)字從對(duì)方的口中聽到了。
游戲與程序設(shè)計(jì)的算法關(guān)聯(lián)性:這個(gè)傳遞的過程可以讓學(xué)生直觀地看到賦值的過程。作為中間人的丙,在把數(shù)字告訴乙后,并不意味著就不記得這個(gè)數(shù)字了,變量在新的數(shù)值覆蓋之前仍是原來的值。
筆者發(fā)現(xiàn),通過三輪游戲,學(xué)生初步理解了冒泡排序的算法結(jié)構(gòu)是將冒泡排序分解成兩個(gè)值的大小比較,并按序交換兩個(gè)值的多次循環(huán)。
抽象解構(gòu),畫出算法模型
冒泡排序的實(shí)現(xiàn)原理是數(shù)組中有N個(gè)數(shù),假設(shè)需要將數(shù)據(jù)從小到大排列,就要依次比較相鄰兩個(gè)數(shù)的值,如果前者大于后者,就把兩個(gè)數(shù)交換位置,這樣第一輪遍歷所有數(shù)后,會(huì)選出一個(gè)最大的數(shù)放在最后面。經(jīng)過N-1輪,就能完成所有數(shù)從小到大的有序排列。
在學(xué)生充分理解冒泡排序的算法的基礎(chǔ)上,教師進(jìn)一步分解,將嵌套的雙循環(huán)結(jié)構(gòu)通過流程圖進(jìn)行分解,如表2所示。
由圖入碼,鋪設(shè)學(xué)習(xí)緩沖區(qū)
《義務(wù)教育信息科技課程標(biāo)準(zhǔn)(2022年版)》弱化了對(duì)小學(xué)階段程序語言的學(xué)習(xí)要求,不要求系統(tǒng)學(xué)習(xí)某種程序設(shè)計(jì)語言,也不要求機(jī)械記憶函數(shù)、參數(shù),強(qiáng)化了解決問題的策略和方法。因此在教學(xué)中,要給學(xué)生鋪設(shè)一定的學(xué)習(xí)緩沖區(qū),做好由具象思維向抽象思維的過渡,避免學(xué)生因?qū)W習(xí)過程遇到困難而退縮,降低學(xué)習(xí)興趣。具體做法如下。
(1)學(xué)習(xí)使用易操作的流程圖繪制軟件,繪制出算法模型,并由流程圖得出用自然語言描述的偽代碼;如果數(shù)組中的第i項(xiàng)大于第i+1項(xiàng),就使用臨時(shí)變量交換數(shù)組中第i項(xiàng)和第i+1項(xiàng);當(dāng)循環(huán)次數(shù)大于N-1(數(shù)組的個(gè)數(shù)-1)次時(shí),就停止這一輪冒泡排序。
(2)使用具有圖形化語言和代碼語言雙模式編程軟件,將偽代碼通過圖形化編程語言編寫出來,再通過程序編譯功能,轉(zhuǎn)換成代碼語言。學(xué)生通過閱讀代碼,理解代碼語言的含義,進(jìn)而建立起圖形化語言與代碼語言轉(zhuǎn)換的緩沖地帶。
(3)提供缺少某句關(guān)鍵語言的半成品程序并執(zhí)行驗(yàn)證,降低學(xué)生寫代碼的難度。
優(yōu)化算法,展現(xiàn)問題解決新思路
不同的排序算法擁有不同的時(shí)間復(fù)雜度和穩(wěn)定性,冒泡排序只是眾多排序方法中的一種。教師要引導(dǎo)學(xué)生思考如何在排序中尋求空間優(yōu)化、時(shí)間優(yōu)化,在程序迭代進(jìn)階的過程中尋找更快、交換次數(shù)更少的算法。具體方法如下。
優(yōu)化內(nèi)層循環(huán):以從小到大排序?yàn)槔?,?jīng)過第一輪循環(huán)已經(jīng)把最大值排到最后一位,因此在下一次遍歷過程中就應(yīng)該減少最大值的比較。每一輪內(nèi)層循環(huán)都已經(jīng)讓最后一次交換位置之后的數(shù)有序排列,因此比較兩數(shù)大小,并不需要遍歷到數(shù)組的最后一個(gè)數(shù),從而減少相應(yīng)的比較次數(shù)。
優(yōu)化外層循環(huán):若在某次排序中,數(shù)組經(jīng)過冒泡循環(huán)后已形成有序排列,那么無需再執(zhí)行代碼運(yùn)行。在算法中,增加一個(gè)數(shù)值交換的判斷,將該變量初始值設(shè)為0,每交換一次,數(shù)值增加1,若本輪沒有數(shù)值交換,該變量值仍為0,則認(rèn)為數(shù)值是有序排列的,無需再執(zhí)行程序。
遷移運(yùn)用:把冒泡排序作為學(xué)習(xí)藍(lán)本,引導(dǎo)學(xué)生學(xué)習(xí)插入排序、選擇排序等常見排序方式,先將這些排序方式具象化,再通過抽象分解具體步驟,設(shè)計(jì)相應(yīng)的算法模型,嘗試驗(yàn)證算法的正確性,反思、比較不同的排序算法特點(diǎn),得出不同的應(yīng)用方案。
結(jié)語
在“算法”模塊的教學(xué)中,由于受限于學(xué)生的數(shù)學(xué)理解力和英文水平,教師在內(nèi)容設(shè)計(jì)上要以學(xué)生能力發(fā)展及學(xué)習(xí)需求為目標(biāo),選擇學(xué)生熟悉的事物作為支架,完成自然語言、流程圖、程序語言的過渡。在算法中,解決同一個(gè)問題常有很多不同的解決方案,教學(xué)亦然。
參考文獻(xiàn):
[1]中華人民共和國(guó)教育部.義務(wù)教育信息科技課程標(biāo)準(zhǔn)(2022年版)[S].北京:北京師范大學(xué)出版社,2022.
[2]李鋒.新版課程標(biāo)準(zhǔn)解析與教學(xué)指導(dǎo) 小學(xué)信息科技2022年版[M].北京:北京師范大學(xué)出版社,2022.
[3]熊璋.“科”“技”并重:義務(wù)教育信息科技課程標(biāo)準(zhǔn)解讀——訪義教信息科技課標(biāo)組組長(zhǎng)熊璋教授[J].中國(guó)信息技術(shù)教育,2022(09):4-7.
[4]薛敏.小學(xué)信息技術(shù)教學(xué)中進(jìn)行Python編程語言教學(xué)的策略[J].科幻畫報(bào),2022(07):238.
[5]謝聲濤.從Scratch到Python輕松學(xué)[M].北京:中國(guó)青年出版社,2020.