新書推薦:
《
我们终将老去:认识生命的第二阶段(比利时的“理查德·道金斯”,一位行为生物学家的老年有用论
》
售價:HK$
91.8
《
谁是窃书之人 日本文坛新锐作家深绿野分著 无限流×悬疑×幻想小说
》
售價:HK$
55.8
《
一个经济杀手的自白 第3版
》
售價:HK$
110.9
《
8秒按压告别疼痛
》
售價:HK$
87.4
《
津巴多时间心理学:挣脱束缚、改写命运的6种时间观
》
售價:HK$
77.3
《
大英博物馆东南亚简史
》
售價:HK$
177.0
《
纯粹·我只要少许
》
售價:HK$
80.6
《
投机苦旅:一位投机客的凤凰涅槃
》
售價:HK$
88.5
|
內容簡介: |
本书的目的是帮助初学者掌握编程中的基础算法,并通过Python语言进行实战演练,通过即学即练的方式掌握这些经典算法,让读者真正体会算法的美妙,成为读者学习算法的领路人。本书分为8章,涵盖的主要内容有算法之美,通过生活中的例子学习算法;贪心算法,选择当前的方案;分而治之算法,将复杂的问题拆分为简单的问题;树算法,围绕树结构的各种算法;图算法,围绕图结构的各种算法;动态规划,一种求解问题的强大工具;回溯法,深度优先遍历问题的解空间;分支限界法,广度优先遍历问题的解空间。
|
關於作者: |
李峰,本硕均就读于西北工业大学计算机学院,曾在韩国成均馆大学交流半年,CSDN博客专家,现就职于腾讯科技有限公司任高级工程师,工作期间,技术成果丰硕,多次获奖。
|
目錄:
|
目录第1章 算法之美11.1 生活中的算法——猜数游戏11.1.1 好玩的猜数游戏21.1.2 游戏的秘密——二分搜索技术21.1.3 猜数游戏算法实现41.2 算法的指标——空间复杂度和时间复杂度61.2.1 时间复杂度61.2.2 空间复杂度91.3 经典算法回顾——排序算法101.3.1 冒泡排序101.3.2 简单选择排序141.3.3 直接插入排序191.4 怎样才能学好算法23第2章 贪心算法242.1 短浅的眼光——贪心242.1.1 适当的贪心——坏事变好事252.1.2 过度贪心——赔了夫人又折兵252.1.3 为贪心加上限制252.2 美丽心灵——哈夫曼编码262.2.1 认识哈夫曼编码262.2.2 如何设计哈夫曼编码272.2.3 哈夫曼编码算法实现332.3 带你去旅行——单源短路径362.3.1 如何快到朋友家做客362.3.2 从短的条路开始分析372.3.3 找到抵达朋友家的短路径382.3.4 Dijkstra算法实现442.4 选择困难症——背包问题462.4.1 如何装沙子赚更多的钱472.4.2 海盗的智慧472.4.3 背包问题算法实现502.5 搬家师傅的烦恼——集装箱装载问题522.5.1 如何装更多的物品532.5.2 搬家师傅的十年经验532.5.3 装载问题算法实现55第3章 分而治之算法583.1 纵横捭阖,各个击破——分而治之583.1.1 分而治之——把复杂的事情简单化593.1.2 可分可治,缺一不可593.1.3 合久必分,分久必合——治而合之603.2 真币和——伪币问题613.2.1 可恶的623.2.2 先对一半的硬币进行考虑623.2.3 找出硬币的规律643.3 再谈排序算法(1)——合并排序663.3.1 如何将分而治之思想应用到合并排序上673.3.2 先对一半的数字进行考虑673.3.3 合并排序算法实现703.4 再谈排序算法(2)——快速排序743.4.1 如何将分而治之思想应用到快速排序上743.4.2 找到一个“分”的中心753.4.3 快速排序算法实现793.4.4 排序算法总结813.5 累人的比赛——循环赛日程安排823.5.1 公平的比赛823.5.2 如何设计循环赛833.5.3 找出循环赛的排列规律86第4章 树算法894.1 生活中的“树”894.1.1 炎黄子孙,生生不息904.1.2 学校的组织结构904.1.3 操作系统的目录结构914.2 一叶一菩提——二叉树的遍历924.2.1 什么是二叉树924.2.2 二叉树的前序遍历924.2.3 二叉树的中序遍历974.2.4 二叉树的后序遍历1024.2.5 二叉树的平层遍历1074.3 重建家谱图——二叉树的还原1114.3.1 什么是二叉树的还原1124.3.2 前序遍历和中序遍历还原家谱图1134.3.3 中序遍历和后序遍历还原家谱图1184.4 十年树木,百年树人——二叉树的高度1234.4.1 什么是树的高度1234.4.2 在树的遍历基础上增加高度信息1244.4.3 遍历树获得高度信息1264.5 寻根溯源——找到所有祖先结点1284.5.1 什么是树的祖先1284.5.2 在树的遍历基础上增加结点找到信息1294.5.3 遍历树获得所有祖先131第5章 图算法1345.1 生活中的“图”1345.1.1 城市的交通轨道1355.1.2 人与人之间的关系1365.1.3 互联网的连接1365.2 寻找所有的城市——有向图的遍历1375.2.1 什么是有向图1375.2.2 有向图的深度优先遍历1385.2.3 有向图的广度优先遍历1445.3 短的管道——Kruskal算法1495.3.1 如何铺设短的管道1495.3.2 什么是小生成树1505.3.3 Kruskal算法的贪心思想1515.3.4 Kruskal算法实现1565.4 再谈短的管道——Prim算法1585.4.1 基于管道的边和结点贪心的区别1595.4.2 Prim算法的贪心思想1595.4.3 Prim算法实现1625.5 多源短路径——Floyd算法1645.5.1 朋友之间相互访问的短路径1645.5.2 自上而下分析朋友之间的短路径1655.5.3 自下而上迭代朋友之间的短路径1665.5.4 Floyd算法实现172第6章 动态规划算法1766.1 长远的眼光——动态规划1766.1.1 时间倒流,改变历史1776.1.2 慎用贪心算法1776.1.3 强者恒强,弱者恒弱——子结构1786.2 智能的语言翻译——编辑距离1786.2.1 设计语言翻译系统1796.2.2 考虑后一次编辑情况1806.2.3 自下而上进行距离编辑1866.3 智能的电梯——电梯优化1966.3.1 设计智能电梯1966.3.2 先考虑后一次电梯停留的情况1976.3.3 自下而上计算电梯的停留过程2006.4 名字的相似度——长公共子序列2086.4.1 外国人名的相似度2086.4.2 考虑后一个字符比较情况2096.4.3 自下而上进行距离编辑213第7章 回溯法2197.1 现代计算机的福音——回溯法2207.1.1 让猴子打出《莎士比亚全集》2207.1.2 一条路走到黑——深度遍历2217.1.3 乱花渐欲迷人眼——搜索中的剪枝2237.2 不能攻击的皇后——8个皇后问题2247.2.1 一山不容二虎2247.2.2 如何设计8个皇后的解向量2267.2.3 搜索过程中的剪枝2287.3 绝望的小老鼠——迷宫中的小老鼠2417.3.1 上帝视角帮助小老鼠2417.3.2 小老鼠如何进行搜索2427.3.3 小老鼠的出逃之路2487.4 再谈0/1背包问题2537.4.1 背包问题回顾2537.4.2 还可以使用贪心算法求解吗2537.4.3 通过搜索求解背包问题2557.5 再谈集装箱装载问题2627.5.1 集装箱装载问题回顾2637.5.2 使用贪心算法求解而存在的问题2637.5.3 通过搜索求解装载问题264第8章 分支限界法2768.1 一步一个脚印——分支限界2778.1.1 步步为营——广度遍历2778.1.2 剪掉没有营养的分支2798.1.3 条条大路通罗马——和回溯法的区别2808.2 再谈迷宫中的小老鼠问题2818.2.1 迷宫中的小老鼠问题回顾2818.2.2 使用分支限界思路规划小老鼠的路径2838.2.3 小老鼠的出逃之路2878.3 三谈0/1背包问题2918.3.1 0/1背包问题回顾2928.3.2 使用分支限界的思路装船2948.3.3 背包的搜索过程3008.4 三谈集装箱装载问题3058.4.1 集装箱装载问题回顾3058.4.2 使用分支限界的思路装载集装箱3078.4.3 集装箱的装载过程314
|
|