注册 | 登录读书好,好读书,读好书!
读书网-DuShu.com
当前位置: 首页出版图书科学技术计算机/网络软件与程序设计Python算法从入门到实践

Python算法从入门到实践

Python算法从入门到实践

定 价:¥89.50

作 者: 薛小龙
出版社: 清华大学出版社
丛编项:
标 签: 暂缺

购买这本书可以去


ISBN: 9787302574590 出版时间: 2021-04-01 包装: 平装-胶订
开本: 16开 页数: 378 字数:  

内容简介

  算法是程序的灵魂,算法能够告诉开发者在面对一个项目功能时用什么思路去实现。《Python算法从入门到实践》循序渐进地讲解了算法实现的核心技术。全书共分为 13 章,主要内容包括初步认识算法、枚举算法思想、递归算法思想、分治算法思想、贪心算法思想、试探算法思想、迭代算法思想、查找算法、排序算法、使用算法解决数据结构问题、解决数学问题、常见的经典算法问题、常用的人工智能算法。本书通过具体实例的实现过程演练了各个知识点的具体使用流程,引领读者全面掌握算法的核心技术。 《Python算法从入门到实践》不但适合算法研究和学习的初学者,也适合有一定算法基础的读者,还可以作为大、中专院校相关专业师生的学习用书和培训机构的教材。

作者简介

  薛小龙,哈尔滨工业大学计算机硕士,现就职于阿里天猫国际研发部门。精通Python、C、C 、Java、C#开发语言,擅长数据分析和大数据挖掘技术,熟悉软件规划、项目架构和项目推广。近年来随着AI和大数据业务的兴起,深入研究了人工智能开发应用。热衷于人工智能、Android开发和物联网开发,对AI项目的架构设计和实现原理有非常深刻的认识和理解,应用开发经验也十分丰富。

图书目录

