一个男的和计算机对话,父与子的对话:计算机算法
上一封信我提到了電腦必須有三樣要素:輸入、輸出和算法。算法是最核心的部分。沒有算法,電腦不會知道你的輸入究竟該返回什么樣的輸出。你 最近數學期中考考得相當不錯,你應該注意到,“應用題”這種題目,本質上考的就是算法。題目本身可以視為是一種輸入,你需要給出一個答案,這算是一個輸 出。但如果你的應用題只寫一個答案,而沒有計算過程的話,那你這道題會被扣去很大一塊分數,即便你的答案是正確的。解題步驟,或者說計算過程,就是你的算 法,老師是要看算法滴!
算法這個詞,是一個極其復雜的概念, 老爸
我其實研究得不深,2011年的時候,還有一幫非常頂尖的數學家在法國開的一個會上,繼續爭論究竟什么叫算法。在我看來,簡單的理解,算法就是一種“計算的方法”,一種在已知的一些輸入素材前,該返回什么樣的輸出。
算法這個詞的來歷很有些年頭了,大概就在9世紀的時候,有一個波斯的數學家提出了這個概念,當時主要指的阿拉伯數字的運算法則。你還記得學 習加減乘除時候的法則嗎?比如加法交換律、乘法結合律,等等。1842年,有一個叫艾達拜倫的人寫了一個求解某種方程的程序,這個人被視為這個世界上的第 一個程序員。呵呵,記住了,這個人是個女的。是的,史上第一個程序員是位女性,而且她是一位詩人的女兒,真是完美的文理科結合啊!這位女性很有名,將近兩 百年后的今天,我們依然用各種方式來紀念她。
另外一個特別有名的人叫圖靈,他在1954年就過世了,只活了42歲。但這個人才華橫溢,至今世界上最頂尖的數學獎就是以他名字命名的:圖 靈獎。圖靈提出過一個被稱為“圖靈機”的模型,很多人視為這是一個對算法這個概念的重大貢獻。但也有人認為,這個模型解決的問題是“可計算性”,而不是算 法。可計算性指的是那一堆輸入的材料是不是可以計算。比如你做一道應用題,題目是“學校有男生500人,問女生有多少?”,顯然這道題目是無法計算的,所 以沒有可計算性。如果再加上“學校總共有950名學生”,那就可以計算了。在可計算的基礎上,才有所謂算法。圖靈機試圖回答的問題是:究竟什么是電腦可以 計算的。
看到這里,小寶你可能會發現,都是數字的計算啊,我打的游戲和算法有什么關系?植物大戰僵尸里有什么算法?老爸我這里用一個豌豆射手消滅一個僵尸的過程,來向你說明算法在這里面的作用。
整個電腦屏幕,是由極多的像素點組成的,每個像素點,都有兩個由縱橫兩個數字組成的位置數值。豌豆射手所發射出的一粒豌豆,是在運動的。在 運動的過程中,豌豆的位置一直在變。不過它不能上下飛行,只能水平飛行,也就是說,它的位置縱向數字不會變,它的橫向數字在變化,而且只能從左到右。同樣 的,那個搞笑的僵尸也有它的位置,縱向數字不變,橫向數字在變化,而且只能從右到左。當豌豆的橫向位置的數值,和僵尸身體的數值一樣時,說明豌豆擊中了僵 尸,根據事先定義的規則:僵尸被擊中一次,失去1/3血,擊中兩次,一只手掉下來,擊中三次,僵尸死亡。所以,豌豆消滅僵尸,無非就是豌豆的位置數字和僵 尸的位置數字相同三次罷了。
在電腦的世界里,任何一個東西都要被轉化成數字,因為只有數字是可以計算的。文字、圖像都可以轉化成數字。字母A,其實就是一個數字,數值 為65。但如果是字母a,數值就變成97。這種轉化方法叫“ASCII碼”。當然,你也可以編一套自己的轉化規則,比如把A定義為數字89。不過,你的規 則如果別人不懂,那就沒法用于實踐。ASCII碼是今天世界上大家都遵守的編碼規則。
A=65,這個65是十進位制中的數字。十進位制就是逢十就要進位。我們有從0到9的十個數字,如果一個數字比9大1怎么辦?進位:10。這個方法對你來說已經根深蒂固,你可能以為數字世界本來就是這樣的。但其實除了十進位制以外,我們還有其它進位制度。
比如說二進位制,也就是我們只有0和1兩個數字,如果比1大1怎么辦?十進位制的表示方法就是“2”,但二進位制的表示方法就是“10”, 就像在十進位制里9后面是10一樣,二進位制里1后面就是10了。二進位制的3,就是11,不用進位,但如果是4,沒轍,又得進位,變成100。所以 A=65,在二進位制里,65是啥啊?
好復雜啊,小寶你可能都算不過來了(我打賭你要計算65的二進位制表達,可能需要費時好幾個小時,還極有可能算錯,哈哈),不過電腦最不怕的就是這種有規律的運算。可能你要問,好好的十進位制為啥不用,非得搞這么復雜的二進位制?
這和電腦可識別的信號有關。對于我們人來說,我們可以辨識各種各樣的符號加以理解。但電腦不會。電腦是用電的,它能感知到電壓的高低,所謂 高電平低電平。高電平就是1,低電平就是0,電腦去感知二進位制是最容易的。知道為啥我們人容易學習十進位制嗎?因為我們有十個指頭,別笑,真的。其實理 解十進位制所要求的智商比理解二進位制來得高,嗯,是的,電腦其實智商很低,最好的電腦的理解力甚至不如三歲小孩,電腦的強項是有算法的計算速度。
所以電腦是把所有的東西變成二進位制的數字進行運算,但有些東西計算不了。你可以在電腦里畫出(其實是算出)一個漢堡包并通過屏幕輸出,但你不可能讓電腦的屏幕真給你變出一個漢堡包——這沒法計算啊。
那么,電腦是通過什么裝置來進行運算的?這就是我下封信要和你討論的話題:芯片。
哦,對了,A在二進位制里是1000001——順便說一句,我也不是算出來的,而是查ASCII碼表的,呵呵。
總結
以上是生活随笔為你收集整理的一个男的和计算机对话,父与子的对话:计算机算法的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: linux docker查看容器状态,D
- 下一篇: python windows开发_win