新書推薦:
《
可转债——新手理财的极简工具
》
售價:HK$
65.0
《
新加坡教育:神话与现实
》
售價:HK$
96.3
《
“口袋中的世界史”第一辑·冷战中的危机事件
》
售價:HK$
291.2
《
绝美的奥伦堡蕾丝披肩编织
》
售價:HK$
177.0
《
狂飙年代:18世纪俄国的新文化和旧文化(第二卷)
》
售價:HK$
177.0
《
万有引力书系 纳粹亿万富翁 德国财富家族的黑暗历史
》
售價:HK$
109.8
《
中国常见植物野外识别手册:青海册
》
售價:HK$
76.2
《
三星堆对话古遗址(从三星堆出发,横跨黄河流域,长江流域,对话11处古遗址,探源多元一体的中华文明)
》
售價:HK$
87.4
|
編輯推薦: |
1.哥伦比亚大学计算机科学系教授多年教学经验的结晶,深入浅出带你了解计算机科学的核心与灵魂。2.内容丰富,逻辑清晰。细致讲解算法广泛的应用范围,夯实计算机基础。3.适合程序员学习的算法秘籍。能有效培养更缜密的思维,成功应对各种场合的技术面试。
|
內容簡介: |
“算法详解”系列图书共有4卷,本书是第3卷—贪心算法和动态规划。其中贪心算法主要包括调度、最小生成树、聚类、哈夫曼编码等,动态规划主要包括背包、序列对齐、最短路径、最佳搜索树等。本书的每一章均有小测验和章末习题,这将为读者的自我检查以及进一步学习提供方便。本书作者提供丰富而实用的资源,能够帮助读者提升算法思维能力。本书适合计算机专业的高校教师和学生、想要培养和训练算法思维、计算思维的IT专业人士,以及面试官和正在准备面试的应聘者阅读、参考。
|
關於作者: |
蒂姆·拉夫加登(Tim Roughgarden)是哥伦比亚大学计算机科学系的教授,之前曾任教于斯坦福大学计算机科学系,他从2004年开始教授和研究算法。本书是他的《算法详解》四部曲的第三卷,基于他从2012年开始定期举行的在线算法课程编写。
|
目錄:
|
目 录第 1章 贪心算法概述11.1 贪心算法设计范例11.1.1 算法设计范例11.1.2 贪心算法设计范例的特性21.2 一个调度问题41.2.1 问题的设定41.2.2 竞争时间41.2.3 目标函数51.2.4 小测验1.1的答案61.3 开发一种贪心算法61.3.1 两种特殊情况71.3.2 贪心算法之间的竞争71.3.3 小测验1.2~1.3的答案101.4 正确性证明111.4.1 没有平局时的情况:高层计划121.4.2 在相邻逆序对中交换作业131.4.3 成本收益分析141.4.4 处理平局的情况151.4.5 小测验1.4~1.5的答案171.5 本章要点181.6 章末习题19第 2章 哈夫曼编码212.1 编码212.1.1 固定长度的二进制编码212.1.2 可变长度的编码222.1.3 非前缀编码232.1.4 非前缀编码的优点232.1.5 问题定义242.1.6 小测验2.1~2.2的答案252.2 编码和树262.2.1 3个例子262.2.2 什么样的树表示非前缀编码282.2.3 问题定义(精练版)282.3 哈夫曼的贪心算法292.3.1 通过连续的归并创建树292.3.2 哈夫曼的贪心准则322.3.3 伪码322.3.4 例子342.3.5 一个更复杂的例子342.3.6 运行时间372.3.7 小测验2.3的答案37*2.4 正确性证明382.4.1 高层计划382.4.2 细节392.5 本章要点442.6 章末习题45第3章 最小生成树473.1 问题定义473.1.1 图473.1.2 生成树483.1.3 小测验3.1的答案503.2 Prim算法513.2.1 例子513.2.2 伪码533.2.3 简单的实现55*3.3 通过堆提升Prim算法的速度563.3.1 探求接近线性的运行时间563.3.2 堆数据结构563.3.3 如何在Prim算法中使用堆573.3.4 基于堆的实现的伪码593.3.5 运行时间分析613.3.6 小测验3.3的答案61*3.4 Prim算法:正确性证明623.4.1 最小瓶颈属性623.4.2 生成树的一些有趣结论653.4.3 定理3.4(MBP意味着MST)的证明673.4.4 综合运用693.5 Kruskal算法693.5.1 例子693.5.2 Kruskal算法的伪码713.5.3 Kruskal算法的简单实现72*3.6 通过合并查找对Kruskal算法进行加速733.6.1 合并查找数据结构733.6.2 基于合并查找的实现的伪码753.6.3 基于合并查找的实现的运行时间分析763.6.4 合并查找的快速有余而严谨不足的实现:父图773.6.5 小测验3.5~3.7的答案82*3.7 Kruskal算法的正确性证明833.8 应用:单链集群853.8.1 集群853.8.2 自底向上的集群863.9 本章要点883.10 章末习题89第4章 动态规划概述934.1 加权独立集合问题944.1.1 问题定义944.1.2 自然的贪心算法失败了954.1.3 分治算法可行吗964.1.4 小测验4.1~4.2的答案974.2 路径图的WIS问题的线性时间算法984.2.1 最优子结构和推导公式984.2.2 一种不成熟的递归方法1004.2.3 使用缓存的递归算法1014.2.4 一种迭代式的自底向上的实现1034.2.5 小测验4.3~4.4的答案1044.3 一种重建算法1054.4 动态规划的原则1074.4.1 3个步骤的配方1074.4.2 子问题的期望属性1084.4.3 一个可重复的思维过程1094.4.4 动态规划和分治算法的区别1094.4.5 为什么叫“动态规划”1104.5 背包问题1114.5.1 问题定义1114.5.2 最优子结构和推导公式1134.5.3 子问题1154.5.4 一种动态规划算法1154.5.5 例子1174.5.6 重建1174.5.7 小测验4.5~4.6的答案1184.6 本章要点1194.7 章末习题120第5章 高级动态规划1235.1 序列对齐1235.1.1 驱动力1235.1.2 问题定义1245.1.3 最优子结构1265.1.4 推导公式1295.1.5 子问题1295.1.6 一种动态规划算法1305.1.7 重新构建1315.1.8 小测验5.1~5.3的答案132*5.2 最优二叉搜索树1335.2.1 二叉搜索树回顾1345.2.2 平均搜索时间1355.2.3 问题定义1365.2.4 最优子结构1375.2.5 推导公式1415.2.6 子问题1425.2.7 一种动态规划算法1435.2.8 改善运行时间1455.2.9 小测验5.4~5.5的答案1455.3 本章要点1465.4 章末习题147第6章 再论最短路径算法1506.1 边长可能为负的最短路径1506.1.1 单源最短路径问题1506.1.2 负环1526.1.3 小测验6.1的答案1546.2 Bellman-Ford算法1546.2.1 子问题1556.2.2 最优子结构1566.2.3 推导公式1586.2.4 什么时候应该停止1596.2.5 伪码1606.2.6 Bellman-Ford算法的例子1616.2.7 Bellman-Ford算法的运行时间1646.2.8 Internet路由1656.2.9 小测验6.2~6.3的答案1656.3 所有顶点对的最短路径问题1666.3.1 问题定义1666.3.2 简化为单源最短路径1676.3.3 小测验6.4的答案1686.4 Floyd-Warshall算法1686.4.1 子问题1686.4.2 最优子结构1706.4.3 伪码1726.4.4 检测负环1746.4.5 Floyd-Warshall算法的总结和开放性问题1756.4.6 小测验6.5~6.6的答案1766.5 本章要点1776.6 章末习题178附录 章末习题答案节选180后记 算法设计工作指南187
|
|