标签
内容简介
本书的目的是帮助初学者掌握编程中的基础算法,并通过Python语言进行实战演练,通过即学即练的方式掌握这些经典算法,让读者真正体会算法的美妙,成为读者学习算法的领路人。本书分为8章,涵盖的主要内容有算法之美,通过生活中的例子学习算法;贪心算法,选择当前优的方案;分而治之算法,将复杂的问题拆分为简单的问题;树算法,围绕树结构的各种算法;图算法,围绕图结构的各种算法;动态规划,一种求解优问题的强大工具;回溯法,深度优先遍历问题的解空间;分支限界法,广度优先遍历问题的解空间。
编辑推荐
这是一本面向零基础读者的算法入门书,作者以Python为载体,把抽象算法拆解成可动手演练的步骤。全书覆盖贪心、分治、树、图、动态规划、回溯与分支限界等经典主题,结构上按算法思想分章,便于读者建立分类认知。书中的亮点在于用生活化例子引入概念,强调即学即练,让读者在写代码的过程中理解算法为何这样设计,而不是死记模板。对于刚接触编程、希望补齐算法基础的读者,这本书能起到领路作用。阅读时建议边读边在Python环境中复现示例,遇到动态规划和回溯部分多画状态图与决策树,效果会更好。本书适合作为算法第一课的辅助教材,而非刷题冲刺的题解集。
适合谁读
适合
- 零基础或初学编程、想系统了解经典算法的读者
- 正在学习Python、希望通过实战巩固语法的自学者
- 高校非计算机专业选修算法课程的学生
- 需要为后续刷题打基础的转行学习者
不适合
- 已有算法竞赛经验、寻求高难度题解的读者
- 希望直接获取大量面试真题与最优解的人
- 需要深入算法复杂度证明与理论推导的研究者
阅读建议
- 每章先读例子理解思想,再动手敲一遍代码,不要只看不练。
- 动态规划与回溯章节建议手绘状态转移图和搜索树,再对照代码。
- 学完一章后合上书独立复写核心代码,检验是否真正掌握。
- 把书中示例改造成小项目或练习题,加深对算法适用场景的理解。
出版社简介
电子工业出版社
中国 · 成立于 1982 年
电子工业出版社是一家以电子信息及相关领域为出版特色的综合性出版社。从库内三千余种图书来看,其出版方向覆盖编程设计、人工智能、计算机综合、财经、摄影与社科等门类,既关注技术前沿,也兼顾大众阅读。代表图书包括《因子投资:方法与实践》《x86汇编语言:从实模式到保护模式》《RISC-V开放架构设计之道》《人工智能:语音识别理解与实践》《相控阵雷达技术》《雷达目标特性》及《100个Go语言典型错误》等,多围绕技术方法与工程实践展开。作者资源方面,有石川、李忠、王晓波、大卫·帕特森、安德鲁·沃特曼、余子濠等中外作者。受公开资料所限,暂不展开更多出版特色。
目录
- 版权信息
- 作者简介
- 内容简介
- 前言
- 第1章 算法之美
- 1.1 生活中的算法——猜数游戏
- 1.1.1 好玩的猜数游戏
- 1.1.2 游戏的秘密——二分搜索技术
- 1.1.3 猜数游戏算法实现
- 1.2 算法的指标——空间复杂度和时间复杂度
- 1.2.1 时间复杂度
- 1.2.2 空间复杂度
- 1.3 经典算法回顾——排序算法
- 1.3.1 冒泡排序
- 1.3.2 简单选择排序
- 1.3.3 直接插入排序
- 1.4 怎样才能学好算法
- 第2章 贪心算法
- 2.1 短浅的眼光——贪心
- 2.1.1 适当的贪心——坏事变好事
- 2.1.2 过度贪心——赔了夫人又折兵
- 2.1.3 为贪心加上限制
- 2.2 美丽心灵——哈夫曼编码
- 2.2.1 认识哈夫曼编码
- 2.2.2 如何设计哈夫曼编码
- 2.2.3 哈夫曼编码算法实现
- 2.3 带你去旅行——单源最短路径
- 2.3.1 如何最快到朋友家做客
- 2.3.2 从最短的第一条路开始分析
- 2.3.3 找到抵达朋友家的最短路径
- 2.3.4 Dijkstra算法实现
- 2.4 选择困难症——背包问题
- 2.4.1 如何装沙子赚更多的钱
- 2.4.2 海盗的智慧
- 2.4.3 背包问题算法实现
- 2.5 搬家师傅的烦恼——集装箱装载问题
- 2.5.1 如何装更多的物品
- 2.5.2 搬家师傅的十年经验
- 2.5.3 装载问题算法实现
- 第3章 分而治之算法
- 3.1 纵横捭阖,各个击破——分而治之
- 3.1.1 分而治之——把复杂的事情简单化
- 3.1.2 可分可治,缺一不可
- 3.1.3 合久必分,分久必合——治而合之
- 3.2 真币和假币——伪币问题
- 3.2.1 可恶的假币
- 3.2.2 先对一半的硬币进行考虑
- 3.2.3 找出硬币的规律
- 3.3 再谈排序算法(1)——合并排序
- 3.3.1 如何将分而治之思想应用到合并排序上
- 3.3.2 先对一半的数字进行考虑
- 3.3.3 合并排序算法实现
- 3.4 再谈排序算法(2)——快速排序
- 3.4.1 如何将分而治之思想应用到快速排序上
- 3.4.2 找到一个“分”的中心
- 3.4.3 快速排序算法实现
- 3.4.4 排序算法总结
- 3.5 累人的比赛——循环赛日程安排
- 3.5.1 最公平的比赛
- 3.5.2 如何设计循环赛
- 3.5.3 找出循环赛的排列规律
- 第4章 树算法
- 4.1 生活中的“树”
- 4.1.1 炎黄子孙,生生不息
- 4.1.2 学校的组织结构
- 4.1.3 操作系统的目录结构
- 4.2 一叶一菩提——二叉树的遍历
- 4.2.1 什么是二叉树
- 4.2.2 二叉树的前序遍历
- 4.2.3 二叉树的中序遍历
- 4.2.4 二叉树的后序遍历
- 4.2.5 二叉树的平层遍历
- 4.3 重建家谱图——二叉树的还原
- 4.3.1 什么是二叉树的还原
- 4.3.2 前序遍历和中序遍历还原家谱图
- 4.3.3 中序遍历和后序遍历还原家谱图
- 4.4 十年树木,百年树人——二叉树的高度
- 4.4.1 什么是树的高度
- 4.4.2 在树的遍历基础上增加高度信息
- 4.4.3 遍历树获得高度信息
- 4.5 寻根溯源——找到所有祖先结点
- 4.5.1 什么是树的祖先
- 4.5.2 在树的遍历基础上增加结点找到信息
- 4.5.3 遍历树获得所有祖先
- 第5章 图算法
- 5.1 生活中的“图”
- 5.1.1 城市的交通轨道
- 5.1.2 人与人之间的关系
- 5.1.3 互联网的连接
- 5.2 寻找所有的城市——有向图的遍历
- 5.2.1 什么是有向图
- 5.2.2 有向图的深度优先遍历
- 5.2.3 有向图的广度优先遍历
- 5.3 最短的管道——Kruskal算法
- 5.3.1 如何铺设最短的管道
- 5.3.2 什么是最小生成树
- 5.3.3 Kruskal算法的贪心思想
- 5.3.4 Kruskal算法实现
- 5.4 再谈最短的管道——Prim算法
- 5.4.1 基于管道的边和结点贪心的区别
- 5.4.2 Prim算法的贪心思想
- 5.4.3 Prim算法实现
- 5.5 多源最短路径——Floyd算法
- 5.5.1 朋友之间相互访问的最短路径
- 5.5.2 自上而下分析朋友之间的最短路径
- 5.5.3 自下而上迭代朋友之间的最短路径
- 5.5.4 Floyd算法实现
- 第6章 动态规划算法
- 6.1 长远的眼光——动态规划
- 6.1.1 时间倒流,改变历史
- 6.1.2 慎用贪心算法
- 6.1.3 强者恒强,弱者恒弱——最优子结构
- 6.2 智能的语言翻译——编辑距离
- 6.2.1 设计语言翻译系统
- 6.2.2 考虑最后一次编辑情况
- 6.2.3 自下而上进行距离编辑
- 6.3 智能的电梯——电梯优化
- 6.3.1 设计智能电梯
- 6.3.2 先考虑最后一次电梯停留的情况
- 6.3.3 自下而上计算电梯的停留过程
- 6.4 名字的相似度——最长公共子序列
- 6.4.1 外国人名的相似度
- 6.4.2 考虑最后一个字符比较情况
- 6.4.3 自下而上进行距离编辑
- 第7章 回溯法
- 7.1 现代计算机的福音——回溯法
- 7.1.1 让猴子打出《莎士比亚全集》
- 7.1.2 一条路走到黑——深度遍历
- 7.1.3 乱花渐欲迷人眼——搜索中的剪枝
- 7.2 不能攻击的皇后——8个皇后问题
- 7.2.1 一山不容二虎
- 7.2.2 如何设计8个皇后的解向量
- 7.2.3 搜索过程中的剪枝
- 7.3 绝望的小老鼠——迷宫中的小老鼠
- 7.3.1 上帝视角帮助小老鼠
- 7.3.2 小老鼠如何进行搜索
- 7.3.3 小老鼠的出逃之路
- 7.4 再谈0/1背包问题
- 7.4.1 背包问题回顾
- 7.4.2 还可以使用贪心算法求解吗
- 7.4.3 通过搜索求解背包问题
- 7.5 再谈集装箱装载问题
- 7.5.1 集装箱装载问题回顾
- 7.5.2 使用贪心算法求解而存在的问题
- 7.5.3 通过搜索求解装载问题
- 第8章 分支限界法
- 8.1 一步一个脚印——分支限界
- 8.1.1 步步为营——广度遍历
- 8.1.2 剪掉没有营养的分支
- 8.1.3 条条大路通罗马——和回溯法的区别
- 8.2 再谈迷宫中的小老鼠问题
- 8.2.1 迷宫中的小老鼠问题回顾
- 8.2.2 使用分支限界思路规划小老鼠的路径
- 8.2.3 小老鼠的出逃之路
- 8.3 三谈0/1背包问题
- 8.3.1 0/1背包问题回顾
- 8.3.2 使用分支限界的思路装船
- 8.3.3 背包的搜索过程
- 8.4 三谈集装箱装载问题
- 8.4.1 集装箱装载问题回顾
- 8.4.2 使用分支限界的思路装载集装箱
- 8.4.3 集装箱的装载过程
常见问题
没有编程基础能直接读这本书吗?
书的目标读者是初学者,但完全零编程基础读起来仍会吃力。建议先掌握Python基本语法、函数与循环,再进入本书,否则示例代码和调试过程会消耗大量精力。
这本书适合用来准备算法面试吗?
本书重在建立算法思想与动手能力,覆盖经典算法类型,可作为面试准备的基础阶段读物。但它不是题解集,缺少大量面试真题和复杂变形训练,冲刺阶段还需配合刷题。
书中的算法示例需要什么运行环境?
示例使用Python语言,安装标准Python解释器即可运行大部分代码。个别章节如涉及数据结构可视化或性能对比,可按书中说明自行扩展,无需额外商业软件。
读完这本书之后应该学什么?
可以进入刷题平台按专题练习,巩固贪心、动态规划、图算法等薄弱环节;也可学习数据结构与算法分析类教材,补充复杂度分析和更严谨的证明,形成完整知识体系。
读者评论
查询本书
本站为索引目录:「全网查询」由您发起、在您的浏览器中运行,所列入口均指向第三方站点,请自行判断可用性。
作者简介
李峰
作者 · 中国
李峰,公开资料有限,现有信息显示其为出版社编辑、湖北省作协会员,祖籍湖北红安,现居武汉。他长期从事文史与军事题材写作,1999年创作《龙腾太平洋》,2002年出版《决战朝鲜》,另著有《中国海魂》《决战长空》《空中骑兵营》《历史的变量》《天骄成吉思汗》等,叙事多聚焦战争与历史变迁。库内收录其作品11种,题材跨越文化、医学、考试、管理、教育与编程设计,既有早期中国社会与文化史、中医诊断与辨证论治歌诀白话解等传统学问普及读物,也涉及高可靠产品开发、Python算法入门及社区矫正案例,显示出跨领域编写的特点。