高艷


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