算法与数据结构

算法(algorithm):是刻画计算过程的机械能行的指令集,它可以在有限步执行指令对给定的一类问题中任一问题求解。

程序 = 数据结构 + 算法

— 尼古拉斯·沃斯, 创建与实现了 Pascal 语言,因这个公式获得 1984 年图灵奖

这部分的知识如何学习和总结比较合适呢?是一个难题。一上来就去啃经典巨著《算法导论》感觉不是很容易,听很多人建议,算法入门不要选算法导论,这个建议或许是中肯的。

普林斯顿大学在 Coursera 上开的公开课 Algorithm 是比较平缓的学习开始:算法,第一部分

找书籍的话 DVP(Sanjoy Dasgupta, Papadimitriou, Umesh Vazirani)的新书 Algorithms 是入门算法不错的选择,UC Berkeley 的 CS170 使用该教材,当然也不能放过手册:《算法设计手册》,这个可以作为参考书使用。

数据结构课程:UCB CS 61B Data Structures

Josh Hug 据说是位“可爱”、人气非常高的讲师,不去了解一下?而且如果你不懂得如何使用栈、队列、树、图等常见数据结构,遇到有难度的问题时,你将束手无策。

Image.png

[双语字幕] [2019 SP/2020 FA] UCB CS 61B Data Structures

学习这部分的目的要有清晰的认知:

了解很多基础的算法和数据结构,学习理解算法设计的精髓,是要学习如何写出[好]的程序,亦涉及你对什么是好代码的判断标准。

题外话:如果你对如何解决本身缺乏思考,这本书说不定会让你茅塞顿开:《怎样解题》

如果是你为了面试准备或程序竞赛学习这部分内容,网络上应该有比较完备的资料,不作过多介绍。

编程竞赛的常见算法

编程竞赛的常见算法(Algorithms for Competitive Programming)

这是一本免费的英文电子书,逐一讲解编程竞赛里面常见的几十种算法,求职面试也用得到。

fasteR

这个仓库是 R 语言学习教程,有大量示例。