
本书以人工智能发展为时代背景,通过实际案例应用描述算法,提供了较为详细的实战方案,以便深度学习。
本书内容从算法上分为数学、搜索、回溯、递归、排序、迭代、贪心、分治和动态规划等; 从数据结构上分为字符串、数组、指针、区间、队列、矩阵、堆栈、链表、哈希表、线段树、二叉树、二叉搜索树和图结构等。本书针对经典算法,结合相关的数据结构,将描述问题、问题示例、代码实现以及运行结果相结合,语言简洁,深入浅出,通俗易懂,不仅适合对Python编程有兴趣的科研人员,也适合作为高等院校的参考教材。
Python是国内外广泛使用的计算机程序设计语言,是高等院校相关专业重要的基础语言课程。由于Python语言功能丰富、表达能力强、使用灵活方便、应用面广、目标程序效率高、可移植性好等许多特点,20世纪90年代以来,Python语言迅速在全世界普及推广。目前,Python仍然是全世界最优秀的程序设计语言之一。
本书是为适应当前教育教学改革的创新要求,更好地践行语言类课程,注重实践教学与创新能力培养的需要,组织编写的教材。本书融合了同类教材的优点,采取了创新方式,精选了300个趣味性、实用性强的应用实例,从不同难度、不同算法、不同类型和不同数据结构,将实际算法进行总结,希望对教育教学及工业界起到抛砖引玉的作用。
本书的主要内容和素材来自网络流行的各大互联网公司面试算法、LintCode、Leetcode、九章算法和作者所在学校近几年承担的科研项目成果。作者所指导的研究生,在研究过程中对学习和应用的算法进行了总结,通过人工智能科研项目的实施,同学们完成了整个科研项目,不仅学到了知识,提高了能力,而且为本书提供了第一手素材和相关资料。
本书从总到分、先思考后实践、算法描述与代码实现相结合,适合从事网络开发、机器学习和算法实现的专业技术人员阅读,既可以作为主要的技术参考书、大学信息与通信工程及相关领域的Python算法实现的本科生教材、程序员算法提高使用手册,也可以为人工智能算法分析、算法设计、算法实现提供帮助。
本书的编写得到了教育部电子信息类专业教学指导委员会、信息工程专业国家第一类、第二类特色专业建设项目、教育部CDIO工程教育模式研究与实践项目、教育部本科教学工程项目、信息工程专业北京市特色专业建设、北京市教育教学改革项目、北京邮电大学教育教学改革项目(2019TD01)的大力支持,在此表示感谢!
由于作者经验与水平有限,书中疏漏及不当之处在所难免,衷心地希望各位读者多提宝贵意见及具体的改进建议,以便作者进一步修改和完善。
李永华于北京邮电大学
2019年4月
例1完美平方
例2判断平方数
例3检测2的幂次
例4求平方根
例5x的n次幂
例6快速幂
例7四数乘积
例8将整数A转换为B
例9罗马数字转换为整数
例10整数转换为罗马数字
例11整数排序
例12整数替换
例13两个整数相除
例14整数加法
例15合并数字
例16数字判断
例17下一个稀疏数
例18滑动窗口的最大值
例19创建最大数
例20最接近的k个数
例21交错正负数
例22下一个更大的数
例23落单的数Ⅰ
例24落单的数Ⅱ
例25落单的数Ⅲ
例26落单的数Ⅳ
例27对称数
例28镜像数字
例29统计比给定整数小的数
例30统计前面比自己小的数
例31阶乘尾部零的个数
例32统计数字
例33删除数字
例34寻找丢失的数
例35丑数Ⅰ
例36丑数Ⅱ
例37超级丑数
例38两数之和Ⅰ
例39两数之和Ⅱ
例40两数之和Ⅲ
例41最接近的三数之和
例42三数之和为零
例43四数之和为定值
例44骰子求和
例45k数之和
例46二进制求和
例47各位相加
例48矩阵元素ZigZag返回
例49子矩阵和为零
例50搜索二维矩阵Ⅰ
例51搜索二维矩阵Ⅱ
例52矩阵归零
例53DNA重复问题
例54螺旋矩阵
例55矩阵走路问题
例56稀疏矩阵乘法
例57直方图中最大的矩形面积
例58最大矩形
例59排序矩阵中的从小到大第k个数
例60最大和子数组
例61两个不重叠子数组最大和
例62k个不重叠子数组最大和
例63两个不重叠的子数组最大差
例64两数组的交集Ⅰ
例65两数组的交集Ⅱ
例66乘积小于k的子数组
例67最小和子数组
例68连续子数组最大和
例69子数组之和为零
例70数组划分
例71数组中的kdiff对的数量
例72删除排序数组中的重复数字
例73和大于定值的最小长度子数组
例74最大平均值子数组
例75搜索旋转排序数组中的最小值Ⅰ
例76搜索旋转排序数组中的最小值Ⅱ
例77搜索旋转排序数组目标值Ⅰ
例78搜索旋转排序数组目标值Ⅱ
例79和最接近零的子数组
例80两个整数数组的最小差
例81数组中的相同数字
例82翻转数组
例83奇偶分割数组
例84判断字符串中的重复字符
例85最长无重复字符的子字符串
例86最长回文子字符串
例87将字符串转换为整数
例88字符串查找
例89子字符串的判断
例90翻转字符串中的单词
例91乱序字符串
例92比较字符串
例93攀爬字符串
例94交叉字符串
例95字符串解码
例96最小子字符串覆盖
例97连接两个字符串中的不同字符
例98字符串加法
例99字符串乘法
例100前k个偶数长度的回文数之和
例101分割回文串Ⅰ
例102分割回文串Ⅱ
例103回文排列Ⅰ
例104回文排列Ⅱ
例105回文链表
例106有效回文串
例107回文对
例108字模式
例109k组翻转链表
例110删除排序链表中的重复元素Ⅰ
例111删除排序链表中的重复元素Ⅱ
例112链表划分
例113翻转链表Ⅰ
例114翻转链表Ⅱ
例115旋转链表
例116两两交换链表中的节点
例117删除链表中的元素
例118重排链表
例119链表插入排序
例120合并k个排序链表
例121带环链表
例122带环链表转换
例123删除链表中倒数第n个节点
例124链表排序
例125加1链表
例126交换链表中的两个节点
例127线段树的修改
例128线段树的构造Ⅰ
例129线段树的构造Ⅱ
例130线段树查询Ⅰ
例131线段树查询Ⅱ
例132是否为子树
例133最小子树
例134具有最大平均数的子树
例135二叉搜索树中最接近的值
例136二叉搜索树中插入节点
例137二叉搜索树中删除节点
例138二叉搜索树转化成更大的树
例139二叉搜索树的搜索区间
例140二叉搜索树的中序后继
例141二叉搜索树两数之和
例142裁剪二叉搜索树
例143统计完全二叉树节点数
例144二叉搜索树迭代器
例145翻转二叉树
例146相同二叉树
例147前序遍历树和中序遍历树构造二叉树
例148二叉树的后序遍历
例149二叉树的所有路径
例150中序遍历树和后序遍历树构造二叉树
例151二叉树的序列化和反序列化
例152二叉树的层次遍历Ⅰ
例153二叉树的层次遍历Ⅱ
例154二叉树的锯齿形层次遍历
例155寻找二叉树叶子节点
例156平衡二叉树
例157二叉树中的最大路径和
例158验证二叉查找树
例159二叉树的最大深度
例160二叉树的前序遍历
例161二叉树的中序遍历
例162将排序列表转换成二叉搜索树
例163二叉树的最小深度
例164不同的二叉搜索树
例165将二叉树拆成链表
例166排序数组转为高度最小二叉搜索树
例167最近二叉搜索树值Ⅰ
例168最近二叉搜索树值Ⅱ
例169买卖股票的最佳时机Ⅰ
例170买卖股票的最佳时机Ⅱ
例171买卖股票的最佳时机Ⅲ
例172主元素Ⅰ
例173主元素Ⅱ
例174第k大元素
例175滑动窗口内唯一元素数量和
例176单词拆分Ⅰ
例177单词拆分Ⅱ
例178单词矩阵
例179单词搜索
例180单词接龙Ⅰ
例181单词接龙Ⅱ
例182包含所有单词连接的子串
例183最后一个单词的长度
例184电话号码的字母组合
例185会议室Ⅰ
例186会议室Ⅱ
例187区间最小数
例188搜索区间
例189无重叠区间
例190区间合并
例191区间求和Ⅰ
例192区间求和Ⅱ
例193是否为子序列
例194最长上升子序列
例195有效的括号序列
例196对称树
例197图是否为树
例198表达树的构造
例199表达式求值
例200逆波兰表达式求值
例201将表达式转换为逆波兰表达式
例202最长公共子序列
例203乘积最大子序列
例204最长上升连续子序列
例205序列重构
例206不同的子序列
例207跳跃游戏Ⅰ
例208跳跃游戏Ⅱ
例209翻转游戏
例210棒球游戏
例211中位数
例212滑动窗口的中位数
例213数据流中位数
例214两个排序数组的中位数
例215打劫房屋Ⅰ
例216打劫房屋Ⅱ
例217子集Ⅰ
例218子集Ⅱ
例219迷宫Ⅰ
例220迷宫Ⅱ
例221迷宫Ⅲ
例222迷宫Ⅳ
例223数字组合Ⅰ
例224数字组合Ⅱ
例225数字组合Ⅲ
例226摆动排序问题
例227多关键字排序
例228排颜色
例229颜色分类
例230简化路径
例231不同的路径Ⅰ
例232不同的路径Ⅱ
例233换硬币
例234硬币摆放
例235硬币排成线Ⅰ
例236硬币排成线Ⅱ
例237搜索插入位置
例238俄罗斯套娃信封
例239包裹黑色像素点的最小矩形
例240薪水调整
例241木材加工
例242判断数独是否合法
例243移除多余字符
例244三元式解析器
例245符号串生成器
例246用栈实现队列
例247用栈模拟汉诺塔问题
例248带最小值操作的栈
例249恢复旋转排序数组问题
例250移动零问题
例251丢失的间隔问题
例252三个数的最大乘积
例253用循环数组来实现队列
例254寻找数据错误
例255数据流中第一个独特数
例256数据流中第一个唯一的数字
例257二进制中有多少个1
例258找到映射序列
例259旋转图像
例260相反的顺序存储
例261太平洋和大西洋的水流
例262不同岛屿的个数
例263岛的周长问题
例264数字三角形
例265最大正方形
例266最大关联集合
例267合并k个排序间隔列表
例268合并账户
例269集合合并
例270快乐数判断
例271最多有多少个点在一条直线上
例272寻找峰值
例273电灯切换
例274第k个质数
例275最小调整代价
例276背包问题
例277爬楼梯
例278被围绕的区域
例279编辑距离
例280最大间距
例281堆化操作
例282外轮廓线
例283格雷编码
例284能否到达终点
例285恢复IP地址
例286斐波纳契数列
例287最长公共前缀
例288解码方法
例289吹气球
例290生成括号
例291正则表达式匹配
例292分割标签
例293装最多水的容器
例294接雨水
例295加油站
例296分糖果
例297建立邮局
例298寻找最便宜的航行旅途
例299UTF8编码检查
例300哈希函数
本书是中国产业发展研究院、中关村智能硬件产业联盟、中关村大数据产业联盟
联袂推荐用书!全书包含10万行源代码、300个经典案例,适合读者轻松入门Python。配套完整的源代码可到清华大学出版社网站本书页面下载。
李永华 现执教于北京邮电大学,拥有超过10年的嵌入式开发经验,致力于物联网和智能硬件的研究开发工作。在教学中以兴趣为导向,激发学生的创造性;以素质为基础,提高自身教学水平;以科研为手段,促进教学理念转变。通过信息工程专业综合改革,探索了以“学生学为中心”的教学模式,营造生动活泼的学习方法,提高学生独立思考问题、发现问题、解决问题的能力,激发学生的创造激情。在研发及教学实践中指导学生实现200余个创新案例,并指导着一支物联网开发团队,曾在物联网、开源硬件等技术领域进行了多场学术报告,并且出版了《AllJoyn技术原理及物联网程序开发指南》《Arduino实战指南——游戏开发、智能硬件、人机交互、智能家居与物联网设计30例》《Arduino软硬件协同设计实战指南》等多部物联网技术方面的著作。