武健


緣起
“算法”一詞是在數學界提出的。
“算法”的中文最早出現在中國漢代的數學名著《周髀算經》中。《周髀算經》卷上有:“數之法出于圓方。圓出于方,方出于矩。矩出于九九八十一”。意思是:算數的方法都出于對圓、對方的計算,其中圓出于方(圓形面積=外接正方形*圓周率/4),方出于矩(正方形源自兩邊相等的矩),矩的計算出于九九八十一(長乘寬面積的計算依自九九乘法表)。
“算法”的英文是Algorithm,來自于9世紀波斯數學家穆罕穆德·賓·穆沙·阿爾·花剌子密(Muhammad bin Musa al-Khuwarazmi,又譯花剌子模)一本著作的名稱。原來為“algorism”,意思是阿拉伯數字的運算法則,在18世紀逐漸演變成為“algorithm”。算法隨著阿拉伯數字一起傳播到了世界范圍。
在數學中,也會經常提到“算法”。
算法一般是指計算的方法、運算的法則。例如,要計算18+19得多少?是有許多種算法的。可以先算8+9,然后再加上20;也可以先算19+8,然后再加上10;還可以先用18+2,然后再加上17……學習數學的過程中,掌握的算法越多,數學思維就會越清晰。
在計算機學科中也經常會提到“算法”一詞。
詩人拜倫的女兒Ada Byron(艾達·拜倫)是世界上公認的第一位程序員。在1842年為巴貝奇分析機編寫求解解伯努利方程的程序時就提出了關于算法的問題。
計算機中的算法是指利用計算機在有限步驟內求解某一問題所使用的一組定義明確的規則。通俗地說,就是計算機解題的過程,是解決問題的方法與步驟。在這個過程里,無論是形成解題思路還是編寫程序,都是在實施算法。所以前者是推理實現的算法,后者是操作實現的算法。
與數學中的存在性證明還是有些不同的。數學中的存在性證明是一種理性的承認。希爾伯特曾經在給學生講到存在性證明時,舉過一個例子:“這個班里一定存在一個學生,他的頭發數最少,可是我們不可能知道他是誰”。而計算機則需要落實到每一件工作、每一個步驟,如計算一個函數值,求解一個方程,證明一個結果等。需要有一個清晰的思路,一步一步地去完成,這就是算法的思想,程序化的思想。
所謂算法思想,就是指按照一定的步驟,一步一步去解決某個問題的程序化思想。正是其步驟性、程序性使得能夠在計算機上得以完成。計算機解決任何問題,必須將解決問題的過程分解為若干明確的步驟(即算法),并用計算機能夠接受的“語言”準確地描述出來。算法是計算機科學的重要基礎,沒有算法也就沒有計算機。
生活算法
在計算機普及的時代,程序設計人員日益增多。程序化越來越為人們普遍接受,認可算法在社會中變得越來越明確、重要。對照著生活,人們發現以前雖然沒有直接用“算法”一詞,但一直在使用著算法的思想:即使自己在面對一些不足道的日常小事時,也會想出很多種解決方法,提出不同的解決過程,有著不同的最終結果。在這些解決生活的方法與步驟中存在著背后的規律與一般性的行動規則。
例:生活中問題——老李家住東直門,周六要去王府井書店買書。剛要出門,愛人又要他到附近的菜店買點菜回家,好做中午飯。聽話的老李會怎么辦呢?
生活中的事情,往往會有很多不同的解決方法。老李可以:
方案一:從家出來,直奔附近的菜店買菜,然后提著菜直奔書店買書。之后拿著書與菜回家。
評述:怎么會這樣?提著裝滿菜的菜籃子進書店,這種人真是少見呀!
方案二:先到書店買書,然后提著書到家附近的菜店買了菜再回家。
評述:可能是一種省力的方案,書畢竟便于攜帶一些。不過,都是這樣嗎?會不會帶著沉重的百科全書,然后與菜店的小販們討價還價?
方案三:先去附近的菜店買菜。送回家后再去書店買書。
評價與分析:這是與家人協作的一種方法。家里的人在做飯,老李先去買菜。先把菜送回家,再到書店自由自在地挑書。等回家了,飯也做好了。不過,這種方法可是要多走好些路,多花不少時間的呀。
方案四:……
生活中會有許多的類似“買書與買菜”的問題。面對問題時會有很多種解決方法,同時個人會根據環境條件、個人偏好等原則與標準選擇方法、方案;在不同環境、方法下會有著不同的結果……
如果按時間維度,把生活中解決問題的方法與步驟看成一個個“程序”,那么針對解決生活問題的方法而形成的行動規則與套路,就可以看成“算法”。在方法與步驟的基礎上,面向生活中問題解決的“算法”,就是生活算法。
特點
用生活算法的思路來反思我們的生活,可以發現:我們可能會隨時遇到類似的生活問題:早晨上班前發現車子壞了,自己要怎么辦?如何辦理自己家里的電話移機?把手洗干凈的步驟是什么?一組同學如何配合把教室打掃干凈……
面對這樣或者那樣的問題都會有許多種辦法,有人選擇這樣的方法,也有人選擇那樣的方法;同一個問題會有著多種解決方法,即使不恰當的方法也是方法;同一種方法甚至會產生不同的結果,即使不能解決的問題也有最終結果……在生活中,每個人隨時都需要決策,每個人都在不同程度上關注方法與步驟。如果還能夠更深入,還會繼續問下去:它們是如何產生的?是否存在著一般性的行動規則?我們是根據什么因素在各種不同方法與過程中擇優?……這些都是生活算法特別關注的范疇。
明確的算法可能對解決當前具體事物沒有直接作用。但在更廣的范圍內會有明顯作用,尤其是在應用工具、技術解決相對復雜的問題時會更加典型和突出。
因為,生活算法需要預先設計出解決問題的方案;需要對各種不同方案進行篩選;需要根據現有的條件對解決的方案進行分析與優化……也許生活中不存在最優算法,但在諸多方案中總會存在一種或多種更好的。這就是在進行著生活算法設計與優化的過程。在“買菜與買書”中,老李有了目標就可以提出不同的解決方法與步驟,可以根據省時或者省力等不同的標準,在不同的解決方案中選擇自己最適合的一種。這是在規劃算法。
對人的認知來說,生活中的“簡單”問題往往很“復雜”。許多簡單的事情,在不同的環境中會有不同的要求,往往會有更多的限制條件。條件不同,即使相同的事情也會有著不同的解決方法。越接近生活實際,限制的條件會越多,就會越難抉擇。這往往需要我們列舉出各種不同的解決方法,根據具體情況,通過列舉、對比、分析最終找出最恰當,并在具體實施中不斷修正來達到最佳的效果。這就是在應用中實施生活算法。
面對著生活中的問題,每個人都會首先從自己的視角來思考,得到不同的、可能的解決方案。在具體實施過程中,當遇到簡便、合適的方法時就使用;遇到繁雜、不合適的方法就尋求變化,不固執地使用某一種方法。這也是一種選擇方法的準則:遇到繁雜而不方便的方法就需要尋求變化,找到一種簡便、恰當的方法。前者是推理實現的生活算法,后者是操作實現的生活算法。
如果能夠更早地把這些方法教給孩子們,幫助他們能夠更獨立地面對生活問題,幫助他們去尋找這些方法與步驟背后規律與規則,幫助他們在使用信息技術中善于歸納、推理、選擇……對于信息技術課程而言是相當重要的。
參考文獻:
袁思情,李俊對.“圓出于方”解釋的探析[J].小學教學·數學版,2010(06):46.endprint