黃 逸
算法是高中新教材新增的內(nèi)容,很多教師在處理教材過程中都遇到了困難.課程標準中指出算法思想是這一部分內(nèi)容的核心,而算法結構與設計是對算法思想的實現(xiàn),所以也是相當重要的一個部分.在此我想談談自己對于這部分內(nèi)容的淺見.
1 從算法思想自然地過渡到算法結構
在算法思想這一節(jié)中,教材中介紹了各種各樣生活中的例子以及解決他們的各不相同的算法.這種現(xiàn)象雖然非常生動有趣,但卻難以揭示問題的本質.數(shù)學的主要特點之一就是研究事物的結構從而揭示問題的本質.所以我們對各種算法進行總結歸納,抽象出了三種基本結構,即順序結構、選擇結構和循環(huán)結構.任何一個算法都可以由這幾種結構組合而成.這樣,為了研究各式各樣的算法,只需研究清楚這三種結構就可以了.數(shù)學上的分類思想在這里得到了充分的體現(xiàn).
2 從整體上把握三種結構
教材中三種結構是順著寫下的,但我認為在實際教學過程中首先應該讓學生對他們有一個整體的感覺,再逐個做詳細的解說.比如為了激發(fā)學生的興趣,可以從他們感興趣的電腦游戲說起.電腦游戲都是程序編出來的,自然逃不開以上三種結構.游戲的一關一關的順序進行就是一個順序結構;在有的游戲中需要面臨抉擇,要選擇走哪條路,這就是選擇結構;當游戲中某關沒有闖過,又會跳到這一關的開頭,重復之前走過的路,如果很多次都闖不過去,電腦上就可能會彈出GAME OVER的字樣,這其實就是循環(huán)條件不滿足,跳出循環(huán)的表現(xiàn).通過這樣生動的例子不僅可以激發(fā)學生的興趣,而且可以讓他們對算法的三種結構有一個感性的認識,在進一步理性認識時就不會感到太抽象和吃力.
3 深刻把握三種結構的層次
在對三種結構做仔細分析時,要注意他們之間的自然過渡.例如對于順序結構的教學可以通過以下例題做分析歸納,從而轉入對選擇結構的討論.
分析 對于可以用公式解決的問題,只需把相關的變量設為一些字母并把每個數(shù)值賦給相應的字母,再輸入公式,就可以得到答案.這個過程其實就類似使用計算器.然而,并不是所有的問題都有現(xiàn)成的公式,這時就要用到稍復雜的結構了,計算機相對計算器的優(yōu)勢也就顯現(xiàn)了出來.
例2 判斷某年份是否為閏年,要看此年份能否被4整除.如果不能被4整除,則是平年;若能被4整除,但不能被100整除,則該年為閏年;若能被4整除,又能被100整除,還要看能否被400整除,若能則為閏年,否則也為平年.寫出判斷是否為閏年的算法.
分析 這是一類比較常見的問題,如車票費,物管費,稅收,成績等級,解一元二次方程(對Δ的討論),解不等式(對系數(shù)正負的討論)等.雖然沒有一個固定的公式,對于每種情況往往有一個相應的結果.通常用選擇結構來處理.重點在于分清各種情況,用選擇語句進行嵌套時一定要分清層次,注意條件和結果的一一對應.本質就是數(shù)學上的分類討論思想.但是我們發(fā)現(xiàn),以上這些問題只需要人和一個計算器就能完成,我們何必要費盡心思寫算法讓計算機來算呢?
例3 求1-1/2+1/3-1/4+…+1/99-1/100的算法
分析 對于這個問題,僅靠人工加計算器在短時間內(nèi)難以解決,而這也是一類比較常見的問題,如有一定規(guī)律的數(shù)列的和,積.我們可以首先給出一個初始值,運用循環(huán)結構,告訴計算機你要進行的運算滿足的條件,即循環(huán)條件,然后就可以把一切都交給計算機去做了.該結構中的循環(huán)變量有兩類作用:1.控制所加到數(shù)的大?。ㄈ绫绢}中的1/100)或運算結果大?。ㄈ缫髷?shù)列運算結果大于某個值);2.從1開始控制循環(huán)次數(shù)(如給定了數(shù)列的項數(shù)).此類題目往往是利用計算機運算速度快的特點去解決人腦在短時間內(nèi)無法解決的問題.通常這類問題沒有明確的公式,只能“死算”.至此,計算機的優(yōu)勢才得以充分體現(xiàn).
4 體現(xiàn)數(shù)學對于算法的重要性
雖然課程標準不要求學生自己會在計算機上編程運行,但教師還是有必要掌握這一點.這樣可以真實地運行一些程序讓學生感受數(shù)學對于算法的重要性.
例4 求兩個數(shù)的最大公約數(shù)
分析 一個自然的想法是從兩數(shù)中較小的那個數(shù)開始試,如果他能夠被兩數(shù)整除則為最大公約數(shù),如不能則把他減1,再試,依次類推,直到找到一個同時整除這兩數(shù)的數(shù).這種算法乍看起來挺好的,他發(fā)揮了計算機的窮舉優(yōu)勢.但是如果兩個數(shù)字都很大,計算機的運算量就會相當大.用窮舉法嘗試運行一下,再用輾轉相除法寫程序運行一下,兩者對比就會發(fā)現(xiàn)后者速度快得多.通過數(shù)學改進的算法效率大大提高.
例5 求方程f(x)=x3+x2-1=0在[0,1]上的近似解,精確度為0.01
分析 對于這個問題,直接窮舉顯然是不可能的.因為[0,1]是一個無限集,無法讓計算機跑遍所有的數(shù)一個一個去嘗試.所以要用二分法來解,而他的理論基礎是連續(xù)函數(shù)的介值性.這更進一步說明了算法離不開數(shù)學.我們知道,程序的靈魂是算法,這里我想說,算法的靈魂是數(shù)學!
此外,北師版教材主要要求學生掌握基本的算法,對好的算法沒有很高的要求,這是受課時數(shù)限制決定的,但是教師可以向學生做一個簡略的介紹,因為只有在分析算法的效率時才能充分體現(xiàn)數(shù)學對于算法的重要性,也為學生日后的進一步學習打下基礎.
“本文中所涉及到的圖表、注解、公式等內(nèi)容請以PDF格式閱讀原文”