
王亞暉
本書共12章,介紹分析了改變世界的12個算法,總共介紹了二進制算法、快速排序、動態規劃、深度優先和廣度優先搜索、傅里葉變換、Dijkstra 最短路徑算法、A* 搜索算法、RSA非對稱加密算法、隨機數生成算法、數據壓縮算法、Page Rank算法、神經網絡算法。以淺顯準確的語言,生動有趣的漫畫,講解這個算法的來龍去脈,從產生、發展、應用等角度詳細解讀了各個算法的邏輯,對於理解計算機、人工智能、編程等領域的基礎原理,非常有意義。是一本面向大衆的科普圖書。
改變世界的12個算法:算法世界裏的處世之道 說起數學,我們一般想到的就是嚴謹,有邏輯性。而數學中的每一個門子學科,更是有它們各自的算數特點。 今天的社會里,演變出來的跟我們關係最爲密切的便是算法。打個比方,在大數據的支撐下,把算法融入我們的衣食住行推薦中,讓我們總是很方便地找到同類產品。 而算法的出現,並不是現代社會的產物,而是有屬於它自己的演變史。可以說,算法的每一次演變推進,對社會都產生了極大的影響。就像王亞暉老師筆下的這本《改變世界的12個算法》,作者以淺顯準確的語言講解了算法的發展歷程,以及對人們生活產生的各種影響。 讀書的時候,文理分科,殊不知,文科理科其實殊途同歸。在讀懂算法對人類的影響之後,更是可以從嚴謹的學科中看懂了處世之道。而這,大概就是我們所說的知識的融合吧。 01 世間並不存在絕對的完美 談起數學,我們腦子裏會浮現的一個詞便是:嚴謹。大部分的內容我們都是可以被證實的。因此,當我們在數學的世界裏想要證明一個命題的真僞時,我們便會調動我們學過的知識來做輔助,最終的目的是證明我們提到的命題的真僞。 可以說,今天我們接觸到的大部分定理都是可以被證明出來的。然而,事實卻是數學的邏輯基礎並非無懈可擊的。 這個結論來自20世紀最傑出的邏輯學家和數學家之一庫爾特.哥德爾。他的不完全性定理表明,“對於包含基本算術的任何一致的形式系統,存在一個在該系統內無法證明或反駁的真命題。” 從這個定理中我們可以看到,原來世間萬物都有其侷限性所在,哪怕是再精密的邏輯,也會有其自身自證的無法存在。 放在我們的日常生活中,何嘗不是在教會我們萬事萬物,切忌過於追求圓滿呢?雖說圓滿的結局是大家想要的,甚至是我們期待的,但是事物本身的缺陷也是我們需要去看到的。我們不能爲了證明心中想要的完美,而忽略了事物的實質。不然的話變成了一種偏執了。 02 排序,讓我們看到了世間本就存在的一種美 數學的世界裏,有一種算法叫排序。它按照着一定的規則,將數據一一比較之後,讓它以一種和諧的方式存在於世間。 試問,若是這世間少了排序,那將是何等的混亂呢?當數學家們發現了數學排序這種算法之後,他讓原本混亂的一切有了秩序,當人們需要某組數據的時候,我們可以通過索引,快速地把他們調出來,爲我們所用。 讓我們每個人有深刻體會的,便是我們經常在用的計算機。當我們不停地往電腦主頁拷貝各種東西,如果我們不加以分類與排序,那麼一段時間後,我們的桌面就會變得混亂不堪。久而久之,還會造成C盤的卡頓。 這個時候,我們就可以通過建立各種子文檔對桌面的東西進行歸類排序,然後再儲存到特定的位置上。這樣一來,問題就解決了。 可以說,正是因爲有了排序的存在,對我們最大的功用就是一切變得井井有條了。 生活中,我們經常說,“無規矩不成方圓”,若是一切無序,我們又該何去何從呢?任何事情想要發展順利,最重要的是讓發展中的各個因素變得有序起來。舉個例子,每個人每天上班前的準備。我們需要在特定的地方找到我們今天要穿的衣服,在廚房備好早餐,喫完早餐,在鞋櫃找到今天要穿的鞋子,然後在規定時間前出門往工作的地方走去。這樣我們才能做成一件事。 而這中間的某些環節要是出錯了,我們可就需要花費更長的時間回到特定的點再出發,這樣一來,就事倍功半了。 可見,排序,是一種藝術,不僅是對於算法而言,更是我們生活中的一種藝術。 03 圖論,世界本是連在一起的整體 前面提到“無規矩不成方圓”,古人也還說過另外一句話叫“牽一髮而動全身”。這大概說的就是算法中圖論吧。 說起圖論,我們不得不提的一個人就是歐拉。18世紀的時候,今俄羅斯的加里寧格勒市的柯尼斯堡城,是一片包含兩個小島和七座橋的地區。這樣一個引人注目的地理位置,讓人好奇的是,有沒有一條路徑,可以讓人們每次走過一座橋不重複,最後剛好回到出發點呢? 當時的歐拉對於人們提的這個問題十分感興趣,於是便着手這個問題的研究。經過歐拉的證明,人們發現這樣的猜想並不存在。 或許我們每個人都習慣性地遇見問題,然後思考解決問題的方法,我們卻始終忘記了思考問題本身是否可解,因此,歐拉的處理方式也給我們提供了另一種思維。而他的論證過程中也給我們提供瞭解決問題的另一種方式——圖論。 其實,世間的萬事萬物,都是聯結在一起的,就像一張天網一般。它演繹着事物之間的關係和連接。萬物之間是各自獨立的,但同時又是和諧地聯繫着。 作爲一種算法,圖論的應用在生活中也非常普遍。比如數學中的樹狀圖,網絡的數據流,以及人與人之間的關係網等,都是如此。 因此,當我們看到人與人的聯繫時,我們不得不感慨,算法的包羅萬象。 舉個例子,從家裏出發,我們可以選擇去很多地方,把每個地方當作一個點,用線段把地點之間做一個連接,我們可以看到,方向是多變的。而最終,走得再遠的人,還是會回到家中。之後的人們便會開始思考,有沒有什麼最近的路徑等,亦或是從一個地方到另一個地方,我們是否可以順便走過其他地方。 你看,這樣一來,我們把它畫在紙上,關係圖不就出來了嗎。可見,數學是理性的,但是我們也可以從中找到感性的存在。“出走半生,歸來仍是少年”。從家出發,最終我們還是回到了起點。 關於算法中包含的智慧,其實還有很多。可見,算法的出現,不僅改變了世界,也改變了我們邏輯思維,更多的是,讓我們找到了人與世界萬物的連接。每一個發現的出現,其實都在告知我們,原來我們還可以繼續探索更多的可能。
在著名的科幻小說《三體》中,一位善意的三體人警告地球人,發來信號“不要回答,不要回答”,因爲一旦回答,地球的座標和位置就有可能暴露,給地球人帶來毀滅性的傷害。到小說的第三部,三體人已有蓬勃的野心入侵地球,也有前沿的科技實力來支撐實現這個構想。 這時候對抗三體人的是羅輯,他抓住了三體人怕自己在宇宙中的座標及位置暴露的心理,制衡了他們上百年。若三體人膽敢入侵地球,羅輯就利用太陽向茫茫宇宙廣播三體星球及地球在宇宙中的目標位置,位置一旦暴露,必定引來其他的生物文明,那三體星球和地球將同時不保。三體人不會冒這個險,盲目入侵地球。 這是科幻小說中的故事,在這個故事中,座標和位置是如此重要,隱身在浩瀚宇宙中,關係着自己星球的生死存亡。就如同加密算法,利用精巧嚴謹的算法,將重要信息隱藏起來,一旦被解開,機密泄露,也會帶來不可估量的損失。 1 加密算法是《改變世界的12個算法》這本書中講到的內容,這本書詳細講述了在推動及影響了人類文明發展的事物中,那些不太被普羅大衆所關注到的無形卻有着巨大影響力的東西:算法。 如同書本名一樣,本書共講了12種算法,包括:二進制、從遞歸引入、排序算法、動態規劃、圖論與搜索算法、最短路徑算法、加密算法、隨機算法、數據壓縮算法、PAGERANK算法、神經網絡、深度學習,這幾個章節。在專業化的詳細講解中穿插着講了這些算法的來去歷史,相關人物故事,有專業性也有趣味性。 這本書的作者是王亞暉,曾就讀於美國特拉華大學計算機科學專業,在算法方面有獨到的興趣和心得,著有《遊戲化思維》、《交叉小徑的花園:趣說數學探索史》等作品。 2 在《改變世界的12個算法》這本書的第七個章節,作者講了--深邃黑暗的鑰匙:加密算法。這一章是我整本書看下來,最爲喜歡的部分,裏面有不少熟悉的內容,也能聯想到很多,例如:聯想到福爾摩斯的故事中,那些案件的關鍵信息線索,其實本質上也和加密有關;還有諜戰片《風聲》中一些情節,因爲加密本質也是權謀與陰謀的交量,也可以看作某種諜戰。 最早的加密算法可追溯到古埃及時代,只是沒有實際的例證。可以找到的最早的加密例子是在古希臘時期,當時稱之爲隱寫術。 一位被囚禁在宮廷中的人希望和自己的同盟者取得聯繫,他讓僕人將頭髮剃光,將自己的反抗計劃寫在僕人的頭皮上,等僕人的頭髮重新長好後,去尋找主人的同盟者,見面後將頭髮剪掉,露出了寫在頭皮上的信息。用這種方式進行了隱祕的信息傳遞;古希臘還有一種針刺加密法,通過微小的標記來傳遞信息;在古羅馬的凱撒大帝時代,還有種凱撒密碼的加密方法,利用固定數量的字母偏移進行替代。 3 這些都是密碼的雛形,在上千年的文明發展中,密碼學得到了蓬勃的發展,在不同時代都有其代表性的密碼技術,而密碼學被極大地推動發展起來,是在20世紀的兩次世界大戰中。在嚴峻的戰爭形勢中,同盟國之間爲了有效且不泄密地傳遞信息,不被敵方知道真實意圖,想方設法利用各種算法對信息進行加密,甚至還專門成立了密碼研究小組。 1927年,德國外交部長曾向墨西哥發了一份祕密電報,向墨西哥承諾,若後者同意向美國宣戰,前者將在戰爭結束後幫墨奪回包括德克薩斯、亞利桑等領土。 英國情報機構攔截了這份電報,將之交給美國政府,美國大爲憤怒和震驚,它沒法再保持中立,正式對德宣戰。電報泄露事件是美國正式加入大戰的導火索。 到了第二次世界大戰,密碼學成了敵對國家之間信息戰的關鍵領域。這一時期,出現了很多天才般的密碼型技術人才。 4 1919年,在波蘭波茲南大學挑選了12位年輕人,經過一段時間嚴格祕密的訓練,留下了三位持續進行相關密碼學的層層培訓,他們在後來的破譯德軍情報信息方面,展現了令人敬畏的決心和才智,非凡的能力,天賦和經驗,取得了卓越的成績,被稱之爲“波蘭三傑”。 他們還設計並製造了一臺機器,可以在極短時間內完成數以萬計的計算,他們給這臺機器取名叫“炸彈”Bombe。這臺機器也在破譯密碼中起到了重大的作用。 可惜的是,做出了重要貢獻的“波蘭三傑”,結局都挺唏噓。在戰爭的陰霾下,他們撤退、隱身、尋求庇護…不管在哪裏,都沒有放棄自己的職責。可是命運對他們並不友善,有人的過去在後來的歷史時代成了敏感話題,相關流言不斷,被打壓誤解和質疑,當事人選擇了沉默隱忍,淪爲記賬員;還有人避開復雜的環境,選擇做普通的教職員,度過了後續的人生;還有一位乘坐的輪船在海上遇難,長眠於海底。 另一個同樣遺憾的例子,就是英國的密碼專家阿蘭·圖靈,很多人聽說過他的故事。這樣一位做出了歷史性貢獻的天才中的翹楚科學家,因個人喜好不被當時社會接受,被羞辱打壓,最終因不堪忍受迫害和嘲諷,咬了塗了氰化鉀的蘋果,結束了年輕的生命。 還有在英國布萊切利園的工作人員,這是寧靜鄉村隱藏的一個密碼基地,這裏的工作人員在戰爭中的努力對盟軍的最終勝利發揮了不可估量的作用。只是因爲保密需要,他們做出了巨大貢獻,卻無法與他人分享成功的喜悅,不管承受着怎樣的目光和質疑,始終守口如瓶,度過了在他人看來表面上平淡無奇,實則波瀾壯闊濃墨重彩的人生。 5 歷史的車輪滾滾向前,最終會給人以真相,以正名,只是他們再也無從知曉,甚爲遺憾。 這些英雄們的研究成果,對社會的發展,對歷史某些事件的走向至爲關鍵,只是他們通常籍籍無名,並不爲大衆知曉,也如同《改變世界的12個算法》這本書中講述的所有算法一樣,有些是無形的無法目見的,並不是有形的物,能帶給人直接的觀感,因而被人們忽視。 但不管如何,它們所帶來的影響,是真實存在的,深遠的,有意義的。發明及推動他們發展的人物,也同樣值得歌頌及讚揚。
這本書非常詳細的講了關於信息技術中,最基礎的十二種算法,對於編程的學習很有幫助
本書闡述了計算機運作效率的算法