新書推薦:
《
为你想要的生活
》
售價:HK$
66.1
《
关键改变:如何实现自我蜕变
》
售價:HK$
77.3
《
超加工人群:为什么有些食物让人一吃就停不下来
》
售價:HK$
99.7
《
历史的教训(浓缩《文明的故事》精华,总结历史教训的独特见解)
》
售價:HK$
62.7
《
不在场证明谜案(超绝CP陷入冤案!日本文坛超新星推理作家——辻堂梦代表作首次引进!)
》
售價:HK$
58.2
《
明式家具三十年经眼录
》
售價:HK$
524.2
《
敦煌写本文献学(增订本)
》
售價:HK$
221.8
《
耕读史
》
售價:HK$
109.8
|
編輯推薦: |
108段精讲学习视频全程相伴,扫码即看;103个有趣实例及精彩分析娓娓道来。
|
內容簡介: |
算法是程序的灵魂,算法能够告诉开发者在面对一个项目功能时用什么思路去实现,有了这个思路后,编程工作只需遵循这个思路去实现即可。本书循序渐进、由浅入深地详细讲解了算法实现的核心技术,全书共12章,分别讲解了初步认识算法思想,枚举算法思想,递归算法思想,分治算法思想,贪心算法思想,回溯算法思想,迭代算法思想,查找算法,排序算法,使用算法解决数据结构问题,解决数学问题,经典算法问题。全书通过具体实例的实现过程演练了各个知识点的具体使用流程,引领读者全面掌握算法的核心技术。
|
關於作者: |
徐庆丰,西安交通大学计算机硕士,软件工程硕士。就职于360移动端项目组,专门解决移动Android设备方面的数据加密、漏洞校验分析和加密工作。精通C、C、Python、Java,擅长数据分析、机器学习、网络攻击、漏洞查找分析、系统安全架构和反编译。2010年,曾经率先发现微软IE7的重大漏洞,并提出了具体的补丁方案,引起微软重视,并建议加入微软MVP。
|
目錄:
|
第 1 章 初步认识算法思想
1.1 什么是算法 ........................................................................................................1
1.1.1 一道趣味题 .........................................................................................................1
1.1.2 算法的定义 .........................................................................................................2
1.1.3 计算机中的算法 .................................................................................................2
1.1.4 总结算法的特征 .................................................................................................3
1.2 算法是程序的灵魂 ............................................................................................3
1.3 算法的表示方法 ................................................................................................4
1.3.1 用流程图来表示算法 .........................................................................................4
1.3.2 用 N-S 流程图来表示算法.................................................................................5
1.4 Python 算法思想 ................................................................................................6
1.4.1 常用的算法思想 .................................................................................................6
1.4.2 衡量算法优劣的标准 .........................................................................................6
1.4.3 算法复杂度 .........................................................................................................7
1.4.4 时间复杂度与空间复杂度的取舍问题 .............................................................9
1.5 小结 ..................................................................................................................10
第 2 章 枚举算法思想
2.1 枚举算法基础 .................................................................................................. 11
2.1.1 枚举算法介绍 ...................................................................................................11
2.1.2 Python 中枚举算法的实现思路.......................................................................11
2.2 算法演练找出符合条件的 5 位数 ..........................................................12
2.2.1 算法分析:首位数不能是谁 ...........................................................................12
2.2.2 具体实现 ...........................................................................................................12
2.3 算法演练24 点游戏 .................................................................................13
2.3.1 算法分析:加括号和去除重复表达式 ...........................................................13
2.3.2 具体实现 ...........................................................................................................14
2.3.3 第二种方案:列表切片操作实现排列组合 ...................................................17
2.3.4 第三种方案:itertools 模块实现排列组合 .....................................................17
2.4 算法演练解决熄灯问题 ...........................................................................19
2.4.1 算法分析:规则中的规律 ...............................................................................20
2.4.2 具体实现 ...........................................................................................................21
2.5 算法演练解决讨厌的青蛙问题 .......................................................23
2.5.1 算法分析:缩小解的空间 ...............................................................................24
2.5.2 具体实现 ...........................................................................................................24
2.6 小结 ..................................................................................................................26
第 3 章 递归算法思想
3.1 递归算法思想基础 ..........................................................................................27
3.2 算法演练解决斐波那契数列问题 ...................................................28
3.2.1 算法分析:找出兔子增加的规律 ...................................................................28
3.2.2 具体实现 ...........................................................................................................28
3.3 算法演练解决汉诺塔问题 ...............................................................29
3.3.1 算法分析:情景模拟移动过程 .......................................................................29
3.3.2 具体实现 ...........................................................................................................30
3.4 算法演练解决阶乘问题 ...................................................................32
3.4.1 算法分析:拆分调用 .......................................................................................32
3.4.2 具体实现:显示 6 以内阶乘过程 ...................................................................32
3.5 算法演练进制转换器 ...............................................................................33
3.5.1 算法分析:除以 2 获取余数 ...........................................................................33
3.5.2 具体实现:输出十进制数字 10 对应的二进制数 .........................................33
3.6 算法演练分解数字 ...................................................................................34
3.6.1 算法分析:递归除以 10 ..................................................................................34
3.6.2 具体实现:分解 5 位整数 12345 ....................................................................34
3.7 算法演练解决二叉树遍历问题 ...............................................................34
3.7.1 算法分析:实现三种遍历方式 .......................................................................34
3.7.2 实现树的结构 ...................................................................................................35
3.7.3 二叉树递归遍历方案 .......................................................................................36
3.8 算法演练最大公约数和最小公倍数 .......................................................38
3.8.1 算法分析:整理计算流程 ...............................................................................38
3.8.2 基于递归算法的方案 .......................................................................................38
3.8.3 比较递归和非递归方案 ...................................................................................39
3.9 小结 ..................................................................................................................40
第 4 章 分治算法思想
4.1 分治算法思想基础 ..........................................................................................41
4.1.1 分治算法介绍与解题步骤 ...............................................................................41
4.1.2 分治算法的思路 ...............................................................................................41
4.1.3 分治算法能解决什么类型的问题 ...................................................................42
4.2 算法演练二分法找出有序列表指定值 ...................................................43
4.2.1 算法分析:确定中位数 ...................................................................................43
4.2.2 第一种方案:先判断再查询 ...........................................................................43
4.2.3 第二种方案:判断某个元素是否在列表中 ...................................................44
4.2.4 第三种方案:找出有序列表中的指定值 .......................................................45
4.3 算法演练求顺序表中数据的最大值 .......................................................45
4.3.1 算法分析:找出每一个分组中的最大值 .......................................................45
4.3.2 具体实现:找出给定列表 list 中的最大值 ....................................................46
4.4 算法演练查找列表中元素的最小值和最大值 .......................................46
4.4.1 算法分析:合理分组 .......................................................................................46
4.4.2 第一种方案:分组计算 ...................................................................................47
4.4.3 第二种方案:选择最大最小元素 ...................................................................48
4.5 算法演练找出一组序列中的第 k 小(大)的元素 ...............................48
4.5.1 算法分析:设置枢纽元素 ...............................................................................48
4.5.2 第一种方案:分组比较 ...................................................................................49
4.5.3 第二种方案:快速排序的分治算法 ...............................................................49
4.5.4 第三种方案:分组和排序同时进行 ...............................................................50
4.5.5 第四种方案:生成随机校验码 .......................................................................51
4.6 算法演练快速排序 ...................................................................................51
4.6.1 算法分析:设定基准线并对比 .......................................................................51
4.6.2 具体实现 ...........................................................................................................52
4.6.3 第二种方案:列表推导 ...................................................................................52
4.7 算法演练实现归并排序 ...........................................................................53
4.7.1 算法分析:中间下标与值大小分配 ...............................................................53
4.7.2 具体实现:对列表 [1,6,12,3,8] 进行归并排序 ..............................................54
4.8 算法演练整数划分 ...................................................................................54
4.8.1 算法分析:梳理递归关系 ...............................................................................55
4.8.2 具体实现 ...........................................................................................................55
4.9小结 ..................................................................................................................56
第 5 章 贪心算法思想
5.1 贪心算法思想基础 ..........................................................................................57
5.1.1 贪心算法介绍 ...................................................................................................57
5.1.2 贪心算法的基本思路 .......................................................................................58
5.2 算法演练解决找零方案问题 ...........................................................58
5.2.1 算法分析:零钱的面额是固定的 ...................................................................58
5.2.2 具体实现 ...........................................................................................................58
5.3 算法演练解决汽车加油问题 ...........................................................59
5.3.1 算法分析:先加油后贪心 ...............................................................................59
5.3.2 具体实现 ...........................................................................................................59
5.4 算法演练解决求最大子元素之和问题问题 ...................................60
5.4.1 算法分析:确定目前子元素的和是否最大 ...................................................60
5.4.2 具体实现:计算整数列表 s 的最大连续子元素之和 ...................................61
5.5 算法演练解决幼儿园分糖果问题 ...................................................61
5.5.1 算法分析:优先从需求因子小的孩子进行尝试 ...........................................61
5.5.2 具体实现 ...........................................................................................................61
5.6 算法演练圣诞节的礼物 ...........................................................................62
5.6.1 算法分析:单位价值最大 ...............................................................................62
5.6.2 具体实现 ...........................................................................................................63
5.7 算法演练解决活动安排问题 ...........................................................64
5.7.1 算法分析:活动安排问题的最优解 ...............................................................64
5.7.2 第一个方案:快速排序 ...................................................................................65
5.7.3 第二个方案:通过冒泡排序同步交换数据 ...................................................66
5.8 算法演练解决摇摆序列问题 ...........................................................67
5.8.1 算法分析:选择使得摇摆子序列长度更长的数 ...........................................67
5.8.2 具体实现 ...........................................................................................................68
5.9 算法演练移除 k 个数字 ...........................................................................69
5.9.1 算法分析:从高位向低位遍历 .......................................................................69
5.9.2 具体实现 ...........................................................................................................70
5.10 算法演练四种解决霍夫曼编码问题的方案 .................................70
5.10.1 算法分析 .........................................................................................................71
5.10.2 第一种方案:权值排序 .................................................................................72
5.10.3 第二种方案:使用 Python 自带的内置库 heapq .........................................73
5.10.4 第三种方案:使用内置统计函数 .................................................................75
5.10.5 第四种方案:实现完整树的队列操作 .........................................................76
5.11 算法演练解决Kruskal 算法问题 ...................................................78
5.11.1 算法分析:顺序选取权重边 .........................................................................79
5.11.2 第一种方案:判断根结点是否相同 .............................................................80
5.11.3 第二种方案:将权重最小的边加入到最小生成树 .....................................81
5.11.4 第三种方案:基于不相交集实现 .................................................................83
5.12 算法演练解决Prim 算法问题 ........................................................85
5.12.1 算法分析:将结点分组 .................................................................................86
5.12.2 第一种方案:选取权重最小的一条边 .........................................................86
5.12.3 第二种方案:随机选取结点 .........................................................................87
5.13 小结 ................................................................................................................89
|
內容試閱:
|
从你开始学习编程的那一刻起,就注定了以后所要走的路:从编程初学者开始,依次经
历实习生、程序员、软件工程师、架构师、CTO 等职位的磨砺。当你站在职位顶峰的位置蓦
然回首,才会发现自己的成功并不是偶然,在程序员的成长之路上会有不断修改代码、寻找
并解决 Bug、不停测试程序和修改项目的经历。不可否认的是,只要你在自己的开发生涯中
稳扎稳打,并且善于总结和学习,最终将会得到可喜的收获。
■
选择一本合适的书
对于一名程序开发初学者来说,应如何学习并提高自己的开发技术呢?答案就是买一本
合适的程序开发书籍进行学习。但是,市面上许多面向初学者的编程书籍中大多都是基础知
识讲解,偏向于理论,读者读完以后面对实战项目时还是无从下手。如何实现从理论过渡到
项目实战,是初学者迫切需要了解的;鉴于此,笔者梳理自己对算法的理解思路,同时加入
实践项目的经验,编写了本书,它将面向具有一定 Python 编程经验的初级程序员,讲解了
Python 算法的核心知识和技巧,这些知识能够帮助读者迅速掌握 Python 算法的精髓,编写
出更加优质的代码。
■
本书的特色
(1)以入门到精通的写作方法构建内容
为了让读者能够完全看懂书中的内容,笔者遵循入门到精通基础类图书的写法,循
序渐进地讲解 Python 开发语言的基本知识。
(2)实例教学,经典并深入
以实例教学为导向,通过具体实例讲解了各种算法思想的基本知识和核心用法。通过具
体实例的讲解和剖析,帮助读者真正掌握 Python 算法的核心内容。
(3)视频讲解,二维码布局全书
书中每一个二级目录下都有一个二维码,通过二维码扫描可以观看讲解视频,既包括实
例讲解也包括教程讲解,对读者的开发水平实现了拔高处理。
(4)售后答疑帮助读者快速解决学习问题
无论是书中的疑惑,还是在学习过程中遇到的问题,笔者将在第一时间为读者答疑解惑,
这也是笔者对读者的承诺。
I
文前1.indd 1
2020-8-3 15:00:20
?
Python 常用算法手册
(5)QQ 群 网站论坛实现教学互动,形成互学、互帮的朋友圈
为了方便给读者答疑,笔者提供了网站论坛、QQ 群等技术支持(通过 QQ:729017304
获得) 并且随时在线与初学者互动。,让大家在互学、互帮中形成一个良好的学习编程的氛围。
■
整体下载包
为了方便不同网络环境的读者学习,也为了提升图书的附加价值,笔者将书中 108 个扫
码视频和源代码整理成整体下载包,读者可以通过封底二维码和下载链接获取学习。
备用网盘下载地址:https:pan.baidu.coms1kQH1XkWpYQ3FJMSRcl_CQg
提取码:mwsg
■
读者对象
本书以学习笔记的形式系统讲解了 Python 语言实践中的算法思想,旨在帮助有一定经
验的初级程序员夯实算法思维基础,并通过大量经典演练案例迅速积累经验,提升编程能力。
■
致谢与批评
特别感谢中国铁道版社有限公司编辑的大力支持,正是各位编辑的求是、耐心和效率,
才使得本书能够在这么短的时间内出版。另外,也十分感谢我的家人给予的巨大支持。由于
水平有限,书中存在纰漏之处在所难免,恳请读者提出宝贵的意见或建议,以便修订并使之
日臻完善。
最后感谢读者选择了这本书,更希望它能成为您编程路上的引导者,那么笔者将不胜荣
幸,祝您阅读快乐!
|
|