新書推薦:
《
伟大民族:从路易十五到拿破仑的法国史(方尖碑)
》
售價:NT$
857.0
《
古今“书画同源”论辨——中国书法与中国绘画的关系问题兼中国画笔墨研究
》
售價:NT$
602.0
《
《日本文学史序说》讲演录
》
售價:NT$
332.0
《
无尽的海洋:美国海事探险与大众文化(1815—1860)
》
售價:NT$
454.0
《
治盗之道:清代盗律的古今之辨
》
售價:NT$
556.0
《
甲骨文丛书·剑桥世界暴力史(第一卷):史前和古代世界(套装全2册)
》
售價:NT$
959.0
《
甲骨文丛书·中华早期帝国:秦汉史的重估
》
售價:NT$
1367.0
《
欲望与家庭小说
》
售價:NT$
449.0
|
內容簡介: |
本书不仅讲解传统的算法设计策略和技巧,而且关注算法领域不断涌现的新概念、新方法和新应用,帮助读者把握技术热点及发展趋势。书中引入了降维技术、并行算法、随机算法、层次化存储结构算法和流算法等新内容,大量使用概率分析和随机化技术,并包含众多新颖的示例,特别是强调计算模型和计算环境,不再局限于理想化的随机存取机模型。全书内容简洁明快,并配有丰富的习题和拓展阅读资料,适合作为高等院校计算机相关专业的教材,也适合业界技术人员阅读参考。
|
關於作者: |
---作者简介---桑迪普?森(Sandeep Sen) 印度理工学院德里分校计算机科学与工程系教授,印度国家科学院院士,印度科学院院士,研究领域包括随机算法、计算几何、动态图算法和计算模型等。曾在IBM研究实验室、微软研究实验室、北卡罗莱纳大学教堂山分校等机构担任访问研究员。阿米特?库玛尔(Amit Kumar) 印度理工学院德里分校计算机科学与工程系教授,印度科学院院士,研究领域包括组合优化、调度、图论和聚类等。曾任职于贝尔实验室,并曾在微软印度研究院和IBM印度研究院担任访问教授。曾荣获2018年印度Shanti Swarup Bhtanagar数学科学奖。---译者简介---刘铎 于清华大学计算机科学与技术系获工学博士学位,现为北京交通大学软件学院副教授。主要研究方向为应用密码学、信息安全、组合算法的设计与分析。主持和参与、省部级科研项目多项,以第一作者身份在各类重要刊物和会议上发表论文20余篇,目前主持建设并讲授的“离散数学”课程被评为首批(线上)一流本科课程。
|
目錄:
|
出版者的话译者序前言致谢第1章 模型与分析1 1.1 计算斐波那契数1 1.2 快速乘法3 1.3 计算模型3 1.4 随机算法简介4 1.4.1 另一种随机算法6 1.5 其他计算模型8 1.5.1 外部存储器模型8 1.5.2 并行模型8 拓展阅读10 习题10第2章 概率基础与尾部不等式13 2.1 概率基础13 2.2 尾部不等式17 2.3 生成随机数20 2.3.1 生成具有任意分布的随机变量21 2.3.2 由顺序文件生成随机变量21 2.3.3 生成随机置换23 拓展阅读25 习题25第3章 热身问题27 3.1 计算最大公因子的欧几里得算法27 3.1.1 扩展欧几里得算法27 3.1.2 在密码学中的应用28 3.2 寻找第k小的元素28 3.2.1 选择随机的划分元29 3.2.2 中位数的中位数30 3.3 词的排序32 3.4 可归并的堆34 3.4.1 归并二项堆35 3.5 一个简单的半动态词典35 3.5.1 势能法与平摊分析36 3.6 下界37 拓展阅读39 习题39第4章 优化Ⅰ:蛮力法与贪婪策略42 4.1 启发式搜索方法42 4.1.1 博弈树44 4.2 贪婪算法的框架46 4.2.1 最大支撑树49 4.2.2 寻找最小权值子集49 4.2.3 一个调度问题50 4.3 最小支撑树算法的高效数据结构51 4.3.1 并查集的一种简单数据结构52 4.3.2 更快的方案53 4.3.3 增长最慢的函数54 4.3.4 整合55 4.3.5 仅做道路压缩56 4.4 其他不同形式的贪婪策略57 4.5 与贪婪策略的折中58 4.6 梯度下降59 4.6.1 应用63 拓展阅读65 习题66第5章 优化Ⅱ:动态规划69 5.1 背包问题70 5.2 上下文无关文法的解析71 5.3 最长单调子序列72 5.4 函数逼近74 5.5 最大似然估计的Viterbi算法75 5.6 树中的最大权独立集76 拓展阅读76 习题77第6章 查找80 6.1 跳表——一个简单的字典80 6.1.1 跳表的构造80 6.1.2 分析81 6.1.3 更强的尾部估计82 6.2 树堆:随机查找树83 6.3 全域哈希86 6.3.1 全域哈希函数的存在性88 6.4 完美哈希函数88 6.4.1 将期望界转换为最差情况的界89 6.5 一个复杂度为log log N的优先级队列89 拓展阅读91 习题92第7章 多维查找与几何算法94 7.1 区间树与范围树94 7.1.1 一维范围查找94 7.1.2 二维范围查找96 7.2 kd树97 7.3 优先级查找树99 7.4 平面凸包101 7.4.1 Jarvis March算法102 7.4.2 Graham扫描算法102 7.4.3 排序与凸包103 7.5 快速凸包算法104 7.5.1 分析105 7.5.2 期望运行时间106 7.6 使用持久化数据结构的点定位107 7.7 增量构造法109 拓展阅读111 习题111第8章 字符串匹配与指纹函数114 8.1 RabinKarp指纹字符串查找算法114 8.2 KMP算法117 8.2.1 KMP算法的分析120 8.2.2 模式分析120 8.3 字典树及其应用121 拓展阅读123 习题123第9章 快速傅里叶变换及其应用125 9.1 多项式求值与插值125 9.1.1 多项式相乘126 9.2 CooleyTukey算法126 9.3 蝶形网络128 9.4 SchonageStrassen快速乘法算法129 9.5 广义字符串匹配131 9.5.1 基于卷积的方法131 拓展阅读133 习题133第10章 图算法135 10.1 深度优先搜索135 10.2 深度优先搜索的应用138 10.2.1 强连通分支138 10.2.2 双连通分支140 10.3 道路问题142 10.3.1 BellmanFord单源最短道路算法143 10.3.2 Dijkstra单源最短道路算法143 10.3.3 任意两点之间的最短道路算法145 10.4 计算赋权图中的支撑子145 10.5 全局最小割148 10.5.1 收缩算法149 10.5.2 最小割的概率149 拓展阅读150 习题151第11章 最大流及其应用153 11.1 最大流的性质与算法155 11.1.1 最大流与最小割155 11.1.2 FordFulkerson算法156 11.1.3 EdmondKarp可增广道路策略157 11.1.4 单调性引理及迭代次数的界158 11.2 最大流的应用159 11.2.1 边不相交的道路159 11.2.2 二部图的匹配159 11.2.3 环流问题162 11.2.4 项目规划164 拓展阅读165 习题165第12章 NP完全性与近似算法168 12.1 分类与可归约性170 12.2 CookLevin定理172 12.3 常见的NP完全问题173 12.4 NP完全性的证明175 12.4.1 顶点覆盖及相关问题175 12.4.2 图的3着色问题176 12.4.3 背包问题及相关问题177 12.5 其他重要的复杂度类179 12.6 使用近似算法处理困难性181 12.6.1 最大背包问题182 12.6.2 最小集合覆盖183 12.6.3 几何旅行商问题184 12.6.4 3着色问题185 12.6.5 最大割问题185 拓展阅读186 习题186第13章 降维188 13.1 随机投影与JohnsonLindenstrauss引理188 13.2 高斯消元法191 13.3 奇异值分解及其应用192 13.3.1 矩阵代数与SVD定理192 13.3.2 使用SVD的低秩近似194 13.3.3 低秩近似的应用196 13.3.4 聚类问题197 13.3.5 SVD定理的证明199 拓展阅读200 习题200第14章 并行算法201 14.1 并行计算模型201 14.2 排序和比较问题202 14.2.1 寻找最大值202 14.2.2 排序204 14.3 并行前缀208 14.4 基本的图算法212 14.4.1 列表排名212 14.4.2 连通分支214 14.5 基本的几何算法216 14.6 并行模型之间的关系217 14.6.1 网格上的路由218 拓展阅读220 习题220第15章 层次化存储结构及高速缓存223 15.1 层次化存储模型223 15.2 矩阵转置224 15.2.1 矩阵乘法225 15.3 在外部存储器中进行排序226 15.3.1 我们可以改进这个算法吗227 15.4 高速缓存参数无关的算法设计228 15.4.1 参数无关的矩阵转置229 拓展阅读231 习题232第16章 流数据模型233 16.1 引言233 16.2 查找流中的频繁元素233 16.3 流中的相异元素236 16.4 频数矩问题及其应用238 16.4.1 均值的中位数241 16.4.2 二阶频数矩的特例241 16.5 流模型下界的证明243 拓展阅读244 习题245附录A 递推关系与生成函数247参考文献253
|
內容試閱:
|
过去20年间,我们在印度理工学院德里分校(IIT Delhi)任教,讲授了多门与算法设计和分析相关的本科生课程和研究生课程,本书即由其中的精华内容提炼而成。本书主要面向计算机科学(CS)专业的三年级本科生及入学第一学期的研究生。本书旨在为高阶算法课程提供支撑材料,在那些课程中,读者可以接触到越来越常用和适用的其他更现代的计算框架。快速浏览一下目录就会发现,书中近一半的主题都已为讲授算法的大量标准教科书所涵盖,例如Aho等人的著作[7]、Horowitz等人的著作[65]、Cormen等人的著作[37],以及较新的Kleinberg和Tardos的著作[81]、Dasgupta等人的著作[40]等。该领域的第一本经典教材是Aho等人的著作,他们认为“算法研究是计算机科学的核心”,并由此引入“算法”这一主题。在过去50年中,伴随着计算机科学的快速发展以及信息技术在更多领域中的应用,这一结论得到了更广泛的认可。由于算法具有这一基本属性,因此大约50年前发现的许多早期算法——例如快速傅里叶变换(FFT)、快速排序、Dijkstra最短道路算法等——依然被收录在(包括本书在内的)每一本教材中。 该书有影印版“Alfred V.Aho,John E.Hopcroft,Jeffrey D.Ullman著.计算机算法的设计与分析(英文版).机械工业出版社,2006”及中译本“(美)阿霍,(美)霍普克劳夫特,(美)乌尔曼著,黄林鹏,王德俊,张仕译.计算机算法的设计与分析.机械工业出版社,2007”。——译者注该书第2版有中译本“(美)霍洛维兹,(美)萨尼,(美)拉贾瑟克雷恩著,赵颖等译.计算机算法(C++语言描述)(第2版).清华大学出版社,2015”。——译者注 该书第3版有中译本“Thomas H.Cormen,Charles E.Leiserson,Ronald L.Rivest,Clifford Stein著,殷建平等译.算法导论(原书第3版).机械工业出版社,2012”。——译者注该书有影印版“Jon Kleinberg,va Tardos著.算法设计(英文影印版).清华大学出版社,2006”及中译本“Jon Kleinberg,va Tardos著,张立昂,屈婉玲译.算法设计.清华大学出版社,2007”。——译者注该书有英文注释版“Sanjoy Dasgupta,Christos H.Papadimitriou,Umesh Vazirani著,钱枫,邹恒明注释.算法概论(注释版).机械工业出版社,2008”及中译本“Sanjoy Dasgupta,Christos H.Papadimitriou,Umesh Vazirani著,王沛,唐扬斌,刘齐军译.算法概论.清华大学出版社,2008”。——译者注对于很多计算模式及从令人惊叹的新发现与不断变更的新工艺中涌现出来的重要技术,我们的理解有了一些重要而微妙的变化,这促使我们编写了这本关于算法的新书。作为教师,我们有责任向年轻一代传递正确的关注重点,使之得以持续享受这种批判性的智力活动,并对科研领域的拓展做出贡献。越来越多的人类活动中都有计算机的辅助,高效快速算法的重要性必须随之凸显,因为这是所有自动化处理过程的核心。我们常被迫使用设计不合理的算法和蛮力算法,而这些算法通常都是错误的,会导致错误的科学结论或不当的决策。因此,将算法设计与分析的一些形式化描述引入学校课程中,并给予这门课程与数学和科学教育同等的重视程度,使学生对这门学科有充分认识,这是非常重要的。读者对象本书适用于已掌握基本的编程技能以及基本的数据结构知识(如数组、堆栈、列表,甚至平衡树)的学生。基于对这门课程的长期教学经验,我们确信“算法设计”可能是一个看起来很难理解的科目,需要温和细腻的教学方式——这对于理解课程内容和维持学习兴趣都非常重要。在印度理工学院德里分校,计算机科学专业的本科生在学习完一门编程课程后将学习数据结构课程,该课程中包括一些基本的算法技术。本书面向具有这些知识背景的学生,因此我们不会正式地讲解任何基础数据结构——包括基本的图搜索算法,例如深度优先搜索(BFS)和广度优先搜索(DFS),而是侧重于已有知识的数学处理,并凸显对新思想和新技术所进行的简单明了的分析。印度理工学院德里分校计算机科学专业的本科生在学习这门课程之前,已经完成了离散数学和概率课程的学习。高效算法的设计和迅速甄别糟糕算法(无论是算法效率还是正确性方面的不足)的直觉是息息相关的。在本书中,尽管我们时刻强调严谨性,但还是刻意回避了需要漫长枯燥的形式化描述的主题和内容。将算法设计应用于具体计算环境是非常重要的,这正是本书所追求的一个重要方向。尽管对于在真实计算模型(例如并行模型和高速缓存层次化结构模型)下的算法设计的研究已经有悠久的历史,然而这些研究依然局限于非常理想化的环境及计算能力,以及部分特定的研究生课程的教学环境。目前在一般的基础性教材中,都默认或假定问题的运行环境是对存储器的访问成本一致且支持随机存储的机器(RAM)。然而我们坚信:算法设计不仅仅针对特定的问题,也针对特定的执行模型;如果忽视算法实现所依赖的具体计算环境,那么很多问题和算法将变得不够完整,(实际上)效率也将变得较低。因此,尝试在分布式模型上运行教科书式的数据结构或者在并行计算机上运行Dijkstra算法将会徒劳无功。综上所述,
|
|