Python算法从入门到实践
全新正版 极速发货
¥
37.39
4.2折
¥
89.5
全新
库存2件
作者薛小龙
出版社清华大学出版社
ISBN9787302574590
出版时间2021-04
装帧平装
开本16开
定价89.5元
货号31132194
上书时间2024-06-04
商品详情
- 品相描述:全新
- 商品描述
-
作者简介
目录
第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 一元多项式
— 没有更多了 —
以下为对购买帮助不大的评价