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

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

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

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

書籍開源主頁: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 帶入歌詞且唱出,最後結尾再唱兩句就好了。

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

所以對於機器學習,算法一詞很是普遍,只要是針對特定任務的肯定性計算流程,咱們均可以稱之爲算法。下面咱們具體看看在這本書中,「算法」都涉及哪些主題與內容:

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


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

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

網友 primitivesuave 表示:

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

網友 kaap 表示:

他是我在 1999 年的算法課程教授,並也在個人同窗間得到了一致好評。他對遞歸的解釋真是完美(章節 1.2):「遞歸算法但願爲你解決全部的更簡單的子問題,至於使用什麼方法你別管,一邊吃瓜就行。」

相關文章
相關標籤/搜索