描述
开 本: 16开纸 张: 胶版纸包 装: 平装-胶订是否套装: 否国际标准书号ISBN: 9787111687962
编辑推荐
◆各章自成体系,可以作为独立的学习单元(算法基础→经典算法思想→重要数据结构→常用算法),满足从 “菜鸟”向 “达人”进阶的的需求
零基础也能轻松掌握,自学算法的好搭档
◆73个示意图,生动介绍算法执行过程
◆全书包含40余道经典算法真题,每道题目均一题多解,深入剖析不同算法在性能方面的优劣
◆免费提供立体化学习资源,包括16个章节核心知识点讲解视频,各类算法实现源代码、实例数据及运行结果
零基础也能轻松掌握,自学算法的好搭档
◆73个示意图,生动介绍算法执行过程
◆全书包含40余道经典算法真题,每道题目均一题多解,深入剖析不同算法在性能方面的优劣
◆免费提供立体化学习资源,包括16个章节核心知识点讲解视频,各类算法实现源代码、实例数据及运行结果
内容简介
本书以 Python 语言为平台,分四个部分介绍了算法的基本概念、五种经典的算法思想、重要的数据结构以及实践中常用的几种算法技术。除第 1 章和第 2 章外,书中每章内容都包括了基本概念、实现方式、具体应用以及达人修炼真题。每一种算法思想中的达人修炼真题都提供了相应的源代码,可供读者运行,从而达到理论与实践并重的目的。
本书从算法基本分析到算法基本思想,再到具体应用及大量真题,内容全面,条理清楚,语言通俗。本书对计算机及相关专业本科生及研究生的面试、笔试将有所帮助;此外,计算机科学相关领域的工程师以及爱好者也可以将本书作为技术参考书籍,在需要时可查找所需算法的相关内容并从中得到启示;当然,对计算机科学感兴趣的高中生以及 IT 领域项目经理也可以阅读本书,从而开启算法世界的大门。
本书从算法基本分析到算法基本思想,再到具体应用及大量真题,内容全面,条理清楚,语言通俗。本书对计算机及相关专业本科生及研究生的面试、笔试将有所帮助;此外,计算机科学相关领域的工程师以及爱好者也可以将本书作为技术参考书籍,在需要时可查找所需算法的相关内容并从中得到启示;当然,对计算机科学感兴趣的高中生以及 IT 领域项目经理也可以阅读本书,从而开启算法世界的大门。
目 录
前言
部分 算法基础/1
第 1 章 算法综述/2
1.1 算法在计算机系统中的作用/2
1.1.1 算法的定义/2
1.1.2 算法的地位/2
1.1.3 一个简单的算法/3
1.2 伪代码的约定/4
第 2 章 算法分析/6
2.1 精确效率分析/6
2.2 渐进效率分析/8
2.2.1 渐进记号/9
2.2.2 渐进记号的应用/10
2.3 递归式求解/15
第二部分 经典算法思想/17
第 3 章 递归与分治法/18
3.1 递归的概念/18
3.2 分治法/22
3.3 分治法的应用/25
3.4 达人修炼真题/26
第 4 章 动态规划算法/50
4.1 动态规划基础/50
4.1.1 动态规划基本思想/50
4.1.2 动态规划算法举例——长公共子序列/50
4.2 动态规划算法分析/53
4.2.1 子结构/54
Python 算法从菜鸟到达人
VI
4.2.2 重叠子问题/54
4.3 动态规划算法的应用/55
4.3.1 0-1 背包问题/55
4.3.2 石子归并/56
4.3.3 常用动态规划类问题/59
4.4 达人修炼真题/60
第 5 章 贪心算法/79
5.1 贪心算法基础/79
5.1.1 贪心算法基本思想/79
5.1.2 贪心算法举例——装载问题/79
5.2 贪心算法的分析/80
5.3 贪心算法的应用/81
5.3.1 普通背包问题/81
5.3.2 活动安排问题/83
5.3.3 纪念品分组/85
5.4 达人修炼真题/87
第 6 章 回溯法/91
6.1 回溯法基本概念与算法框架/91
6.1.1 基本思路/91
6.1.2 回溯法的实现/93
6.2 回溯法的应用/94
6.2.1 0-1 背包问题/94
6.2.2 八皇后问题/96
6.2.3 一摞烙饼的排序/97
6.3 达人修炼真题/100
第 7 章 分支界限法/103
7.1 分支界限法概念与算法框架/103
7.1.1 分支界限法基本思想/103
7.1.2 算法框架与分析/104
7.1.3 一个简单的例子(0-1 背包问题)/106
7.2 分支界限法的应用/108
7.2.1 TSP 问题/108
7.2.2 多段图的短路径问题/111
7.2.3 任务分配问题/113
7.3 达人修炼真题/116
第三部分 重要数据结构/121
第 8 章 栈与队列/122
8.1 栈/122
目录
VII
8.2 队列/124
8.3 达人修炼真题/128
第 9 章 链表/142
9.1 链表概述/142
9.2 链表的操作/143
9.3 达人修炼真题/145
第 10 章 树与二叉树/152
10.1 树的概念与定义/152
10.1.1 基本概念/152
10.1.2 树的表示/153
10.2 二叉树/154
10.2.1 基本概念/154
10.2.2 二叉树的存储结构/155
10.2.3 遍历二叉树和线索二叉树/156
10.3 树、二叉树和森林之间的关系/159
10.4 达人修炼真题/164
第 11 章 哈希表/170
11.1 哈希表概述/170
11.2 哈希表的应用/173
11.3 达人修炼真题/175
第 12 章 并查集/185
12.1 并查集基本思想/185
12.1.1 并查集概念/186
12.1.2 并查集的实现/186
12.1.3 带权并查集/189
12.2 并查集的应用/191
12.2.1 食物链/191
12.2.2 Kruskal 小生成树算法/194
12.3 达人修炼真题/195
第 13 章 位图/199
13.1 位图基本概念/199
13.2 位图法的应用/203
13.2.1 位运算常见应用/204
13.2.2 位图法在大数据处理中的应用/207
13.3 达人修炼真题/209
第四部分 常用算法/213
第 14 章 排序算法/214
14.1 插入排序/214
Python 算法从菜鸟到达人
VIII
14.2 选择排序/218
14.3 交换排序/222
14.4 归并排序/226
14.5 桶排序/基数排序/228
14.6 达人修炼真题/231
第 15 章 查找算法/235
15.1 基本概念/235
15.2 静态查找/236
15.3 动态查找/239
15.4 哈希查找/244
15.5 达人修炼真题/244
第 16 章 字符串匹配算法/250
16.1 简单字符串匹配/250
16.2 KMP 算法/251
16.3 BM 算法/254
16.4 SUNDAY 算法/255
16.5 达人修炼真题/255
附录/263
部分 算法基础/1
第 1 章 算法综述/2
1.1 算法在计算机系统中的作用/2
1.1.1 算法的定义/2
1.1.2 算法的地位/2
1.1.3 一个简单的算法/3
1.2 伪代码的约定/4
第 2 章 算法分析/6
2.1 精确效率分析/6
2.2 渐进效率分析/8
2.2.1 渐进记号/9
2.2.2 渐进记号的应用/10
2.3 递归式求解/15
第二部分 经典算法思想/17
第 3 章 递归与分治法/18
3.1 递归的概念/18
3.2 分治法/22
3.3 分治法的应用/25
3.4 达人修炼真题/26
第 4 章 动态规划算法/50
4.1 动态规划基础/50
4.1.1 动态规划基本思想/50
4.1.2 动态规划算法举例——长公共子序列/50
4.2 动态规划算法分析/53
4.2.1 子结构/54
Python 算法从菜鸟到达人
VI
4.2.2 重叠子问题/54
4.3 动态规划算法的应用/55
4.3.1 0-1 背包问题/55
4.3.2 石子归并/56
4.3.3 常用动态规划类问题/59
4.4 达人修炼真题/60
第 5 章 贪心算法/79
5.1 贪心算法基础/79
5.1.1 贪心算法基本思想/79
5.1.2 贪心算法举例——装载问题/79
5.2 贪心算法的分析/80
5.3 贪心算法的应用/81
5.3.1 普通背包问题/81
5.3.2 活动安排问题/83
5.3.3 纪念品分组/85
5.4 达人修炼真题/87
第 6 章 回溯法/91
6.1 回溯法基本概念与算法框架/91
6.1.1 基本思路/91
6.1.2 回溯法的实现/93
6.2 回溯法的应用/94
6.2.1 0-1 背包问题/94
6.2.2 八皇后问题/96
6.2.3 一摞烙饼的排序/97
6.3 达人修炼真题/100
第 7 章 分支界限法/103
7.1 分支界限法概念与算法框架/103
7.1.1 分支界限法基本思想/103
7.1.2 算法框架与分析/104
7.1.3 一个简单的例子(0-1 背包问题)/106
7.2 分支界限法的应用/108
7.2.1 TSP 问题/108
7.2.2 多段图的短路径问题/111
7.2.3 任务分配问题/113
7.3 达人修炼真题/116
第三部分 重要数据结构/121
第 8 章 栈与队列/122
8.1 栈/122
目录
VII
8.2 队列/124
8.3 达人修炼真题/128
第 9 章 链表/142
9.1 链表概述/142
9.2 链表的操作/143
9.3 达人修炼真题/145
第 10 章 树与二叉树/152
10.1 树的概念与定义/152
10.1.1 基本概念/152
10.1.2 树的表示/153
10.2 二叉树/154
10.2.1 基本概念/154
10.2.2 二叉树的存储结构/155
10.2.3 遍历二叉树和线索二叉树/156
10.3 树、二叉树和森林之间的关系/159
10.4 达人修炼真题/164
第 11 章 哈希表/170
11.1 哈希表概述/170
11.2 哈希表的应用/173
11.3 达人修炼真题/175
第 12 章 并查集/185
12.1 并查集基本思想/185
12.1.1 并查集概念/186
12.1.2 并查集的实现/186
12.1.3 带权并查集/189
12.2 并查集的应用/191
12.2.1 食物链/191
12.2.2 Kruskal 小生成树算法/194
12.3 达人修炼真题/195
第 13 章 位图/199
13.1 位图基本概念/199
13.2 位图法的应用/203
13.2.1 位运算常见应用/204
13.2.2 位图法在大数据处理中的应用/207
13.3 达人修炼真题/209
第四部分 常用算法/213
第 14 章 排序算法/214
14.1 插入排序/214
Python 算法从菜鸟到达人
VIII
14.2 选择排序/218
14.3 交换排序/222
14.4 归并排序/226
14.5 桶排序/基数排序/228
14.6 达人修炼真题/231
第 15 章 查找算法/235
15.1 基本概念/235
15.2 静态查找/236
15.3 动态查找/239
15.4 哈希查找/244
15.5 达人修炼真题/244
第 16 章 字符串匹配算法/250
16.1 简单字符串匹配/250
16.2 KMP 算法/251
16.3 BM 算法/254
16.4 SUNDAY 算法/255
16.5 达人修炼真题/255
附录/263
前 言
随着大数据处理、人工智能等领域的飞速发展和计算机性能的飞跃性提升,无论在学术 界还是产业界,计算机领域的前沿概念与技术都逐步深入到思维层面,数学在这其中发挥的 作用越来越重要,越来越多的高深数学理论被运用到实际中来,有效地解决了许多实际问题, 例如分析几何、小波分析、数值计算等。这一切让人们逐步意识到计算机程序设计依赖的就 是数学知识和算法思想。在软件工程师动手编程完成某一任务之前,先要通过一系列的分析 过程来确定解决该任务的方法。首先,分析待求解任务/问题,将其抽象为某种数学模型;然 后确定求解该问题时的资源限制(包括时间资源、电力资源、存储资源、计算资源、容错成 本等);后在已知信息的基础上,选择已有的算法或提出新的算法,在满足资源限制的情况 下解决问题。因此,可以说一个不懂算法的“菜鸟”程序员是无法独立、自主地解决具体工 程问题的,也很难写出逻辑严密、简化的高质量代码。
一名优秀的计算机科学领域的工程师或科学家一定对经典算法思想有深入的理解并能够 将这些算法灵活应用于解决实际问题的过程中。目前,很多 IT 公司都会考查应聘者的算 法功底和逻辑思维能力,因为算法功底深厚的应聘者,往往可以使项目的设计模式格外优化, 程序逻辑也更为严密清晰。IT 公司的专家和“达人”都对算法有很深的造诣,同时,项 目经理也必须具备超强的逻辑思维能力。
对于所有即将迈入职场的计算机科学相关领域的学生而言,应该都希望自己以后能够在 职场中逐渐成长为所在细分领域的优秀人才,具备出色完成各类任务、解决各类问题的能力, 算法可以说是解决这些问题的关键,而程序语言只是一个外壳。算法的功底与一个计算机科 学工程师的水平上限关系密切。所以,如果你想从事计算机科学相关工作,那么就应当认真 地培养自己的逻辑思维,从而提高算法功底!
本书的所有作者以及团队均在计算机科学领域有着多年的算法学习经历和IT领域工作经 验,对算法有着较为深入的开发与实践。本书是在所有作者(包括未出现在作者名单中的幕 后奉献者)钻研算法的基础上,经过长期的应用总结而完成的,并用言简意赅的语言将这些 算法问题的答案展现出来。
本书特色
当前,已出版的算法书籍不计其数,从经典的《算法导论》到针对具体的细分领域(例 Python 算法从菜鸟到达人 IV 如文本处理、神经网络等)相关算法的书籍,每一本都有自己的侧重点与特色。本书的特色 主要体现在以下几方面:
1)强调算法基础,理论与应用并重。
2)包含大量实际应用中的算法真题。
3)本书以 Python 语言实现。虽然 Python 中没有指针的概念(只有引用),为了便于理解, 书中很多地方还是使用了指针,可以认为其等价于引用。
4)本书配有核心知识点讲解视频(视频制作由刘玖樽和田思怡完成),讲解内容和程序 代码经多次校审和验证(由李海洋、刘玖樽、熊良成和田思怡完成)。
读者对象
1)计算机领域程序员及工程师。
2)计算机科学相关领域本科生及研究生。
3)其他算法爱好者(对算法感兴趣的高中生、IT 领域产品经理等)。
我们的目标是将本书打造成广大IT从业者和程序开发人员学习和提升算法能力的高效学 习材料,同时也可以作为科研院所及企业的工程师参考的一本技术性书籍,不论你是“菜鸟” 还是“达人”,阅读本书都将受益匪浅,可以有效提升解决实际编程问题的能力。
本书内容
本书共 16 章,分为以下四大部分。
部分(算法基础,第 1、2 章) 这一部分将引导读者理清算法在计算机系统中的作用以及伪代码写法的约定等,不仅给 出了算法的定义,简单地介绍了算法的表达方式,同时引导读者思考算法的设计和分析问题, 本书后面的内容都是建立在这些基础之上的。
第二部分(经典算法思想,第 3~7 章) 算法设计有很多思想,但是归纳起来,算法设计中有五种思想使用为广泛,它们分别 是递归与分治法、动态规划算法、贪心算法、回溯法与分支界限法。这一部分逐一介绍了这 些经典算法思想的具体思路以及利用这些算法思想可以解决的具体问题。
第三部分(重要数据结构,第 8~13 章) 谈到算法的时候,数据结构这个词大概率也不会缺席。数据结构也是所有计算机专业学 生必修的一门课程。这一部分主要讲解了一些重要数据结构的相关知识以及应用范围。对于 数据结构基础较好的读者,可以跳过本部分,并不会影响阅读本书其余章节。
第四部分(常用算法,第 14~16 章) 这一部分重点介绍了日常学习或工作中常用的一些算法,包括常用的排序算法、查找 算法以及字符串匹配算法。这些算法并不复杂,但是都有着非常高的使用频率,掌握它们将 快速提升读者对算法的应用和实践能力。
反馈沟通
欢迎读者朋友在阅读本书过程中给予反馈意见,以利于本书的进一步完善与提升。反馈 意见请发送至 [email protected],我们将尽力解决问题。
一名优秀的计算机科学领域的工程师或科学家一定对经典算法思想有深入的理解并能够 将这些算法灵活应用于解决实际问题的过程中。目前,很多 IT 公司都会考查应聘者的算 法功底和逻辑思维能力,因为算法功底深厚的应聘者,往往可以使项目的设计模式格外优化, 程序逻辑也更为严密清晰。IT 公司的专家和“达人”都对算法有很深的造诣,同时,项 目经理也必须具备超强的逻辑思维能力。
对于所有即将迈入职场的计算机科学相关领域的学生而言,应该都希望自己以后能够在 职场中逐渐成长为所在细分领域的优秀人才,具备出色完成各类任务、解决各类问题的能力, 算法可以说是解决这些问题的关键,而程序语言只是一个外壳。算法的功底与一个计算机科 学工程师的水平上限关系密切。所以,如果你想从事计算机科学相关工作,那么就应当认真 地培养自己的逻辑思维,从而提高算法功底!
本书的所有作者以及团队均在计算机科学领域有着多年的算法学习经历和IT领域工作经 验,对算法有着较为深入的开发与实践。本书是在所有作者(包括未出现在作者名单中的幕 后奉献者)钻研算法的基础上,经过长期的应用总结而完成的,并用言简意赅的语言将这些 算法问题的答案展现出来。
本书特色
当前,已出版的算法书籍不计其数,从经典的《算法导论》到针对具体的细分领域(例 Python 算法从菜鸟到达人 IV 如文本处理、神经网络等)相关算法的书籍,每一本都有自己的侧重点与特色。本书的特色 主要体现在以下几方面:
1)强调算法基础,理论与应用并重。
2)包含大量实际应用中的算法真题。
3)本书以 Python 语言实现。虽然 Python 中没有指针的概念(只有引用),为了便于理解, 书中很多地方还是使用了指针,可以认为其等价于引用。
4)本书配有核心知识点讲解视频(视频制作由刘玖樽和田思怡完成),讲解内容和程序 代码经多次校审和验证(由李海洋、刘玖樽、熊良成和田思怡完成)。
读者对象
1)计算机领域程序员及工程师。
2)计算机科学相关领域本科生及研究生。
3)其他算法爱好者(对算法感兴趣的高中生、IT 领域产品经理等)。
我们的目标是将本书打造成广大IT从业者和程序开发人员学习和提升算法能力的高效学 习材料,同时也可以作为科研院所及企业的工程师参考的一本技术性书籍,不论你是“菜鸟” 还是“达人”,阅读本书都将受益匪浅,可以有效提升解决实际编程问题的能力。
本书内容
本书共 16 章,分为以下四大部分。
部分(算法基础,第 1、2 章) 这一部分将引导读者理清算法在计算机系统中的作用以及伪代码写法的约定等,不仅给 出了算法的定义,简单地介绍了算法的表达方式,同时引导读者思考算法的设计和分析问题, 本书后面的内容都是建立在这些基础之上的。
第二部分(经典算法思想,第 3~7 章) 算法设计有很多思想,但是归纳起来,算法设计中有五种思想使用为广泛,它们分别 是递归与分治法、动态规划算法、贪心算法、回溯法与分支界限法。这一部分逐一介绍了这 些经典算法思想的具体思路以及利用这些算法思想可以解决的具体问题。
第三部分(重要数据结构,第 8~13 章) 谈到算法的时候,数据结构这个词大概率也不会缺席。数据结构也是所有计算机专业学 生必修的一门课程。这一部分主要讲解了一些重要数据结构的相关知识以及应用范围。对于 数据结构基础较好的读者,可以跳过本部分,并不会影响阅读本书其余章节。
第四部分(常用算法,第 14~16 章) 这一部分重点介绍了日常学习或工作中常用的一些算法,包括常用的排序算法、查找 算法以及字符串匹配算法。这些算法并不复杂,但是都有着非常高的使用频率,掌握它们将 快速提升读者对算法的应用和实践能力。
反馈沟通
欢迎读者朋友在阅读本书过程中给予反馈意见,以利于本书的进一步完善与提升。反馈 意见请发送至 [email protected],我们将尽力解决问题。
本书全体作者
评论
还没有评论。