机器之心整理,参与:思源、晓坤。
算法这个词有一股魔力,似乎任何工作任务加上它就能变得自动化,任何神奇的新发现也都离不开算法的帮助。那么什么是算法,我们又该如何学习算法呢?在这一本开源书籍《算法》中,作者根据 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 还在另一个页面上提供了课程作业和测试。
-
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)这一民间词源演化而成。因此直到最近,算法一词还专门指代使用阿拉伯数字进行位-值计算的机械计算技术。经过训练,且能快速和可靠地执行这些过程的人,可以称为算术者或者是计算员。当然,你也可以更简单地称为计算机。
因此对于机器学习,算法一词非常广泛,只要是针对特定任务的确定性计算流程,我们都可以称之为算法。下面我们具体看看在这本书中,「算法」都涉及哪些主题与内容: