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