机器之心整理,参与:思源、晓坤。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 还在另外一个页面上提供了课程做业和测试。测试
GitHub 地址:github.com/jeffgericks…
书籍下载
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 是伊利诺伊大学厄巴纳 - 香槟分校的计算机科学教授,研究兴趣包括算法、数据结构和拓扑学等,曾得到美国国家科学基金会职业奖和本科教学最高奖。
这本书的从新出版在 ycombinator 上引发了很大反响,14 个小时内已经出现了 180 多条评论。
网友 primitivesuave 表示:
Jeff Erickson 是我 2012 年的算法教授。他是我见过的表达清晰、充满激情的教育者的典范。我曾经屡次阅读这些笔记来准备至关困难的考试。偷偷告诉你一件上他的课的同窗间流传的轶事:在 25% 的测试问题上,你只要写「我不知道」,反而能由于认可自身缺陷而获得嘉奖,还节省了教授纠正你的糟糕答案的时间。
网友 kaap 表示:
他是我在 1999 年的算法课程教授,并也在个人同窗间得到了一致好评。他对递归的解释真是完美(章节 1.2):「递归算法但愿为你解决全部的更简单的子问题,至于使用什么方法你别管,一边吃瓜就行。」