新書推薦:
《
德国天才4:断裂与承续
》
售價:HK$
109.8
《
妈妈的情绪,决定孩子的未来
》
售價:HK$
42.6
《
推拿纲目
》
售價:HK$
403.2
《
精致考古--山东大学实验室考古项目论文集(一)
》
售價:HK$
244.2
《
从天下到世界——国际法与晚清中国的主权意识
》
售價:HK$
76.2
《
血色帝国:近代英国社会与美洲移民
》
售價:HK$
58.2
《
海外中国研究·王羲之:六朝贵族的世界(艺术系列)
》
售價:HK$
178.1
《
唐宋绘画史 全彩插图版
》
售價:HK$
98.6
|
編輯推薦: |
很资深:凝聚4位作者10年编程经验,带你领悟算法的精髓
很有趣:全书采用生动风趣的语言,让算法不再难学
很实战:全书包括36个实例,9大类算法,很有实战价值
很图解:对每种算法,都给出了图解说明,保证一学就会
|
內容簡介: |
编程的核心是算法,学习算法不仅能教会你解决问题的方法,而且还能为你今后的发展提供一种可能。本书面向算法初学者,首先介绍当下流行的编程语言Python,详细讲解了Python语言的变量和顺序、分支、循环三大结构,以及列表和函数的使用,为之后学习算法打好基础。然后以通俗生动的语言讲解了双指针、哈希、深度优先、广度优先、回溯、贪心、动态规划和*短路径等经典算法。
|
關於作者: |
王硕,资深软件工程师、北京理工大学客座讲师。北京理工大学硕士毕业,从事计算机教育多年,擅长Python、Java、C语言、数据结构和算法等,接触数千学生,对算法有独到见解。平行致力于企业级软件开发和计算机教育工作,具有SONY中国研究院、四大国有银行软件开发中心工作经历。
|
目錄:
|
第1章 编程基础1
1.1变量1
1.1.1输出和输入2
1.1.2简单变量类型3
1.1.3数学计算6
1.1.4位运算7
1.1.5使用字符串11
1.2三大结构15
1.2.1循序结构15
1.2.2 分支结构16
1.2.3条件判断18
1.2.4应用分支结构20
1.2.5循环结构21
1.2.6continue和break23
1.2.7应用循环结构24
1.2.8结构的嵌套26
1.3列表27
1.3.1定义列表27
1.3.2对元素进行操作28
1.3.3列表的顺序31
1.3.4列表内置函数33
1.3.5截取和拼接列表36
1.3.6字符串、元组和列表38
1.3.7用循环遍历列表40
1.3.8字典简介41
1.4函数43
1.4.1定义子函数43
1.4.2主函数44
1.4.3调用函数45
1.4.4全局变量47
1.4.5函数的运用48
第2章 双指针问题53
2.1数组合并53
2.1.1合并有序数组53
2.1.2最终代码56
2.2二分查找56
2.2.1什么是二分查找57
2.2.2问题求解58
2.2.3最终代码60
2.3链表60
2.3.1什么是单链表60
2.3.2建立单链表61
2.3.3建立双链表63
2.3.4双向输出双链表65
2.3.5向单链表中添加元素66
2.3.6向双链表中添加元素69
2.3.7删除列表中的元素71
第3章 哈希算法75
3.1什么是哈希75
3.2 两个数的和78
3.2.1问题求解178
3.2.2解法1的最终代码80
3.2.3问题求解281
3.2.4解法2的最终代码82
3.3单词模式匹配82
3.3.1问题求解83
3.3.2最终代码85
3.4猜词游戏85
3.4.1问题求解87
3.4.2最终代码88
3.5神奇的词根89
3.5.1问题求解90
3.5.2最终代码92
第4章 深度优先遍历93
4.1什么是深度优先遍历93
4.2二叉树95
4.2.1二叉树的类型95
4.2.2二叉树的相关术语96
4.2.3二叉树的节点代码97
4.2.4二叉树的遍历顺序97
4.2.5深度优先遍历与广度优先遍历97
4.3怎么抓住小偷98
4.3.1解题思路98
4.3.2从思路到代码102
4.4二叉树中的最大路径和102
4.4.1解题思路103
4.4.2完整代码112
4.5最大的岛屿113
4.5.1解题思路113
4.5.2完整代码116
第5章 广度优先遍历118
5.1什么是广度优先遍历118
5.2选课的智慧120
5.2.1广度优先遍历121
5.2.2问题求解122
5.2.3最终代码124
5.3寻找制高点125
5.3.1问题求解126
5.3.2集合129
5.3.3最终代码130
5.4合法的括号131
5.4.1问题求解131
5.4.2最终代码135
5.5树的右侧136
5.5.1问题求解136
5.5.2最终代码139
第6章 回溯算法141
6.1什么是回溯141
6.2遍历所有排序方式142
6.2.1问题求解142
6.2.2最终代码144
6.3经典问题的组合147
6.3.1问题求解147
6.3.2最终代码149
6.4查找单词问题151
6.4.1问题求解152
6.4.2最终代码155
6.5八皇后问题157
6.5.1问题求解158
6.5.2最终代码160
6.6教你解数独164
6.6.1问题求解165
6.6.2最终代码168
第7章 贪心算法172
7.1硬币找零问题173
7.1.1 问题描述173
7.1.2 最终代码175
7.2 活动安排问题175
7.2.1问题描述176
7.2.2最终代码177
7.3 哈夫曼编码178
7.3.1 问题描述178
7.3.2 哈夫曼树179
7.3.3 贪心选择性质181
7.3.4 最优子结构性质182
7.3.5 最终代码183
第8章 动态规划算法185
8.1爬楼梯问题185
8.1.1问题描述186
8.1.2 最终代码188
8.2矿工挖矿问题189
8.2.1问题描述189
8.2.2 最终代码195
8.3 背包问题195
8.3.1 问题描述195
8.3.2 问题实例196
8.3.3 最终代码201
8.4 最长递归子序列问题202
8.4.1 问题描述202
8.4.2 改进算法204
8.4.3 最终代码205
第9章 最短路径问题207
9.1迪可斯特朗算法207
9.1.1术语释义208
9.1.2问题示例:最短公交线路208
9.1.3图与节点的定义209
9.1.4把图用代码画出来210
9.1.5算法核心:两个节点集合210
9.1.6算法核心:循环210
9.1.7输出路线211
9.1.8通过示例理解算法211
9.1.9完整代码展示214
9.2Floyd算法216
9.2.1算法核心:两个矩阵216
9.2.2算法核心:通过中介点缩短距离217
9.2.3通过示例理解算法218
9.2.4完整代码222
9.3A*算法223
9.3.1算法核心:迪可斯特朗算法223
9.3.2算法核心:预估函数224
9.3.3算法核心:选择预估函数226
9.3.4A*算法的兄弟们226
第10章 分治算法227
10.1什么是分治227
10.2归并排序228
10.2.1递归法与迭代法228
10.2.2递归法描述229
10.2.3迭代法描述232
10.2.4最终代码233
10.3连续子列表的最大和235
10.3.1解题思路235
10.3.2最终代码237
10.4几何问题之凸包238
10.4.1问题求解238
10.4.2最终代码240
10.5数学问题之多项式乘法242
10.5.1问题求解242
10.5.2最终代码245
|
內容試閱:
|
言
为什么要写这本书
算法是编程的核心,就像一台计算机的CPU,算法的好坏决定了一个系统的效率高低。
许多人认为学习编程就是学习最新的编程语言、技术和框架,其实计算机算法更重要。计算机语言和技术日新月异,但万变不离其宗的是算法。修炼好算法这门内功,再辅以新技术这些招式,才能独霸武林。这也是为什么像Google和Facebook这类大公司在面试中主要会考查算法问题的原因。
目前图书市场上关于算法的图书不少,经典的如《算法导论》。但是大多数算法图书太学术、太复杂,对于初学者来说门槛太高。学习算法本身就不是一件容易的事情,再加上复杂的场景和数学理论,会让算法的学习曲线更陡。因此本书的作者们就萌生了写一本让大家都能看懂的算法书的想法,以生动的语言把算法的思想过程写出来,让学习算法不再那么枯燥。
在本书的创作过程中,王硕老师迎来了人生的第一个宝宝小朗朗。于是几位作者就有了一个心愿,希望青少年朋友也学会算法,因此,在描述算法问题时,尽量用简单、通俗的形式表述,使青少年朋友也能看懂,也希望如此这般能够增加读者的学习兴趣。既然是学习算法,免不了要写代码,对于编程语言的选择,我们选择了Python这门简单易懂的语言作为本书的编程语言。对于初学编程的人来说,Python可以缩短学习编程语言的时间和降低学习编程的难度。
学习算法不易,且行且珍惜。
本书有何特色
1. 以孩子的口吻,生动形象地讲解算法,提高趣味性
为了便于读者理解本书内容,提高学习效率,大部分问题都以孩子的口吻来讲解,以解决小朗朗的实际问题作为出发点引出问题,增加了趣味性和可读性。
2. 涵盖核心算法知识点
本书涵盖双指针问题、哈希、深度优先遍历、广度优先遍历、回溯、贪心、动态规划、最短路径问题、分治等9大算法,帮助读者全面掌握核心算法的知识点。
3. 以Python语言作为载体,降低学习难度
抛弃其他复杂的编程语言,本书采用简单的编程语言Python作为算法的载体,并在第1章介绍了Python语言的语法。
4. 选择经典算法的经典问题,有较高的通用性
本书在简单介绍Python编程语言以后,选择了9大经典算法,重点讲解算法原理,并选择经典问题进行有针对性的练习。
5. 提供完善的技术支持和售后服务
本书提供了专门的邮箱供读者咨询:317977682@qq.com。读者在阅读本书的过程中有任何疑问都可以通过该邮箱获得帮助。
本书内容及知识体系
第1章编程基础
掌握一门编程语言是学习算法的基础。学习编程语言是为了与计算机交流,只有正确的格式才能被计算机成功识别。学习编程语言的起点就是了解这门语言的语法。本书使用Python语言进行算法讲解,本章主要讲解Python 3的编程语法。
第2章双指针问题
指针是编程语言中的一个对象,它存储着一个内存空间的地址,计算机可以通过这个地址找到变量的值。也就是说,这个特定的地址指向这个特定的值。指针最大的优点在于它可以有效利用零碎的内存空间。
第3章哈希算法
哈希算法又称散列函数算法,是一种查找算法,简单来说,就是把一些复杂的数据,通过某种函数映射关系,映射成更加易于查找的方式。但是这种映射关系有可能会发生多个关键字映射到同一地址的现象,我们称之为冲突。在这种特殊情况下,需要对关键字进行第二次或更多次的处理,在其他的大多数情况下,哈希算法可以实现在常数时间内存储和查找这些关键字。
第4章深度优先遍历算法
深度优先遍历算法是经典的图论算法,它的搜索逻辑就和它的名字一样,只要有可能,就尽量深入搜索,直到找到答案,或者尝试了所有可能后确定没有解。
第5章广度优先遍历算法
广度优先遍历算法与深度优先遍历算法类似,也是查询的方法之一,它从某个状态出发查询可以到达的所有状态。但不同于深度优先遍历,广度优先遍历算法总是先去查询距离初始状态最近的状态。
第6章回溯算法
回溯算法可以被看作走迷宫,因为我们不知道出口在哪里,所以只能不断地深入,尝试不同的路线。一旦找到了出口便可以回溯到起点,辨清路线。
第7章贪心算法
贪心算法就是遵循某种既定原则,不断地选取当前条件下最优的选择来构造每个子步骤的解决方案,直到获得问题最终的解。即在对问题求解时,总是做出在当前看来是最好的选择。也就是说,不从整体最优上加以考虑,它所做的仅是在某种意义上的局部最优解。
第8章动态规划算法
动态规划算法将待求解问题拆分成一系列相互交叠的子问题,通过递推关系定义各子问题的求解策略,并随时记录子问题的解,最终获得原始问题的解,避免了对交叠子问题的重复求解。
第9章最短路径问题
把地点看成节点,把道路看成边,整个地图就可看成一个加权图。计算加权图中两点间的最短路径是编程的一个重要问题,这一章我们会用以下几个算法解决这个问题:迪可斯特朗算法、Floyd算法、A*算法。
第10章分治算法
分治算法的核心思想是把一个规模很大的问题化简为多个规模较小的问题,这些子问题虽然独立而不同,但是问题的本质是一致的,从而达到分而治之的目的。
适合阅读本书的读者
需要全面学习算法的人员
需要学习Python的程序员
对编程算法感兴趣的人员
希望提高算法水平的程序员
专业培训机构的学员
阅读本书的建议
没有Python基础的读者,建议从第1章开始顺次阅读并演练每个实例。
有一定Python基础的读者,可以根据实际情况有重点地选择阅读各个模块和项目案例。
对于每个模块和案例,先自己思考一下实现的思路,然后再阅读,学习效果会更好。这样理解起来也会更加容易、更加深刻。
|
|