集20年之大成,這是一本開源的演算法教科書

機器之心發表於2019-01-04

機器之心整理,參與:思源、曉坤。

演算法這個詞有一股魔力,似乎任何工作任務加上它就能變得自動化,任何神奇的新發現也都離不開演算法的幫助。那麼什麼是演算法,我們又該如何學習演算法呢?在這一本開源書籍《演算法》中,作者根據 20 年的演算法教學經歷反覆使用與修正,並在幾天前完成出版前的最終版。

《演算法》基於伊利諾伊大學厄巴納 - 香檳分校的電腦科學教授 Jeff Erickson 為多個演算法課程寫的講義集合,這本教科書已經在伊利諾伊大學厄巴納 - 香檳分校出版,自 1999 年 1 月以來 Jeff Erickson 每年都會使用這本書教授一次演算法課程。由於本科理論課程的變化,Jeff Erickson 在 2016 年對講義進行了重大修訂;本書是 Erickson 教授修訂的最基礎課程材料的一部分,主要反映了新的初級理論課程的演算法內容。

書籍開源主頁:jeffe.cs.illinois.edu/teaching/al…

Erickson 教授在伊利諾伊州教授的演算法課程有兩個重要的先決條件:離散數學課程和基礎資料結構課程。因此,這本教科書可能不適合大多數學生作為資料結構和演算法的第一門課程。特別是,Erickson 教授假設至少熟悉以下特定主題:離散數學、證明技巧、迭代程式設計概念、基礎抽象資料型別、基礎資料結構、基礎演算法、基本演算法分析、數學能力成熟度。

關於此書的其它資訊:

  • Erickson 教授打算在近期將這本書自印出版,但不用擔心,出版後這個資源也仍然是免費的。

  • Erickson 教授有一個維護多年的 GitHub 專案,專門為這本書做 Bug 追蹤。

  • Erickson 教授明確表示,歡迎任何人下載電子版或紙質列印,使用、複製和/或分發此頁面上的任何內容都是允許的。

  • 這本書基於兩門課程,分別是 CS 374 (Spring 2018) 和 CS 473 (Spring 2017),Erickson 還在另一個頁面上提供了課程作業和測試。

書籍下載

Erickson 教授為我們提供了兩種下載方式,有單頁版和雙頁版。單頁版方便在電腦上瀏覽,雙頁版方便列印紙質書,良心~

除了書籍下載,Jeff 還提供了很多課程資料,包括 CS374 的 PPT、本書沒有涉及的 CS 473 主題以及形式化語言的一些課件。這些資源有的有獨到的見解,但筆記仍然不會有教科書那麼精煉,讀者可在教程主頁找到這些額外的課程資源。

演算法

既然都準備入這個坑了,那麼演算法的具體定義又是什麼?它和我們熟悉的機器學習演算法又有什麼不同?在書籍的第一章中,Jeff Erickson 給出了演算法的具體定義與來源,現在讓我們走進「演算法」這一詞吧。

演算法是一組明確的、精準的、無歧義且機械執行的基本指令元素序列,通常旨在完成具體的目標任務。其中指令描述的是一個計算,當其執行時能從一個初始狀態和初始輸入(可能為空)開始,經過一系列有限而明確定義的狀態最終產生輸出並停止於一個終態。

例如下面的偽碼定義了一種「演算法」來唱「99 Bottles of Beer on the Wall」,我們只要將 n 設定為 99 就完全和原版一樣了。這就是一組精準和無歧義的指令元素:從 n 到 1 每次賦值一個整數為 i,並將 i 帶入歌詞且唱出,最後結尾再唱兩句就行了。

集20年之大成,這是一本開源的演算法教科書

「演算法」這個詞最終是由「algorism」演化到現代的「algorithm」,它主要通過希臘算術(arithmos)這一民間詞源演化而成。因此直到最近,演算法一詞還專門指代使用阿拉伯數字進行位-值計算的機械計算技術。經過訓練,且能快速和可靠地執行這些過程的人,可以稱為算術者或者是計算員。當然,你也可以更簡單地稱為計算機。

因此對於機器學習,演算法一詞非常廣泛,只要是針對特定任務的確定性計算流程,我們都可以稱之為演算法。下面我們具體看看在這本書中,「演算法」都涉及哪些主題與內容:

集20年之大成,這是一本開源的演算法教科書

集20年之大成,這是一本開源的演算法教科書

集20年之大成,這是一本開源的演算法教科書

集20年之大成,這是一本開源的演算法教科書

集20年之大成,這是一本開源的演算法教科書

集20年之大成,這是一本開源的演算法教科書

集20年之大成,這是一本開源的演算法教科書

集20年之大成,這是一本開源的演算法教科書

集20年之大成,這是一本開源的演算法教科書

集20年之大成,這是一本開源的演算法教科書

Jeff Erickson 是伊利諾伊大學厄巴納 - 香檳分校的電腦科學教授,研究興趣包括演算法、資料結構和拓撲學等,曾獲得美國國家科學基金會職業獎和本科教學最高獎。

集20年之大成,這是一本開源的演算法教科書

圖源:jeffe.cs.illinois.edu/(Jeff Erickson 主頁)

這本書的重新出版在 ycombinator 上引起了很大反響,14 個小時內已經出現了 180 多條評論。

網友 primitivesuave 表示:

Jeff Erickson 是我 2012 年的演算法教授。他是我見過的表達清晰、充滿激情的教育者的典範。我曾經多次閱讀這些筆記來準備相當困難的考試。偷偷告訴你一件上他的課的同學間流傳的軼事:在 25% 的測試問題上,你只要寫「我不知道」,反而能因為承認自身缺陷而得到嘉獎,還節省了教授糾正你的糟糕答案的時間。

網友 kaap 表示:

他是我在 1999 年的演算法課程教授,並也在我的同學間獲得了一致好評。他對遞迴的解釋真是完美(章節 1.2):「遞迴演算法希望為你解決所有的更簡單的子問題,至於使用什麼方法你別管,一邊吃瓜就行。」


相關文章