学习算法,很重要的一点在于有一些好的算法书籍可以学习和查阅。就比如说最经典的算法导论,拥有此书,你可以保证自己的算法无懈可击,不会出现严重问题,因为书上的东西经过了成百万上千万的读者查阅,写作者有能力证明自己的算法的正确性。相对于书籍,网络教程可能比较容易出现问题,因为99%的写作者只是按理解写算法,并不能证明,看的时候只能起到辅助理解的作用。
那么,市面上那么多算法书籍,我该使用哪一本呢?
很多新人一上来就被人推荐算法导论,可是这本书真的很难,刚开始入门的人看可能没感觉,但是如果是有一定算法经验的人决定深入理解算法的时候去看,就会发现不是一般的难,需要大量的数学、离散数学、图论、自动机等知识。我就举个例子,书中对于贪心算法的证明,是用了一种叫做拟阵的数学方法,几乎没有人听说过这个生僻的概念,更不用说去看懂证明了。因此这本书不建议用来入门,它更适合用来查阅。特别是在掌握基本的算法和数据结构之后想进一步加强对理论的分析,才会选择算法导论。
如何选择算法书籍这个问题,对于刚开始学习的同学可能很难,为了照顾新手,这一次我又整理了一遍算法书籍,距离上一次已经有2年时间。这一次更加全面,甚至于包括新书李煜东的《算法竞赛进阶指南》,本次整理我几乎花光了csdn的积分,只为了找到所有带有详细书签的pdf算法书籍,肝了一下午全网寻找书籍,对于一直找不到好pdf的童鞋有福了。
csdn现在下载也是越来越坑,一本书要50积分,我好几年的账号总共才几百积分,下载几本书就用光了。
这次整理的书籍列表如下,标注了难度:
接下来让我们一起看看每一本书,不想细看的同学直接在公众号输入book获取书籍下载地址。如下图所示都已经整理好了,这些书籍放在阿里云上面,因此下载速度非常快,之前放在百度网盘慢得我自己都不想下载(自从某盘工具被和谐再也不想用百度网盘)。
这本书相对于算法导论要简单一些,更适合入门。
书中详细介绍了当前流行的论题和新的变化,讨论了算法设计技巧,并在研究算法的性能、效率以及对运行时间分析的基础上考查了一些高级数据结构,从历史的角度和近年的进展对数据结构的活跃领域进行了简要的概括。
作者基于丰富的教学经验,开发了一套对算法进行分类的新方法。这套方法站在通用问题求解策略的高度,能对现有的大多数算法都能进行准确分类,从而使本书的读者能够沿着一条清晰的、一致的、连贯的思路来探索算法设计与分析这一迷人领域。
和普通的算法书不同,这本书从创造性的角度出发——如果说算法导论讲的是有哪些算法,那么算法引论讲的就是如何创造算法。结合前面的算法设计与分析基础,这本书把能解决的算法问题数量扩大了一个数量级。
非常奇特的一本算法书籍。
本书提供了有关编程的一种与众不同的理解。其主旨是,实际的编程也应像其他科学和工程领域一样基于坚实的数学基础。本书展示了在实际编程语言(如C++)中实现的算法如何在最一般的数学背景中操作。例如,如何定义快速求幂算法,使之能使用任何可交换运算。使用抽象算法将能得到更高效、可靠、安全和经济的软件。
这不是一本很容易读的书,它也不是能提升你的编程技能的秘诀和技巧汇编。本书的价值是更根本性的,其终极目标是提升你对编程的洞察力。要想从中大获裨益,你需要从头到尾认真学习:阅读代码,证明引理,完成练习。到结束之时,你将看到如何把这里讨论的演绎方法应用到你的程序中,保证你做出的软件部件能一起工作,并表现出它们所应该表现的行为。
强烈推荐,后面我也会慢慢看这本书(对于工程实践有着非常的意义)。
本书概念清晰、实例详尽,是一本有关设计、实现和有效使用C语言库函数,掌握创建可重用C语言软件模块技术的参考指南。书中提供了大量实例,重在阐述如何用一种与语言无关的方法将接口设计实现独立出来,从而用一种基于接口的设计途径创建可重用的API。
本书是所有C语言程序员不可多得的好书,也是所有希望掌握可重用软件模块技术的人员的理想参考书,适合各层次的面向对象软件开发人员、系统分析员阅读。
《算法导论》(英语:Introduction to Algorithms)是基础算法方面最权威、最详细的著作之一,在很多国际著名大学被用于算法课的教材。诸多算法方面的论文将其列入参考文献当中。
该书详细的介绍了诸多常见的算法及数据结构,并用严谨的证明来论证其正确性。每个章节均有例题,适合学习者深入理解。第一版刊行于1990年,2009年最新版为第三版。在许多国家常常以作者姓名首个英文字母被称为CLRS(第一版则简称为CLR)。
小编注:对于所有的算法,个人倾向于采用算法导论上面的代码来写,因为算法导论上面的算法逻辑非常精简,几乎很难再优化,其他大部分算法书籍都带有太重的个人风格,特别是在函数命名、变量命名等方面。算法导论某种意义上称之为圣经也不为过。
本书作为算法领域经典的参考书,全面介绍了关于算法和数据结构的必备知识,并特别针对排序、搜索、图处理和字符串处理进行了论述。第4版具体给出了每位程序员应知应会的50个算法,提供了实际代码,而且这些Java 代码实现采用了模块化的编程风格,读者可以方便地加以改造。本书配套网站提供了书中内容的摘要及更多的代码实现、测试数据、练习、教学课件等资源。
《算法竞赛入门经典(第2版)》是一本算法竞赛的入门与提高教材,把C/C++语言、算法和解题有机地结合在一起,淡化理论,注重学习方法和实践技巧。全书内容分为12 章,包括程序设计入门、循环结构程序设计、数组和字符串、函数和递归、C++与STL入门、数据结构基础、暴力求解法、高效算法设计、动态规划初步、数学概念与方法、图论模型与算法、高级专题等内容,覆盖了算法竞赛入门和提高所需的主要知识点,并含有大量例题和习题。
世界顶级程序设计高手的经验总结,ACM-ICPC全球总冠军巫泽俊主译,日本ACM-ICPC参赛者人手一册。
本书对程序设计竞赛中的基础算法和经典问题进行了汇总,分为准备篇、初级篇、中级篇与高级篇4章。作者结合自己丰富的参赛经验,对严格筛选的110 多道各类试题进行了由浅入深、由易及难的细致讲解,并介绍了许多实用技巧。
本书分为准备篇、基础篇和应用篇三大部分,借助在线评测系统Aizu Online Judge以及大量例题,详细讲解了算法与复杂度、初等和高等排序、搜索、递归和分治法、动态规划法、二叉搜索树、堆、图、计算几何学、数论等算法和数据结构的关键知识点,既可以作为挑战程序设计竞赛的参考书,也可以用来引导初学者系统学习算法和数据结构的基础知识。
本书主要根据CCF-NOI信息学奥林匹克竞赛涉及的知识体系进行编写,对计算机程序设计的基本技能——数据结构与算法进行了深入的讲解。
本书面向已经掌握至少一门程序设计语言、对于算法设计有入门性认识的读者,以各类知识点之间的贯穿联系为主线,通过各种模型与例题对各种思维方向进行深入引导,让读者在阅读本书后对算法设计初步具有整体掌控性的理解。能够让读者由浅入深地体会算法,学习算法。
本书融合了作者在算法设计教育领域、算法竞赛参赛与指导领域10年来的一线经验,其特色是训练读者算法设计的思维习惯,而非对知识流水的记忆性诵读,能让认真阅读本书并完成所有练习的读者,逐渐具有NOIP竞赛一等奖以上的实力。
小编注:我买了一本算法竞赛进阶指南,因为找不到pdf,目前全网只找到了带水印的pdf,还是建议大家购买实体书,如果你真的搞竞赛这本书真的是能让你提高一个档次,讲解清晰,比较容易让人理解,关键是难!
《漫画算法:小灰的算法之旅》通过虚拟的主人公小灰的心路历程,用漫画的形式讲述了算法和数据结构的基础知识、复杂多变的算法面试题目及算法的实际应用场景。
这些书籍基本满足了入门到进阶的需求,不管你是还没入门的学生,还是很厉害的算法竞赛小能手,亦或是已经毕业多年的程序员,都能够从这些书籍中学到很多没见过的知识。这一次整理,既方便大家,也方便我自己平时需要查阅书籍时方便下载。电脑和手机端都能很快下载。
这一次没有加入Knuth的几个大部头,是因为没找到好的pdf,如果经济允许建议直接购买实体书,实体书排版非常精美,即使只是收藏也感觉很值,目前我只买了第一卷(压箱底在)。