本節書摘來自華章出版社《算法基礎:打開算法之門》一書中的第1章,作者 [美]托馬斯 h 科爾曼(thomas h cormen),更多章節内容可以通路雲栖社群“華章計算機”公衆号檢視
algorithms unlocked
什麼是算法以及為什麼應該關注算法
讓我們從我經常被問到的一個問題開始:“什麼是算法?”一個常見的回答是,“完成一個任務所需的一系列步驟。”在日常生活中經常會碰到算法。刷牙的時候會執行一個算法:打開牙膏蓋,拿出牙刷,持續執行擠牙膏操作直到足量的牙膏塗在你的牙刷上,蓋上牙膏蓋,将牙刷放到嘴的1/4處,上下移動牙刷n秒,等等。如果你必須乘通勤車去工作,乘通勤車也是一個算法。諸如此類。〖zw(b]或者,正如一個我曾經一起打曲棍球的同伴問我的,“什麼是nalgorithm?”〖zw)]但是本書是關于運作在計算機上的算法的,或者更概括地來講,是關于運作在計算裝置上的算法的。正如你日常所運作的算法會影響你每天的生活一樣,在計算機上運作的算法也會影響你的生活。你使用過gps來尋找旅行路線嗎?它運作一種稱為“最短路徑”的算法以尋求路線。你在網上購買商品嗎?那麼你會使用(應該正在使用)一個運作加密算法的安全網站。當你在網上購買商品時,它們是由一個私營快遞公司發貨的嗎?它使用算法将包裹配置設定給不同的卡車,然後确定每個司機發件的順序。算法運作在各種裝置上——在你的筆記本上,伺服器上,智能手機上,嵌入式系統上(例如你的車中,你的微波爐中,或者氣候控制系統中)——無處不在!運作在計算機上的算法和你在日常生活中執行的算法有什麼差別呢?當粗略地描述一個算法時,你可能能夠容忍它的非精确性,但是計算機不能。例如,如果你開車上班,你的drivetowork算法可能會說“如果交通不暢,可以選擇其他路線”。雖然你可能知道“交通不暢”是什麼意思,但是計算機不知道。是以,一個計算機算法是完成一個任務所需的一系列步驟,1且這些步驟需要足夠精确地描述,以使得計算機能夠運作它。如果你已經用java、c、c++、python、fortran、matlab或者類似的程式設計語言編寫過哪怕一丁點的計算機程式,那麼你會對精确度标準的含義有一些概念。如果你從來沒有編寫過計算機程式,那麼當你看了本書中如何描述算法後,可能你會對精确度有一點概念。我們思考下一個問題:“我們想從一個計算機算法中擷取什麼?”計算機算法解決計算問題。我們希望從一個計算機算法中擷取兩個結果:給定一個問題輸入,它應該總能夠産生該問題的正确輸出結果,并且在運作該算法時,應該能夠有效地利用計算資源。讓我們依次看看這兩個必要條件。