第1章  初步认识算法 1
1.1  什么是算法 2
1.1.1  一道有趣的智力题 2
1.1.2  算法的定义 2
1.1.3  计算机中的算法 3
1.1.4  算法在编程语言中的定义 4
1.2  衡量算法的优劣 4
1.2.1  衡量算法优劣的标准 4
1.2.2  算法复杂度 5
1.2.3  时间复杂度与空间复杂度的取舍问题 8
第2章  枚举算法思想 9
2.1  枚举算法概述 10
2.1.1  枚举算法介绍 10
2.1.2  Python中的枚举算法 10
2.2  破解谜题 11
2.2.1  算法分析 11
2.2.2  具体实现 11
2.3  破解24点游戏 12
2.3.1  算法分析 12
2.3.2  使用枚举算法解决24点问题 13
2.4  解决熄灯问题 16
2.4.1  算法分析 17
2.4.2  使用numpy和枚举算法解决熄灯问题 19
2.5  解决“讨厌的青蛙”问题 20
2.5.1  算法分析 21
2.5.2  具体实现 22
2.6  解决“鸡兔同笼”问题 24
2.6.1  算法分析 24
2.6.2  具体实现:输入头和脚的个数的解法 24
2.7  解决“水仙花数”问题 25
2.7.1  找出1000以内的水仙花数 25
2.7.2  找出5位水仙花数 26
2.7.3  找出10000以内的水仙花数(包括1位、2位) 26
第3章  递归算法思想 29
3.1  递归算法思想基础 30
3.1.1  什么是递归 30
3.1.2  对递归和循环的生动解释 31
3.1.3  用归纳法来理解递归 32
3.1.4  递归的三个要素 32
3.2  解决“斐波那契数列”问题 33
3.2.1  算法分析 33
3.2.2  计算斐波那契数列的第n项值 34
3.2.3  使用Memorization(记忆化)优化递归 35
3.3  用递归算法解决“汉诺塔”问题 36
3.3.1  算法分析 37
3.3.2  使用递归算法解决“汉诺塔”问题的具体实现 38
3.4  解决“阶乘”问题 40
3.4.1  算法分析 40
3.4.2  使用递归算法计算10之内的阶乘 41
3.4.3  使用循环计算阶乘 41
3.5  进制转换器 42
3.5.1  算法分析 42
3.5.2  比较递归方案和循环方案 42
3.6  解决二叉树遍历问题 43
3.6.1  算法分析 43
3.6.2  实现树结构 44
3.6.3  递归遍历方案 45
3.7  求解公约数和小公倍数 46
3.7.1  算法分析 47
3.7.2  基于递归算法的方案 47
3.8  解决全排列问题 48
3.8.1  具体实现:将全排列问题分解成多个子问题 48
3.8.2  字节跳动的一道面试题:递归实现n的全排列 49
3.9  解决迷宫问题 49
3.9.1  算法分析 50
3.9.2  具体实现 50
第4章  分治算法思想 53
4.1  分治算法思想基础 54
4.1.1  什么是分治算法 54
4.1.2  分治法的解题思路 54
4.1.3  总结分治法能解决什么类型的问题 56
4.2  找出有序列表中的值 56
4.2.1  算法分析 56
4.2.2  使用二分法在有序列表中找出指定的值 56
4.2.3  使用分治算法判断某个元素是否在列表中 57
4.3  求顺序表中数据的值 58
4.3.1  算法分析 58
4.3.2  具体实现 58
4.4  解决小值和值的问题 59
4.4.1  算法分析 59
4.4.2  查找列表中元素的小值和值 59
4.5  解决第k小(大)元素的问题 61
4.5.1  算法分析 61
4.5.2  找出一组序列中的第k小(大)的元素 61
4.5.3  找出列表中第k大的元素 62
4.6  快速排序 62
4.6.1  算法分析 63
4.6.2  快速排序具体方案 63
4.7  实现归并排序 63
4.7.1  算法分析 63
4.7.2  对指定列表实现归并排序 64
4.8  整数划分 64
4.8.1  算法分析 65
4.8.2  整数划分问题的具体实现 65
4.9  棋盘覆盖 65
4.9.1  算法分析 66
4.9.2  使用分治算法解决棋盘覆盖问题 66
4.9.3  GUI版本的解决棋盘覆盖方案 67
4.10  解决汉诺塔问题 70
4.10.1  算法分析 70
4.10.2  用分治算法解决汉诺塔问题 71
4.11  解决循环赛问题 72
4.11.1  算法分析 72
4.11.2  根据输入的比赛人数解决循环赛问题 72
第5章  贪心算法思想 75
5.1  贪心算法思想基础 76
5.1.1  什么是贪心算法 76
5.1.2  贪心算法的基本思路和基本特性 76
5.2  解决“找零方案”问题 77
5.2.1  算法分析 77
5.2.2  解决“找零方案”的具体实现 77
5.3  解决“汽车加油”问题 78
5.3.1  算法分析 78
5.3.2  计算少加油次数 79
5.3.3  计算如何加油次数会少 79
5.4  解决“求子数组之和”问题 80
5.4.1  算法分析 80
5.4.2  具体实现 81
5.5  解决“幼儿园分糖果”问题 81
5.5.1  算法分析 81
5.5.2  具体实现 82
5.6  圣诞节的礼物 82
5.6.1  算法分析 83
5.6.2  分配指定箱数的糖果 83
5.7  解决“活动安排”问题 84
5.7.1  算法分析 85
5.7.2  使用贪心算法解决“活动安排”问题的方案 85
5.8  解决“摇摆序列”问题 86
5.8.1  算法分析 86
5.8.2  具体解决方案 88
5.9  移除k个数字 89
5.9.1  算法分析 89
5.9.2  具体实现方案 89
5.10  解决“背包”问题 90
5.10.1  算法分析 90
5.10.2  使用小重量贪心策略解决背包问题 90
5.10.3  使用价值密度贪心策略解决背包问题 91
5.10.4  从单位重量价值角度解决背包问题 92
5.11  解决“霍夫曼编码”问题 94
5.11.1  算法分析 94
5.11.2  使用内置库解决问题 95
5.11.3  实现一个可变长度的编码问题 97
5.12  解决“Kruskal算法”问题 98
5.12.1  算法分析 98
5.12.2  种使用Kruskal算法获取小生成树的方案 100
5.12.3  第二种使用Kruskal算法获取小生成树的方案 101
5.12.4  第三种使用Kruskal算法获取小生成树的方案 103
5.13  解决Prim算法问题 105
5.13.1  算法分析 105
5.13.2  种方案 106
5.13.3  第二种方案 107
5.14  解决“马踏棋盘”问题 109
5.14.1  算法分析 109
5.14.2  使用贪心算法和递归算法解决“马踏棋盘”问题 109
第6章  试探算法思想 113
6.1  试探算法思想基础 114
6.1.1  试探法算法介绍 114
6.1.2  使用回溯算法的步骤 114
6.1.3  回溯算法会影响程序的效率吗 115
6.2  解决“解空间”问题 115
6.2.1  算法分析 116
6.2.2  使用子集树模板递归创建一个通用模板 116
6.2.3  使用排列树模板递归创建一个通用模板 117
6.3  解决“全排列”问题 118
6.3.1  算法分析 119
6.3.2  实现 'a', 'b', 'c', 'd' 四个元素的全排列 119
6.4  解决“选排列”问题 120
6.4.1  算法分析 120
6.4.2  使用回溯算法解决“选排列”问题 120
6.5  解决“找零钱”问题 122
6.5.1  算法分析 122
6.5.2  使用回溯算法解决“找零钱”问题 123
6.6  解决“长公共子序列”问题 124
6.6.1  算法分析 124
6.6.2  使用回溯算法解决长公共子序列问题 125
6.7  解决“排课”问题 126
6.7.1  算法分析 127
6.7.2  使用回溯算法解决排课问题 127
6.8  解决“作业调度”问题 129
6.8.1  算法分析 129
6.8.2  使用回溯算法解决作业调度问题 130
6.9  解决“图的遍历”问题 131
6.9.1  算法分析 132
6.9.2  具体实现 132
6.10  解决“爬楼梯”问题 133
6.10.1  算法分析 133
6.10.2  具体实现 133
6.11  解决“m-着色”问题 134
6.11.1  算法分析 135
6.11.2  具体实现 135
6.12  解决“取物搭配”问题 137
6.12.1  算法分析 137
6.12.2  使用回溯算法解决“取物搭配”问题 137
6.13  解决“旅行商”问题 139
6.13.1  算法分析 139
6.13.2  具体实现 139
6.14  解决“0-1背包”问题 141
6.14.1  算法分析 141
6.14.2  使用回溯子集树法解决问题 141
6.15  解决“野人与传教士”问题 142
6.15.1  算法分析 143
6.15.2  使用回溯子集树法解决野人与传教士问题 143
6.16  解决“骑士巡逻”问题 144
6.16.1  算法分析 145
6.16.2  使用试探算法解决“骑士巡逻”问题 145
6.17  解决“八皇后”问题的4种方案 147
6.17.1  算法分析 147
6.17.2  使用回溯法解决八皇后问题 147
6.17.3  使用递归回溯算法解决八皇后问题 148
6.17.4  在纵向和斜向判断是否存在其他皇后 151
6.18  解决“迷宫”问题 154
6.18.1  算法分析 154
6.18.2  使用回溯法解决迷宫问题 154
6.19  解决面试题“矩阵中的路径” 156
6.19.1  算法分析 157
6.19.2  具体实现 157
6.20  解决“马踏棋盘”问题 158
6.20.1  算法分析 159
6.20.2  使用回溯算法解决“5×5马踏棋盘”问题 159
第7章  迭代算法思想 161
7.1  迭代算法思想基础 162
7.1.1  迭代算法思想介绍 162
7.1.2  迭代法和方程 162
7.2  解决“斐波那契数列”问题 163
7.2.1  算法分析 163
7.2.2  使用迭代算法计算第12个月时兔子的数量 164
7.2.3  比较迭代算法和递归算法的效率 164
7.3  解决“角谷猜想”问题 165
7.3.1  算法分析 165
7.3.2  种方案 165
7.3.3  第二种方案 166
7.4  使用牛顿迭代法计算方程的根 167
7.4.1  算法分析 167
7.4.2  计算方程x3-x-1=0的根 167
7.4.3  比较简单迭代法和牛顿迭代法 168
7.5  使用牛顿迭代法求极值 172
7.5.1  算法分析 172
7.5.2  具体实现 172
7.6  求平方根 173
7.6.1  算法分析 173
7.6.2  使用牛顿迭代法求平方根 173
7.7  求极值并绘制曲线 175
7.7.1  算法分析 175
7.7.2  使用牛顿迭代法求极值并绘制曲线 175
7.8  求解输入的方程 177
7.8.1  项目需求 178
7.8.2  使用牛顿迭代法求解输入的方程 178
7.9  求x附近的一个实根 179
7.9.1  算法分析 179
7.9.2  求方程在x附近的一个实根 179
7.10  解决“非线性方程组”问题 180
7.10.1  使用内置函数求解非线性方程组 180
7.10.2  使用第三方库函数求解非线性方程组 181
7.11  求解线性方程组 182
7.11.1  算法分析 183
7.11.2  使用雅克比迭代法求解线性方程组 183
7.12  使用Gauss-Seidel迭代法求解线性方程组 185
7.12.1  算法分析 185
7.12.2  具体实现 185
7.13  解决数值分析问题 187
7.13.1  使用迭代法求解方程 187
7.13.2  解决“龙贝格求积公式”问题 192
7.13.3  解决“三次样条插值”问题 193
7.13.4  解决“拉格朗日插值公式”问题 196
第8章  查找算法 199
8.1  什么是查找算法 200
8.2  线性表查找:顺序查找 200
8.2.1  顺序查找法基础 201
8.2.2  顺序查找的时间复杂度 201
8.2.3  算法演练——实现顺序查找算法 202
8.2.4  算法演练——实现有序列表查找 202
8.2.5  算法演练——实现无序列表查找 203
8.2.6  算法演练——在列表中查找x是否存在 203
8.3  线性表查找:折半查找算法 204
8.3.1  折半查找算法基础 204
8.3.2  算法演练——使用折半查找算法查找数据 205
8.3.3  算法演练——使用折半查找算法查找指定数字 205
8.3.4  算法演练——使用递归法实现折半查找算法 206
8.3.5  算法演练——比较顺序查找和折半查找 206
8.4  线性表查找:插值查找算法 208
8.4.1  插值查找算法基础 208
8.4.2  算法演练——使用插值查找法查找指定的数据 208
8.5  线性表查找:分块查找算法 209
8.5.1  分块查找算法基础 209
8.5.2  算法演练——使用分块查找算法在列表中查找某元素 211
8.5.3  算法演练——改进的使用分块查找算法 212
8.6  基于树的查找法:二叉排序树算法 213
8.6.1  二叉排序树算法基础 214
8.6.2  插入和生成 214
8.6.3  删除操作 215
8.6.4  查找操作 217
8.6.5  算法演练——实现二叉树的搜索、插入、删除、先序遍历、中序遍历和后序遍历操作 217
8.7  基于树的查找法:平衡二叉排序树算法 220
8.7.1  平衡二叉排序树算法基础 220
8.7.2  Python判断平衡二叉树的方法 223
8.7.3  算法演练——实现平衡二叉树的基本操作 223
8.8  哈希查找算法 229
8.8.1  哈希算法的基本思想 230
8.8.2  构造哈希函数 230
8.8.3  处理冲突 232
8.8.4  哈希表的查找过程 234
8.8.5  算法演练——使用哈希算法查找数据 234
8.9  斐波那契查找算法 235
8.9.1  斐波那契查找算法基础 235
8.9.2  算法演练——使用斐波那契查找算法查找数据 236
8.9.3  算法演练——比较顺序查找、二分查找、插值查找和斐波那契查找 237
8.10  红黑树查找算法 239
8.10.1  红黑树查找算法基础 239
8.10.2  算法演练——使用红黑树操作数据 240
8.10.3  算法演练——绘制红黑树的插入图 244
第9章  排序算法 249
9.1  什么是排序算法 250
9.1.1  排序算法的定义 250
9.1.2  排序算法的分类 250
9.2  插入排序算法 250
9.2.1  插入排序算法基础 251
9.2.2  直接插入排序算法 251
9.2.3  算法演练——排序一个列表 252
9.2.4  算法演练——升序和降序排列 253
9.3  希尔排序 254
9.3.1  希尔排序算法基础 254
9.3.2  算法演练——使用希尔排序算法对数据进行排序处理 255
9.3.3  算法演练——排序一个列表 256
9.3.4  算法演练——使用希尔排序算法对列表进行排序 257
9.4  交换类排序:冒泡排序算法 258
9.4.1  冒泡排序(相邻比序法)算法基础 258
9.4.2  算法演练——简单的冒泡排序 259
9.4.3  算法演练——实现从大到小的冒泡排序 260
9.4.4  算法演练——使用冒泡排序算法的优化 261
9.5  交换类排序:快速排序算法 263
9.5.1  快速排序算法基础 264
9.5.2  算法演练——实现基本的快速排列 265
9.5.3  算法演练——使用快速排序算法排列一个列表 266
9.6  选择排序算法 267
9.6.1  直接选择排序算法基础 267
9.6.2  树形选择排序算法基础 268
9.6.3  算法演练——使用直接选择排序算法 268
9.6.4  算法演练——使用直接选择排序算法排列一个列表 269
9.7  堆排序算法 270
9.7.1  堆排序算法基础 270
9.7.2  算法演练——使用堆排序处理数据 272
9.7.3  算法演练——实现堆排序 273
9.8  归并排序算法 276
9.8.1  归并排序算法基础 276
9.8.2  两路归并算法的思路 277
9.8.3  实现归并排序 278
9.8.4  算法演练——使用归并排序算法排列一个列表 279
9.8.5  算法演练——图解归并排序算法 280
9.9  基数排序算法 282
9.9.1  多关键字排序 282
9.9.2  链式基数排序 283
9.9.3  算法演练——使用基数排序算法排序随机数字 284
9.9.4  算法演练——使用基数排序算法排序列表 285
9.10  综合比较各种排序方法 287
第10章  使用算法解决数据结构问题 289
10.1  约瑟夫环 290
10.1.1  问题描述 290
10.1.2  算法分析 290
10.1.3  具体实现 291
10.2  操作顺序表 292
10.2.1  算法分析 293
10.2.2  具体实现 293
10.3  操作链表 295
10.3.1  算法分析 295
10.3.2  具体实现 295
10.4  带有尾节点引用的单链表 297
10.4.1  算法分析 297
10.4.2  具体实现 297
10.5  操作队列、链表、顺序表和循环顺序表 299
10.5.1  时间复杂度分析 299
10.5.2  具体实现 299
10.6  使用多叉树寻找短路径 302
10.6.1  算法分析 302
10.6.2  具体实现 302
10.7  树操作 304
10.7.1  实现AVL树 304
10.7.2  使用二维数组生成有向图 307
10.7.3  使用广度优先和深度优先遍历二叉树 308
第11章  解决数学问题 311
11.1  一段神奇的字符 312
11.1.1  问题描述 312
11.1.2  具体实现 312
11.2  1000以内的完全数 313
11.2.1  问题描述 313
11.2.2  算法分析 314
11.2.3  具体实现 315
11.3  多进程验证哥德巴赫猜想 315
11.3.1  问题描述 315
11.3.2  算法分析 315
11.3.3  具体实现 316
11.4  公约数和小公倍数 318
11.4.1  算法分析 318
11.4.2  具体实现 318
11.5  亲密数 319
11.5.1  算法分析 319
11.5.2  具体实现 319
11.6  计算10000以内的自守数 320
11.6.1  算法分析 320
11.6.2  具体实现 320
11.7  矩阵运算 320
11.7.1  算法分析 321
11.7.2  具体实现 321
11.8  一元多项式运算 322
11.8.1  一元多项式求导 322
11.8.2  实现多项式的加、减、乘法运算 323
11.9  素数问题 325
11.9.1  求1000以内的所有素数 325
11.9.2  孪生素数问题 326
11.9.3  金蝉素数 327
11.9.4  可逆素数 328
11.9.5  回文素数 329
11.9.6  等差素数数列 329
第12章  常见的经典算法问题 333
12.1  借书方案 334
12.1.1  算法分析 334
12.1.2  具体实现 334
12.2  捕鱼和分鱼 335
12.2.1  算法分析 336
12.2.2  具体实现 336
12.3  出售金鱼 336
12.3.1  算法分析 336
12.3.2  具体实现 337
12.4  平分七筐鱼 337
12.4.1  算法分析 337
12.4.2  具体实现 338
12.5  绳子的长度和井深 338
12.5.1  算法分析 339
12.5.2  具体实现 339
12.6  鸡兔同笼 340
12.6.1  算法分析 340
12.6.2  具体实现 340
12.7  三色球问题 341
12.7.1  算法分析 341
12.7.2  具体实现 342
12.8  计算年龄 342
12.8.1  算法分析 342
12.8.2  具体实现 342
12.9  常胜将军问题 343
12.9.1  算法分析 344
12.9.2  具体实现 344
12.10  野人与传教士问题 345
12.10.1  算法分析 345
12.10.2  具体实现 345
12.11  三色旗问题 347
12.11.1  算法分析 347
12.11.2  具体实现 347
12.12  猴子分桃 348
12.12.1  算法分析 348
12.12.2  具体实现 349
第13章  常用的人工智能算法 351
13.1  线性回归算法 352
13.1.1  线性回归介绍 352
13.1.2  绘制三维平面 352
13.1.3  预测房价 353
13.2  二元决策树算法 359
13.2.1  何为二元决策树 359
13.2.2  选择二元决策树切割点 359
13.2.3  使用二元决策树拟合数据 361
13.2.4  确定深度的算法 362
13.3  Bagging算法 365
13.3.1  何为Bagging算法 365
13.3.2  实现Bootstrap采样 366
13.4  Boosting算法 367
13.4.1  Boosting基础 367
13.4.2  心绞痛ROC曲线检测系统 368
13.5  随机森林算法 372
13.5.1  什么是随机森林 373
13.5.2  分析声呐数据 373

本目录推荐