新書推薦:

《
CEO的五项修炼
》
售價:HK$
96.8

《
叹为观纸 中国古纸的传说与历史
》
售價:HK$
86.9

《
中国历代男子服饰:图解中国男子传统服饰 解密古代男子穿什么 为什么这样穿
》
售價:HK$
107.8

《
经济学的观念:13位经济学巨匠和他们改变世界的思想(一本书领略群星璀璨的百年经济思想史)
》
售價:HK$
85.8

《
面包+每日三明治(2册)
》
售價:HK$
143.0

《
别乱穿 找准你的专属色:四季十二型人色彩穿搭图解 四季型人色彩搭配
》
售價:HK$
54.8

《
香气正念:用气味调节情绪与身体的嗅觉疗愈革命
》
售價:HK$
65.8

《
遗失的文明:走进神秘的考古世界
》
售價:HK$
217.8
|
編輯推薦: |
案例丰富,信息量大,实用性强,注释详细。内容涉及Office文件操作、GUI设计、图像处理、计算机图形学编程、音视频处理、数据分析、数据可视化与科学计算可规化、密码学、数据库、网络编程、多线程与多进程编程,逆向工程、Windows系统编程,安卓编程等领域。
深度与广度兼顾。剖析Python编程模式,适当介绍标准库与扩展库工作原理以及代码优化与安全编程知识,满足不同层次读者的需要。
知识点密集、紧凑。书中尽量减少代码的运行结果和软件安装过程截图,充分利用有限篇幅讲解更多知识。
配套资源丰富。提供教学课件、教学大纲、授课计划、电子教案、教学视频、习题答案、配套源码、数据文件、在线练习与考试软件,支持QQ、微信、电子邮件、微信公众号等多种方式与作者交流。
|
內容簡介: |
全书分为两篇,共18章。第1篇介绍算法分析与设计基础、算法测试方法与优化技巧,以及枚举算
來源:香港大書城megBookStore,http://www.megbook.com.hk 法、解析算法、递推与迭代算法、递归与回溯算法、排序算法、查找算法、贪心算法、分治法、动态规
划算法的基本原理、实现源码与优化思路。第2篇介绍数论、线性代数、概率论与随机过程、益智游戏、
图论、机器学习、计算机图形学、密码学等多个领域的常见算法与实现。所有例题都进行详细讲解并提
供了Python源码,全部源码均在Python主流开发环境中测试通过。
本书案例丰富,实用性强,深入浅出,理论与应用结合,学习路线清晰,配套资源立体化、多元化,
可以作为高等院校计算机类专业本科与研究生算法类课程的教材,其他专业本科或研究生以及计算机专
业专科学生可以选讲部分章节。本书也适合算法工程师、爱好者以及参加算法竞赛的学生参考学习。
|
目錄:
|
第1篇 常用算法的原理、实现与优化
第1章 算法分析与设计基础 .002
1.1 基本概念 .002
1.2 算法复杂度指标 003
1.2.1 时间复杂度 .003
1.2.2 测量程序运行时间和空间使用情况 005
1.3 算法优化常用思路 008
1.3.1 算法层面优化 .008
1.3.2 代码层面优化 .010
习题 013
第2章 枚举算法 017
2.1 数学类问题算法设计与应用 .017
2.2 其他类问题算法设计与应用 .031
习题 037
第3章 解析算法 039
3.1 数学类问题算法设计与应用 .039
3.2 物理类问题算法设计与应用 .048
3.3 其他类问题算法设计与应用 .053
习题 061
第4章 递推与迭代算法 063
4.1 数学类问题算法设计与应用 .063
4.2 其他类问题算法设计与应用 .085
习题 098
第5章 递归与回溯算法 101
5.1 数学类问题算法设计与应用 .102
5.2 其他类问题算法设计与应用 .105
5.3 尾递归优化 .120
习题 122
第6章 排序算法 124
6.1 排序算法的原理与实现 124
6.1.1 冒泡排序算法 .124
6.1.2 选择排序算法 .126
6.1.3 插入排序算法 .128
6.1.4 侏儒排序算法 .129
6.1.5 希尔排序算法 .129
6.1.6 堆排序算法 .130
6.1.7 归并排序算法 .131
6.1.8 快速排序算法 .133
6.1.9 基数排序算法 .134
6.1.10 计数排序算法 135
6.2 排序算法高级应用 138
习题 147
第7章 查找算法 150
7.1 线性查找算法 150
7.2 二分法查找 .159
习题 162
第8章 贪心算法 164
8.1 找零钱问题 .164
8.2 幼儿园加餐吃面包问题 165
8.3 汽车加油问题 166
8.4 区间合并问题 167
8.5 分数分解问题 167
8.6 若干数字中前后元素最大差问题 .169
8.7 活动安排问题 169
8.8 哈夫曼编码与解码 171
习题 174
第9章 分治法 176
9.1 方程近似根 .176
9.2 任意数列的逆序数 177
9.3 大自然数相乘 180
9.4 若干整数的第k大元素 181
9.5 元素之和最大的连续子序列 .186
9.6 二维平面距离最近的两个点 .188
习题 192
第10章 动态规划算法 .193
10.1 斐波那契数列第n个数 .194
10.2 找零钱问题 194
10.3 奖品收集问题 .197
10.4 0-1背包问题 .200
10.5 最长非递减子序列 .206
10.6 最长公共子序列 .210
习题 214
第2篇
算法在不同学科中的应用
第11章 数论算法 .216
11.1 进制转换 216
11.2 最大公约数 217
11.3 素性检测 219
11.4 大数乘法与多项式乘法 .229
11.5 乘模逆、扩展欧几里得算法 234
11.6 中国剩余定理 .237
11.7 快速幂模算法 .239
11.8 水仙花数 244
11.9 平方数与自守数 .249
11.10 整数分解 .251
习题 259
第12章 线性代数算法 .261
12.1 向量基本运算 .261
12.2 矩阵基本运算 .265
12.3 矩阵行列式、代数余子式、逆矩阵 269
习题 275
第13章 概率论与随机过程算法 277
13.1 概率论的基本概念 .277
13.2 算法应用案例解析 .279
习题 288
第14章 益智游戏类算法 .289
14.1 24点游戏 289
14.2 蒙蒂霍尔悖论游戏 .290
14.3 寻宝游戏 292
14.4 模拟发红包 297
14.5 聪明的尼姆游戏 .298
14.6 抓狐狸游戏 299
14.7 确定旅游目的地 .301
14.8 制作漂亮手链 .303
14.9 数字可达游戏 .304
14.10 电影院选座位问题 307
14.11 数独游戏盘面生成与自动求解 .308
14.12 推理游戏 .313
14.13 迷宫自动寻找最短路径 315
习题 318
第15章 图论算法 .320
15.1 图的概念、表示、应用与可视化 320
15.1.1 基本概念与应用场景 .320
15.1.2 图的表示方式 .321
15.1.3 图的可视化 .325
15.1.4 寻找人群中的明星 .326
15.2 二叉树与多叉树节点遍历 326
15.3 通路、回路、最短路径 .331
15.4 拓扑排序 340
15.5 图着色问题 341
15.6 最小生成树 344
15.7 完美匹配 346
15.8 最大流 347
习题 352
第16章 机器学习算法 .353
16.1 线性回归算法原理与应用 353
16.1.1 线性回归算法原理 .353
16.1.2 使用线性回归模型预测儿童身高 355
16.2 协同过滤算法原理与电影推荐 357
16.3 朴素贝叶斯算法原理与应用 358
16.3.1 分类算法基本原理 .358
16.3.2 使用朴素贝叶斯算法进行垃圾邮件分类 .359
16.4 分类算法与聚类算法 .363
16.4.1 使用KNN算法判断交通工具类型 363
16.4.2 使用K-Means算法压缩图像颜色 365
16.4.3 DBSCAN算法原理与应用 368
16.5 关联规则分析算法原理与应用 370
16.5.1 基本概念与算法原理 .371
16.5.2 使用关联规则分析算法分析和预测演员关系 .371
习题 375
第17章 计算机图形学算法 376
17.1 Bresenham直线生成算法 .376
17.2 二维平面直线裁剪算法 .379
17.2.1 Cohen-Sutherland裁剪算法 380
17.2.2 Liang-BarSky裁剪算法 384
17.3 求解点集的凸包 .388
习题 392
第18章 密码学算法 .394
18.1 安全哈希算法 .394
18.2 对称密钥密码算法DES和AES 395
18.3 非对称密钥密码算法RSA与数字签名算法DSA .397
18.3.1 RSA算法 .397
18.3.2 DSA算法 .400
习题 401
参考文献 .402
|
內容試閱:
|
不论学习、工作还是生活中,算法无处不在,只是出场方式和表现形式不同,甚至很
多时候都感觉不到算法的存在。但在大数据和人工智能时代,我们会越来越发现,算法比
我们更懂这个世界,甚至可以说是这个世界的主宰。
算法是武林高手的内功,是程序的灵魂,编程语言则是手中的刀剑。精妙的招式固然
重要,但没有深厚的内功作为支撑也只是花拳绣腿,在绝对的实力面前一切技巧都是浮云。
具备深厚的内功之后,再有一把得心应手的兵器则是锦上添花。程序员水平的高低,最终
还是看其算法功底以及对所用语言和系统底层知识的理解。一个人往下钻得越深,基础越
扎实,他的上升空间越大。
深入分析问题、重新表述问题和重新表示数据并在一定程度上简化问题,是一项非常
重要的能力,描述问题和表示数据的方式对于算法设计与优化非常重要,好的数据结构和
表示方法可以起到化繁为简的作用。如果不能使用简单易懂的方式描述和解释一个算法,
很可能是描述者本人并没有真正理解算法,甚至没有真正理解问题本身。
当我们编写程序成功解决问题之后,不应该满足于此,功能正确只是最低要求。还应
该从算法设计、数据类型选择、数据结构设计、语言底层运行机制等方面进行全方位优化,
让程序更快、更好、更优雅,发挥精益求精、迎难而上的工匠精神,同时也训练自己的抽
象思维、逻辑思维、计算思维,毕竟算法设计和优化是非常灵活又充满智慧的过程。另外,
很多算法在问题规模较小时表现很好,但问题规模变大时算法性能就会急剧恶化,这也是
我们不断优化算法和设计新算法的重要原因和主要目的之一。
虽然算法推导和证明对于理解、改进和优化旧算法以及设计新算法也很重要,但限于
篇幅,本书并没有把重点放在此处,甚至个别算法的原理也没有展开详细解释,更多的是
算法的实现、优化和应用。尽管如此,作者仍然强烈建议有能力的读者阅读更多扩展资料
理解算法原理以及证明过程,这样更有助于进一步优化和设计算法。
有人可能会说,既然选择使用Python语言,内置类型、内置函数、标准库、扩展库
已经封装和实现了大量的算法,并且现在计算机内存和CPU性能也比前些年高了成百上
千倍,我们自己还有必要在算法上花费这么多精力吗?非要硬抠细节的话,干脆改回去用
C语言算了。这样想是不对的。不管使用什么语言,良好的算法功底对程序员来说都是非
常重要的。尽管Python已经提供了强大的计算生态,越来越符合低代码开发的要求,但
并没有覆盖人类全部的需求,仍有很多核心功能和外围功能需要我们自己编写代码来实现,
良好的算法设计与优化意识会促使我们去探索底层工作原理和高级用法。Python本身有
些操作会引入一些隐形的开销,其中有些开销是可以避免的,这需要非常熟悉Python底
层运行机制。虽然CPU性能和各种硬件配置已经有了翻天覆地的变化,但仍不能满足大数
据时代信息爆炸式增长和人工智能时代对算力的需求,该节省还是要节省。由于Python
内置对象、标准库对象以及扩展库对象提供了非常强大的功能,很多人已经慢慢习惯了调
用现成的模块,自己经常动手实现一些算法不仅可以防止变懒变傻,还可以防止过度依赖
别人尤其是防止被国外“卡脖子”。
书中很多算法的实现和优化利用了Python语言特有的语法和数据结构,不一定适
用于其他编程语言。尽管真正的算法应该是超脱和凌驾于具体的编程语言之上的,但借
助于编程语言提供的功能快速实现算法如虎添翼,何乐而不为呢?并且,既然选择使用
Python语言,充分发挥和利用这门语言的优势也是程序员的义务和优秀品质之一。
可能你听到过很多人抱怨说Python虽然是门很好的编程语言但实在是太慢了,可能
你也是这么认为的,但通过学习本书你应该会改变这个看法。一个好的程序不仅需要好的
算法,还需要对代码本身进行反复优化,充分利用Python提供的功能,同时还要避免一
些会拖慢程序的坑。即使你不专门从事算法设计和分析行业,也会从本书中介绍的一些思
路和Python语言知识中受益。
授人以鱼不如授人以渔,很多人懂这个道理,但却忽略了一个重要前提,那就是传授
的“渔”必须是经过反复验证有效的,传授者已经使用这样的方法捕到了足够多的鱼,而
不是纸上谈兵的空洞理论和不切实际的想法。只见过几次猪跑就大谈猪肉味道的做法更是
不可取的,这是在教学过程中特别需要注意的问题。另外,作为建议,应尽量编写优雅、
高效、可读性强的代码,不做“防御性编程”(加引号是因为这里不是指原本的意思),故
意把代码写得难以阅读和维护来避免自己被辞退,虽然确实有人这样做。踏踏实实做事,
坚信单位是公正的,或者说会越来越公正的,至少我们都希望是这样也朝这个方向去努力。
每个领域都有大量的算法,仅仅计算机相关领域的算法也不是一本教材能覆盖的,同
一个算法又在不同的领域有不同的应用。但限于篇幅,也限于作者熟悉的领域,不可能在
一本书中包含全部,只能精挑细选了很小的一部分来讲解和实现,希望能起到抛砖引玉的
作用。任何算法都有局限性和适用范围,没有放之四海而皆准的通用算法,如果问题不符
合特定条件或者不具备特定性质,相应的算法也就不适用了。另外,很少有问题是只使用
一种算法就可以解决的,大部分问题的求解都是同时使用了多个算法的思想或结构。书中
有些案例仅使用了一种算法,更多案例则使用多种不同算法进行求解,有些算法的思想在
多个案例中都有体现,有些案例又可以使用不同的算法来解决,有些案例还同时综合使用
了多种算法。本书在组织内容时大体以算法类型和案例所属领域来安排章节,但并不严格,
仍存在不同章节内容交叉的情况。很多案例和算法之间是互相交织和关联的,你中有我,
我中有你。除第1章外,本书其他章节之间没有严格的先后关系,但也不是并列关系,有
的章节是算法思想,有的章节是算法结构,有的章节是算法应用,教学或自学时可以随意
安排顺序。尽管如此,仍建议在时间允许的前提下从前向后按章节顺序学习。
本书假设读者已有Python基础,这样阅读和理解代码时会轻松很多。如果需要系
统学习Python基础知识和其他领域的应用,请参考作者编著的其他教材或者微信公众号
“Python小屋”阅读技术文章。
本书适合作为计算机类专业的算法课程教材,也可以作为算法工程师与爱好者的自学
教材或算法竞赛选手的参考资料。用书教师可以在清华大学出版社官方网站下载配套资源,
也可以通过微信公众号联系作者获取。为便于Python零基础的读者学习,可扫描本页二
维码快速入门Python语言。
由于水平有限和时间仓促,书中难免出现错误,欢迎各界同行和广大师生交流反馈。
董付国
2025年2月
|
|