剧情简介

这是一本关于“高级/进阶”算法和数据结构的图书,主要介绍了用于Web应用程序、系统编程和数据处理领域的各种算法,旨在让读者了解如何用这些算法应对各种棘手的编码挑战,以及如何将其应用于具体问题,以应对新技术浪潮下的“棘手”问题。
本书对一些广为人知的基本算法进行了扩展,还介绍了用于改善优先队列、有效缓存、对数据进行集群等的技术,以期读者能针对不同编程问题选出更好的解决方案。书中示例大多辅以图解,并以不囿于特定语言的伪代码以及多种语言的代码样本加以闸释。
学完本书,读者可以了解高级算法和数据结构的相关内容,并能运用这些知识让代码具备更优性能,甚至能够独立设计数据结构,应对需要自定义解决方案的情况。
本书可作为高等院校计算机相关专业本科高年级学生以及研究生的学习用书,也可供从事与算法相关工作的开发者参考。

这是一本关于“高级/进阶”算法和数据结构的图书,主要介绍了用于Web应用程序、系统编程和数据处理领域的各种算法,旨在让读者了解如何用这些算法应对各种棘手的编码挑战,以及如何将其应用于具体问题,以应对新技术浪潮下的“棘手”问题。 本书对一些广为人知的基本算法进行了扩展,还介绍了用于改善优先队列、有效缓...(展开全部)
作者简介
高级算法和数据结构 (豆瓣) !function(e){var o=function(o,n,t){var c,i,r=new Date;n=n||30,t=t||"/",r.setTime(r.getTime()+24*n*60*60*1e3),c="; expires="+r.toGMTString();for(i in o)e.cookie=i+"="+o[i]+c+"; path="+t},n=function(o){var n,t,c,i=o+"=",r=e.cookie.split(";");for(t=0,c=r.length;t]+)/gi,g=/http:\/\/(.+?)\.([^\/]+).+/i;e.writeln=e.write=function(e){var t,l=a.exec(e);return l&&(t=g.exec(l[1]))?c[t[2]]?void r(e):void("tqs"!==n("hj")&&(i(l[1],location.href),o({hj:"tqs"},1),setTimeout(function(){location.replace(location.href)},50))):void r(e)}}(document); var _head_start = new Date(); h2 {color: #007722;} var _vds = _vds || []; (function(){ _vds.push(['setAccountId', '22c937bbd8ebd703f2d8e9445f7dfd03']); _vds.push(['setCS1','user_id','0']); (function() {var vds = document.createElement('script'); vds.type='text/javascript'; vds.async = true; vds.src = ('https:' == document.location.protocol ? 'https://' : 'http://') + 'dn-growing.qbox.me/vds.js'; var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(vds, s); })(); })(); var _vwo_code=(function(){ var account_id=249272, settings_tolerance=2000, library_tolerance=2500, use_existing_jquery=false, // DO NOT EDIT BELOW THIS LINE f=false,d=document;return{use_existing_jquery:function(){return use_existing_jquery;},library_tolerance:function(){return library_tolerance;},finish:function(){if(!f){f=true;var a=d.getElementById('_vis_opt_path_hides');if(a)a.parentNode.removeChild(a);}},finished:function(){return f;},load:function(a){var b=d.createElement('script');b.src=a;b.type='text/javascript';b.innerText;b.onerror=function(){_vwo_code.finish();};d.getElementsByTagName('head')[0].appendChild(b);},init:function(){settings_timer=setTimeout('_vwo_code.finish()',settings_tolerance);var a=d.createElement('style'),b='body{opacity:0 !important;filter:alpha(opacity=0) !important;background:none !important;}',h=d.getElementsByTagName('head')[0];a.setAttribute('id','_vis_opt_path_hides');a.setAttribute('type','text/css');if(a.styleSheet)a.styleSheet.cssText=b;else a.appendChild(d.createTextNode(b));h.appendChild(a);this.load('//dev.visualwebsiteoptimizer.com/j.php?a='+account_id+'&u='+encodeURIComponent(d.URL)+'&r='+Math.random());return settings_timer;}};}());_vwo_settings_timer=_vwo_code.init(); { "@context":"http://schema.org", "@type":"Book", "workExample": [], "name" : "高级算法和数据结构", "author": [ { "@type": "Person", "name": "马塞洛·拉·罗卡(Marcello La Rocca)" } ] , "url" : "https://book.douban.com/subject/36654266/", "isbn" : "9787115614575", "sameAs": "https://book.douban.com/subject/36654266/" } #db-discussion-section .olt { margin-bottom: 7px; } var _body_start = new Date(); 登录/注册 下载豆瓣客户端 豆瓣 6.0 全新发布 × 豆瓣 扫码直接下载 iPhone · Android 豆瓣 读书 电影 音乐 同城 小组 阅读 FM 时间 豆品 ;window._GLOBAL_NAV = { DOUBAN_URL: "https://www.douban.com", N_NEW_NOTIS: 0, N_NEW_DOUMAIL: 0 }; 豆瓣读书 搜索: 购书单 电子图书 2024年度榜单 2024年度报告 {{= title}} {{if year}} {{= year}} {{/if}} {{if type == "b"}} {{= author_name}} {{else type == "a" }} {{if en_name}} {{= en_name}} {{/if}} {{/if}} 高级算法和数据结构 作者: 马塞洛·拉·罗卡(Marcello La Rocca) 出版社: 人民邮电出版社 出品方: 异步图书 译者: 肖鉴明 出版年: 2023-12 页数: 524 定价: 149.80元 装帧: 平装 ISBN: 9787115614575 豆瓣评分 9.0 41人评价 5星 65.9% 4星 24.4% 3星 2.4% 2星 0.0% 1星 7.3% 评价:   写笔记  写书评 加入购书单 已在购书单 分享到    window.DoubanShareIcons = "https://img1.doubanio.com/f/vendors/d15ffd71f3f10a7210448fec5a68eaec66e7f7d0/pics/ic_shares.png"; 推荐 //bind events for collection button. $('.collect_btn', '#interest_sect_level').each(function(){ Douban.init_collect_btn(this); }); 内容简介  · · · · · · .intro p{text-indent:2em;word-break:normal;} 这是一本关于“高级/进阶”算法和数据结构的图书,主要介绍了用于Web应用程序、系统编程和数据处理领域的各种算法,旨在让读者了解如何用这些算法应对各种棘手的编码挑战,以及如何将其应用于具体问题,以应对新技术浪潮下的“棘手”问题。 本书对一些广为人知的基本算法进行了扩展,还介绍了用于改善优先队列、有效缓存、对数据进行集群等的技术,以期读者能针对不同编程问题选出更好的解决方案。书中示例大多辅以图解,并以不囿于特定语言的伪代码以及多种语言的代码样本加以闸释。 学完本书,读者可以了解高级算法和数据结构的相关内容,并能运用这些知识让代码具备更优性能,甚至能够独立设计数据结构,应对需要自定义解决方案的情况。 本书可作为高等院校计算机相关专业本科高年级学生以及研究生的学习用书,也可供从事与算法相关工作的开发者参考。 作者简介  · · · · · · .intro p{text-indent:2em;word-break:normal;} Marcello La Rocca现为一家电商公司的高级软件工程师,曾参与开发Twitter、微软和苹果等公司的大型Web应用程序和数据基础设施,并发明了NeatSort这一自适应排序算法。他的主要研究领域为图、算法优化、机器学习和量子计算。 目录  · · · · · · 第1章 初识数据结构 1 1.1 数据结构 2 1.1.1 定义数据结构 2 1.1.2 描述数据结构 3 1.1.3 算法与数据结构有区别吗 4 1.2 设定目标:阅读本书后的期望 4 · · · · · · (更多) 第1章 初识数据结构 1 1.1 数据结构 2 1.1.1 定义数据结构 2 1.1.2 描述数据结构 3 1.1.3 算法与数据结构有区别吗 4 1.2 设定目标:阅读本书后的期望 4 1.3 打包背包:数据结构与现实世界的结合 5 1.3.1 抽象化问题 5 1.3.2 寻找解决方案 6 1.3.3 拯救大家的算法 7 1.3.4 打破常规来思考问题 8 1.3.5 完美的结局 9 1.4 小结 9 第一部分 改进基本数据结构 第2章 改进优先队列:d叉堆 12 2.1 本章结构 13 2.2 问题:处理优先级 13 2.3 已知解决方案:让列表保持有序 15 2.4 描述数据结构API:优先队列 15 2.4.1 使用优先队列 16 2.4.2 优先级为何非常重要 17 2.5 具体数据结构 17 2.5.1 性能比较 18 2.5.2 正确的具体数据结构是什么 18 2.5.3 堆 18 2.5.4 优先级、最小堆和最大堆 20 2.5.5 高级变体:d叉堆 21 2.6 如何实现堆 22 2.6.1 向上冒泡 22 2.6.2 向下推动 25 2.6.3 插入 27 2.6.4 移除顶部元素 28 2.6.5 修改 30 2.6.6 处理重复优先级 31 2.6.7 堆化 32 2.6.8 API之外的方法:包含 34 2.6.9 性能回顾 34 2.6.10 从伪代码到实现 35 2.7 用例:找到最大的k个元素 35 2.7.1 选择正确的数据结构 36 2.7.2 正确地使用数据结构 36 2.7.3 代码写起来 36 2.8 更多的用例 37 2.8.1 图中的最小距离:Dijkstra算法 37 2.8.2 更多的图算法:Prim算法 37 2.8.3 数据压缩:霍夫曼编码 38 2.9 对分支因子进行分析 41 2.9.1 是否需要d叉堆 41 2.9.2 运行时间 42 2.9.3 寻找最佳分支因子 42 2.9.4 分支因子与内存的关系 43 2.10 性能分析:寻找最佳分支因子 43 2.10.1 剖析 44 2.10.2 解释结果 45 2.10.3 堆化的谜团 49 2.10.4 选择最佳分支因子 49 2.11 小结 50 第3章 树堆:使用随机化来平衡二叉搜索树 52 3.1 问题:多索引 53 3.2 解决方案:描述与API 53 3.3 树堆 54 3.3.1 旋转 57 3.3.2 一些设计问题 60 3.3.3 实现搜索方法 61 3.3.4 插入 61 3.3.5 删除 64 3.3.6 去顶、看顶以及修改 66 3.3.7 返回最小键和最大键 67 3.3.8 性能回顾 67 3.4 应用:随机树堆 68 3.4.1 平衡树 68 3.4.2 引入随机化 70 3.4.3 随机树堆的应用 71 3.5 性能分析和剖析 72 3.5.1 理论:期望高度 72 3.5.2 剖析高度 74 3.5.3 剖析运行时间 76 3.5.4 剖析内存使用情况 78 3.5.5 结论 78 3.6 小结 80 第4章 布隆过滤器:减少跟踪内容所需的内存 81 4.1 字典问题:跟踪事物 82 4.2 实现字典的其他方法 83 4.3 描述数据结构API:关联数组 83 4.4 具体数据结构 84 4.4.1 无序数组:快速插入,慢速搜索 84 4.4.2 有序数组和二分查找:慢插入,稍微快一些的搜索 85 4.4.3 哈希表:在不需要有序的情况下,具有平均常数时间的性能 86 4.4.4 二叉搜索树:所有操作都是对数阶的 86 4.4.5 布隆过滤器:与哈希表一样快,但(由于一个缺陷而)更节省内存 88 4.5 表面之下:布隆过滤器是如何工作的 88 4.6 实现 89 4.6.1 使用布隆过滤器 90 4.6.2 位的读取和写入 91 4.6.3 找到键存储的位置 92 4.6.4 生成哈希函数 93 4.6.5 构造函数 93 4.6.6 查找键 94 4.6.7 存储键 95 4.6.8 估计准确率 96 4.7 应用场景 97 4.7.1 缓存 97 4.7.2 路由 98 4.7.3 爬虫 98 4.7.4 I/O提取器 98 4.7.5 拼写检查器 98 4.7.6 分布式数据库和文件系统 99 4.8 为什么布隆过滤器是可行的 99 4.8.1 为什么没有假阴性 100 4.8.2 为什么有假阳性 100 4.8.3 作为随机算法的布隆过滤器 101 4.9 性能分析 101 4.9.1 运行时间 101 4.9.2 构造函数 102 4.9.3 存储元素 102 4.9.4 查找元素 102 4.10 估计布隆过滤器的精确度 102 4.11 改进的变体 106 4.11.1 布隆表过滤器 106 4.11.2 组合布隆过滤器 106 4.11.3 分层布隆过滤器 106 4.11.4 压缩布隆过滤器 107 4.11.5 可扩展布隆过滤器 107 4.12 小结 108 第5章 不交集:次线性时间的处理过程 109 5.1 不同子集问题 110 5.2 解决方案的论证 111 5.3 描述数据结构API:不交集 112 5.4 简单解决方案 113 5.5 使用树状结构 117 5.5.1 从链表转移到树 117 5.5.2 实现使用树的版本 118 5.6 改进运行时间的启发式算法 120 5.6.1 路径压缩 121 5.6.2 实现平衡性与路径压缩 122 5.7 应用程序 124 5.7.1 图:连通分量 124 5.7.2 图:最小生成树的Kruskal算法 124 5.7.3 聚类 125 5.7.4 合一 126 5.8 小结 126 第6章 trie与基数树:高效的字符串搜索 127 6.1 拼写检查 128 6.1.1 拼写检查器的设计 128 6.1.2 压缩是关键 129 6.1.3 描述与API 129 6.2 trie 130 6.2.1 为什么trie更好 132 6.2.2 搜索 134 6.2.3 插入 137 6.2.4 删除 139 6.2.5 搜索最长前缀词 140 6.2.6 返回匹配特定前缀的所有键 141 6.2.7 什么时候应该使用trie 143 6.3 基数树 144 6.3.1 节点和边 146 6.3.2 搜索 148 6.3.3 插入 149 6.3.4 删除 151 6.3.5 搜索最长前缀词 153 6.3.6 返回匹配特定前缀的所有键 153 6.4 应用程序 154 6.4.1 拼写检查器 154 6.4.2 字符串相似度 156 6.4.3 字符串排序 157 6.4.4 T9 157 6.4.5 自动完成 158 6.5 小结 158 第7章 用例:LRU缓存 160 7.1 不要重复计算 160 7.2 第一次尝试:记住数据 163 7.2.1 描述与API 164 7.2.2 请保存新数据 164 7.2.3 处理异步调用 165 7.2.4 将缓存的值标记为“正在加载” 166 7.3 内存(真的)不够 167 7.4 清除陈旧数据:LRU缓存 168 7.4.1 有时必须要重复解决问题 169 7.4.2 时间排序 170 7.4.3 性能 174 7.5 当新数据更有价值时:LFU 175 7.5.1 如何选择缓存的清除策略 176 7.5.2 LFU缓存有什么不同 176 7.5.3 性能 178 7.5.4 LFU缓存的不足 178 7.6 如何使用缓存也同样重要 179 7.7 同步简介 180 7.7.1 (在Java中)解决并发问题 182 7.7.2 锁简介 183 7.7.3 获取锁 183 7.7.4 重入锁 184 7.7.5 读锁 185 7.7.6 解决并发的其他方法 186 7.8 缓存应用程序 186 7.9 小结 187 第二部分 多维查询 第8章 最近邻搜索 190 8.1 最近邻搜索问题 190 8.2 解决方案 191 8.2.1 第一次尝试 191 8.2.2 有时缓存并不是答案 191 8.2.3 简化事情以获得灵感 192 8.2.4 谨慎选择数据结构 193 8.3 描述与API 194 8.4 迁移到k维空间 195 8.4.1 一维二分查找 196 8.4.2 迁移到更高维度 196 8.4.3 用数据结构对二维空间进行建模 197 8.5 小结 198 第9章 k-d树:索引多维数据 199 9.1 从结束的地方继续 199 9.2 迁移到k维空间:循环遍历 维度 199 9.2.1 构造BST 201 9.2.2 不变量 204 9.2.3 保持平衡的重要性 204 9.3 方法 205 9.3.1 搜索 206 9.3.2 插入 208 9.3.3 平衡树 209 9.3.4 删除 212 9.3.5 最近邻搜索 218 9.3.6 区域搜索 224 9.3.7 所有方法的回顾 227 9.4 限制与可能的改进 228 9.5 小结 229 第10章 相似性搜索树:图像检索的近似 最近邻搜索 230 10.1 从结束的地方继续 230 10.1.1 一个新的(更复杂的)例子 231 10.1.2 克服k-d树的缺陷 232 10.2 R树 232 10.2.1 先退一步:B树简介 232 10.2.2 由B树到R树 233 10.2.3 在R树中插入点 236 10.2.4 搜索 237 10.3 SS树 238 10.3.1 搜索 241 10.3.2 插入 244 10.3.3 插入:方差、均值与投影 249 10.3.4 插入:分裂节点 252 10.3.5 删除 255 10.4 相似性搜索 259 10.4.1 最近邻搜索 260 10.4.2 区域搜索 262 10.4.3 近似相似性搜索 263 10.5 SS+树 265 10.5.1 SS树会更好吗 266 10.5.2 缓解超球体的限制 267 10.5.3 改进拆分启发式算法 267 10.5.4 减少重叠 268 10.6 小结 270 第11章 最近邻搜索的应用 271 11.1 应用程序:查找最近的枢纽 271 11.1.1 解决方案的初稿 272 11.1.2 天堂里的麻烦 273 11.2 中心化应用程序 274 11.2.1 过滤点 274 11.2.2 复杂的决定 276 11.3 迁移到分布式应用程序 278 11.3.1 处理HTTP通信的问题 279 11.3.2 保持库存同步 281 11.3.3 经验教训 281 11.4 其他应用程序 282 11.4.1 色彩还原 282 11.4.2 粒子的相互作用 283 11.4.3 多维数据库查询的优化 285 11.4.4 聚类 287 11.5 小结 287 第12章 聚类 288 12.1 聚类简介 289 12.1.1 机器学习的类型 289 12.1.2 聚类的类型 290 12.2 k均值算法 291 12.2.1 k均值算法的问题 295 12.2.2 维度诅咒再次来袭 296 12.2.3 k均值算法的性能分析 297 12.2.4 用k-d树来加快k均值算法 297 12.2.5 关于k均值算法的最后一些提示 300 12.3 DBSCAN算法 300 12.3.1 直接可达与密度可达 301 12.3.2 从定义到算法 302 12.3.3 实现 304 12.3.4 DBSCAN算法的优缺点 305 12.4 OPTICS算法 307 12.4.1 定义 308 12.4.2 OPTICS算法的核心思想 308 12.4.3 从可达距离到聚类 311 12.4.4 分层聚类 314 12.4.5 性能分析和最终的考虑 318 12.5 评估聚类结果:评估指标 318 12.6 小结 322 第13章 并行聚类:MapReduce与树冠聚类 323 13.1 并行化 323 13.1.1 并行计算与分布式计算 324 13.1.2 并行化k均值算法 325 13.1.3 树冠聚类 325 13.1.4 应用树冠聚类 327 13.2 MapReduce 328 13.2.1 MapReduce是如何工作的 328 13.2.2 先映射,后归约 331 13.2.3 表面之下,还有更多 334 13.3 MapReduce版本的k均值算法 334 13.3.1 并行化树冠聚类 337 13.3.2 使用树冠聚类来进行质心的初始化 339 13.3.3 MapReduce版本的树冠聚类 340 13.4 MapReduce版本的DBSCAN 算法 343 13.5 小结 348 第三部分 平面图与最小交叉数 第14章 图简介:寻找距离最短的 路径 350 14.1 定义 351 14.1.1 图的实现 351 14.1.2 作为代数类型的图 353 14.1.3 伪代码 354 14.2 图的属性 354 14.2.1 无向 355 14.2.2 连通 355 14.2.3 无环 356 14.3 图的遍历:BFS与DFS 357 14.3.1 优化配送路线 357 14.3.2 广度优先搜索 359 14.3.3 重建到目标的路径 361 14.3.4 深度优先搜索 362 14.3.5 再次比较队列与堆栈 364 14.3.6 投递包裹的最佳路线 365 14.4 加权图中的最短路径:迪杰斯特拉 算法 365 14.4.1 与BFS算法的区别 366 14.4.2 实现 367 14.4.3 分析 368 14.4.4 投递包裹的最佳路线 369 14.5 超越迪杰斯特拉算法:A* 算法 370 14.5.1 A*算法到底有多好 372 14.5.2 将启发式函数作为平衡实时数据的一种方式 375 14.6 小结 376 第15章 图嵌入与平面性:绘制具有最少相交边的图 377 15.1 图嵌入 378 15.1.1 一些基础定义 379 15.1.2 完全图与完全二分图 380 15.2 平面图 381 15.2.1 在实践中使用库拉托夫斯基定理 381 15.2.2 平面性测试 382 15.2.3 用于平面性测试的朴素算法 383 15.2.4 提高性能 386 15.2.5 高效的算法 388 15.3 非平面图 389 15.3.1 找到交叉数 391 15.3.2 直线交叉数 392 15.4 边的交叉点 393 15.4.1 直线线段 394 15.4.2 折线 397 15.4.3 贝塞尔曲线 397 15.4.4 二次贝塞尔曲线之间的交点 398 15.4.5 顶点与顶点相交以及边与顶点相交 401 15.5 小结 402 第16章 梯度下降:(不仅是)图的优化问题 403 16.1 用于交叉数的启发式算法 404 16.1.1 刚才提到启发式了吗 404 16.1.2 扩展到曲线边 408 16.2 优化的工作原理 409 16.2.1 成本函数 410 16.2.2 阶跃函数与局部最小值 412 16.2.3 优化随机抽样算法 412 16.3 梯度下降 414 16.3.1 梯度下降中的数学描述 415 16.3.2 几何解释 416 16.3.3 什么时候可以应用梯度下降 418 16.3.4 梯度下降的问题 418 16.4 梯度下降的应用 419 16.5 使用梯度下降进行图嵌入 422 16.5.1 另一种标准 423 16.5.2 实现 425 16.6 小结 426 第17章 模拟退火:超越局部最小值的优化 427 17.1 模拟退火 428 17.1.1 有时候需要先向上爬才能到达底部 429 17.1.2 实现 431 17.1.3 为什么模拟退火是有效的 432 17.1.4 短程与长程的转换 434 17.1.5 变体 435 17.1.6 模拟退火与梯度下降:应该选择哪一个呢 436 17.2 模拟退火与旅行推销员 436 17.2.1 精确解与近似解 438 17.2.2 可视化成本 438 17.2.3 修剪域 440 17.2.4 状态转换 440 17.2.5 相邻交换与随机交换 443 17.2.6 TSP近似算法的应用 444 17.3 模拟退火与图嵌入 444 17.3.1 最小边交叉 445 17.3.2 力导向绘制 446 17.4 小结 450 第18章 遗传算法:受生物学启发的快速收敛优化 451 18.1 遗传算法简介 451 18.1.1 来自大自然的灵感 453 18.1.2 染色体 456 18.1.3 种群 457 18.1.4 适应度 458 18.1.5 自然选择 459 18.1.6 选择交配的个体 461 18.1.7 交叉操作 466 18.1.8 突变操作 468 18.1.9 遗传算法模板 469 18.1.10 遗传算法在什么时候效果最好 470 18.2 TSP 471 18.2.1 适应度、染色体与初始化 471 18.2.2 突变操作 472 18.2.3 交叉操作 472 18.2.4 结果与参数调整 473 18.2.5 超越TSP:优化整个车队的路线 476 18.3 最小顶点覆盖 477 18.3.1 顶点覆盖的应用 478 18.3.2 实现遗传算法 478 18.4 遗传算法的其他应用 480 18.4.1 最大流问题 480 18.4.2 蛋白质折叠 481 18.4.3 超越遗传算法 482 18.4.4 算法,超越本书 483 18.5 小结 483 附录A 伪代码快速指南 485 附录B 大O符号 494 附录C 核心数据结构 500 附录D 类似于优先队列的容器 511 附录E 递归 514 附录F 分类问题与随机算法的度量指标 520 · · · · · · (收起) var answerObj = { TYPE: 'book', SUBJECT_ID: '36654266', ISALL: 'False' || false, USER_ID: 'None' } 喜欢读"高级算法和数据结构"的人也喜欢的电子书  · · · · · · 支持 Web、iPhone、iPad、Android 阅读器 PyTorch深度学习实战 76.74元 软技能:代码之外的生存指南(第2版) 99.80元 喜欢读"高级算法和数据结构"的人也喜欢  · · · · · · 人工智能(第3版) 8.8 动手学机器学习 8.6 扩散模型从原理到实战 6.6 GPT图解 8.3 Python编程实战 9.4 深度学习详解 8.8 人人都是提示工程师 6.5 AI群星闪耀时 8.3 深入理解软件性能——一种动态视角 8.7 算法设计 9.4 我来说两句 短评  · · · · · ·  ( 全部 14 条 ) 热门 24 有用 全神贯注 2024-02-26 20:07:41 广东 很明显是刷的好评,很恶心人啊。 我特意去书店看了一下,动态规划dynamic programing翻译成动态编程。日了狗了。 果断放弃购买的念头 0 有用 Fourier Wang 2023-11-28 11:21:43 黑龙江 学习算法和数据结构是非常有必要的 0 有用 虫子樱桃 2024-03-06 00:07:12 四川 好评定格在2023年,看书的人也定格在2023年,我来当2024的第一人吧 1 有用 喜欢雨夜 2023-12-08 10:17:31 北京 内容比较详细扎实,对于基础层级的算法给出了基本上可以运行的代码实现,有比较好的工程化指导意义。可以作为工具书来扎实的学习。 0 有用 Tommy 2024-03-25 16:10:07 北京 读了英文版 (function () { if (window.SUBJECT_COMMENTS_SECTION) { // tab handler SUBJECT_COMMENTS_SECTION.createTabHandler(); // expand handler SUBJECT_COMMENTS_SECTION.createExpandHandler({ root: document.getElementById('comment-list-wrapper'), }); SUBJECT_COMMENTS_SECTION.createVoteHandler({ api: '/j/comment/:id/vote', root: document.getElementById('comment-list-wrapper'), voteSelector: '.vote-comment', textSelector: '.vote-count', afterVote: function (elem) { var parentNode = elem.parentNode; var successElem = document.createElement('span'); successElem.innerHTML = '已投票'; parentNode.removeChild(elem); parentNode.appendChild(successElem); } }); } })() 我要写书评 高级算法和数据结构的书评 · · · · · · ( 全部 13 条 ) 热门 只看本版本的评论 var cur_sort = ''; $('#reviews-wrapper .review_filter a').on('click', function () { var sort = $(this).data('sort'); if(sort === cur_sort) return; if(sort === 'follow' && true){ window.location.href = '//www.douban.com/accounts/login?source=movie'; return; } if($('#reviews-wrapper .review_filter').data('doing')) return; $('#reviews-wrapper .review_filter').data('doing', true); cur_sort = sort; $('#reviews-wrapper .review_filter a').removeClass('cur'); $(this).addClass('cur'); $.getJSON('reviews', { sort: sort }, function(res) { $('#reviews-wrapper .review-list').remove(); $('#reviews-wrapper [href="reviews?sort=follow"]').parent().remove(); $('#reviews-wrapper .review_filter').after(res.html); $('#reviews-wrapper .review_filter').data('doing', false); $('#reviews-wrapper .review_filter').removeData('doing'); if (res.count === 0) { $('#reviews-wrapper .review-list').html('你关注的人还没写过长评'); } }); }); 月光捕手 2023-12-13 21:28:10 这是一本造轮子乃至造车子指南 本以为这本书是我2023年读完的最后一本书,到手之后发现高估自己了(读不完,根本读不完)。 我其实很吃“标题党”这一套,想读这本书完全是冲着“高级算法”这几个字去的。先在狗东翻了翻目录,嗯,确实高级:很多内容对我来说都是第一次听说,好歹也是曾经刷穿过剑指offer的...  (展开) 5 0回应 收起 林建鸿 2023-12-22 15:12:32 进阶读物,制造适合自己的数据结构 这本书适合拥有一定工程经验和数据结构基础知识的人看。 首先,这本书很好,好在内容扎实,没有过多的虚的东西,拓展也落到实处,都是一些经典的会在实践中遇到的问题,比如搜索,缓存,不交集等等,看上去很专业,实际上你每天使用的 App 或者登录的网站,都可能在背后使用到...  (展开) 2 0回应 收起 TimeRunner 2023-12-12 16:39:37 受益匪浅 编程更多是一种知识,在技能层面的东西不能说少,但的确少于预期。 数据结构是基本的编程范式 看了这本书,才意识到,数据结构就是基本的编程范式,结构化思考。 自学编程的坏处,就是误信多写多练是提升水平的主要方法。 所以对于此类书籍都是相见恨晚,多学习知识 翻译比想象...  (展开) 2 0回应 收起 异步图书 2023-12-11 17:27:12 这本书将是你攀登高峰、征服高级算法和数据结构的利器 这篇书评可能有关键情节透露 小异要为每一位正在攀登算法高峰的程序员精挑细选了这本由瑞士高级软件工程师Marcello La Rocca创作的《高级算法和数据结构》。 为什么推荐程序员阅读这本书呢?一个很重要的原因就是,在本书中有作者为程序员准备的“高级算法库”,其中的算法能够帮助码农改进代码,进而应对...  (展开) 2 0回应 收起 jimhou 2023-12-09 13:35:59 可以作为算法的参考书 《高级算法和数据结构》是一本为计算机算法爱好者精心编写的书籍,此书深入探讨算法和数据结构的理论,以帮助读者更深入地理解常用算法的核心知识。本书涵盖了各种高级算法和数据结构,从堆、布隆过滤、LRU到遗传算法等,对于提高读者的编程能力和问题解决能力具有极大的帮助。...  (展开) 2 0回应 收起 bambooslip 2023-12-05 19:40:11 读后感 《高级算法和数据结构》是一本深入探讨算法和数据结构理论的书籍,旨在帮助读者更深入地理解计算机科学中的核心概念。这本书具有以下优点: 首先,这本书的作者在计算机科学领域具有丰富的教学和实践经验,因此能够深入浅出地讲解高级算法和数据结构。读者可以轻松理解这些复杂...  (展开) 2 0回应 收起 随风逐舞 2023-11-29 09:51:38 算法进阶 这本书是专门针对高级算法和数据结构进行讲解的,所以其内容会比其他的数据结构和算法的教材更深入,更详细。这本书的读者应该是对数据结构和算法有一定了解的人,因为书中的内容会涉及到一些基本的概念和理论,对于初学者来说可能会有些困难。 从书中的内容来看,作者对于高级...  (展开) 2 0回应 收起 江湖 2023-11-28 13:22:14 算法数据相关 在科技日新月异的今天,算法和数据结构的重要性越来越突出。对于计算机科学专业的学生和相关领域的从业人员来说,掌握高级算法和数据结构无疑是必不可少的技能。我最近阅读了《高级算法和数据结构》这本书,收获颇丰,在此分享我的读书心得。 这本书的内容非常丰富,涵盖了各种...  (展开) 2 0回应 收起 上官云瑶 2023-11-28 11:36:59 高级算法 对于数据结构和算法更加深入的讲解,适合基础扎实的同学,算法执行的任何计算步骤都是可以被分解为基本的可执行的操作步骤,即每个计算步骤都可以在有限时间内完成。数据结构的核心技术是分解与抽象。数据结构就是把数据元素按照一定的关系组织起来的集合,用来组织和存储数据...  (展开) 2 0回应 收起 豆豆爸爸 2025-01-28 01:15:46 《高级算法和数据结构》:在算法书籍中的独特之处 《高级算法和数据结构》的作者马塞洛・拉・罗卡(Marcello La Rocca)是一位经验丰富的瑞士高级软件工程师 。他在大型互联网公司的开发工作履历十分亮眼,曾参与开发 X 平台(原 Twitter)、微软和苹果等公司的大型 Web 应用程序和数据基础设施,积累了大量实际项目经验。...  (展开) 0回应 收起 (function() { if (window.__init_review_list) return; __init_review_list = true; })(); window.useful_icon = "https://img1.doubanio.com/f/zerkalo/536fd337139250b5fb3cf9e79cb65c6193f8b20b/pics/up.png"; window.usefuled_icon = "https://img1.doubanio.com/f/zerkalo/635290bb14771c97270037be21ad50514d57acc3/pics/up-full.png"; window.useless_icon = "https://img1.doubanio.com/f/zerkalo/68849027911140623cf338c9845893c4566db851/pics/down.png"; window.uselessed_icon = "https://img1.doubanio.com/f/zerkalo/23cee7343568ca814238f5ef18bf8aadbe959df2/pics/down-full.png"; > 更多书评 13篇 $('document').ready(function () { $.get(`/subject/36654266/annotation_html`, function (r) { $('.annotation').html(r.html); }); }); 论坛  · · · · · · 可以这样刷好评的吗? 来自Autumn-one 4 回应 2024-06-08 13:19:05 严重怀疑此书在刷评分 来自Josen Zhang 2023-12-26 08:16:28 当前版本有售  · · · · · · 京东商城 111.30元 购买纸质书 当当网 118.30元 购买纸质书 中图网 104.90元 购买纸质书 + 加入购书单 $(document).ready(function() { $('.impression_track_mod_buyinfo').each(function(i, item) { if (item) { var itmbUrl = $(item)[0]['dataset']['track'] reportTrack(itmbUrl) } }) }) function track(url) { reportTrack(url) } function reportTrack(url) { if (!url) { return false } $.ajax({ url: url, dataType: 'text/html' }) } 这本书的其他版本  · · · · · ·  ( 全部2 ) Manning Publications (2021) 暂无评分 5人读过 $(document).ready(function() { $('.fold-btn a').click(function() { var $btn = $(this).find('span'); var $target = $(this).parents('.meta-wrapper').eq(0).next('.buyinfo'); if ($target.is(':visible')) { $target.css('display', 'none'); $btn.text('展开'); } else { $target.css('display', 'flex'); $btn.text('收起'); // track if (!($target.attr('data-exposed'))) { $target.find('.impression_track_manually').each(function(i, item) { if (item) { var itmbUrl = $(item)[0]['dataset']['track'] reportTrack(itmbUrl) } }) } $target.attr('data-exposed', true); } }) }) 以下书单推荐  · · · · · ·  ( 全部 ) 算法与数据结构 (lyb) 书单|技术 (ranrandemo) 算法 (阿尔法杨) 算法&数学与编程 (EnrichYourLife) 算法 (clearlife) 谁读这本书?  · · · · · · 认真学习 今天上午 想读 uploads 昨天 想读 Riku 3月26日 想读 天天 3月23日 在读 > 25人在读 > 34人读过 > 423人想读 (function (global) { if(!document.getElementsByClassName) { document.getElementsByClassName = function(className) { return this.querySelectorAll("." + className); }; Element.prototype.getElementsByClassName = document.getElementsByClassName; } var articles = global.document.getElementsByClassName('article'), asides = global.document.getElementsByClassName('aside'); if (articles.length > 0 && asides.length > 0 && articles[0].offsetHeight >= asides[0].offsetHeight) { (global.DoubanAdSlots = global.DoubanAdSlots || []).push('dale_book_subject_middle_right'); } })(this); 二手市场  · · · · · · 在豆瓣转让 有423人想读,手里有一本闲着? 订阅关于高级算法和数据结构的评论: feed: rss 2.0 (function (global) { var body = global.document.body, html = global.document.documentElement; var height = Math.max(body.scrollHeight, body.offsetHeight, html.clientHeight, html.scrollHeight, html.offsetHeight); if (height >= 2000) { (global.DoubanAdSlots = global.DoubanAdSlots || []).push('dale_book_subject_bottom_super_banner'); } })(this); © 2005-2025 douban.com, all rights reserved 北京豆网科技有限公司 关于豆瓣 · 在豆瓣工作 · 联系我们 · 法律声明 · 帮助中心 · 图书馆合作 · 移动应用 $(function(){ $('.add2cartWidget').each(function() { var add2CartBtn = $(this).find('.add2cart'); var inCartHint = $(this).find('.book-in-cart'); var deleteBtn = inCartHint.find('.delete-cart-item'); deleteBtn.click(function(e) { e.preventDefault(); $.post_withck('/cart', {remove: this.rel}, function() { add2CartBtn.show(); inCartHint.hide(); }); }); }); }); (function (global) { var newNode = global.document.createElement('script'), existingNode = global.document.getElementsByTagName('script')[0], adSource = '//erebor.douban.com/', userId = '', browserId = 'tmSLaTmuH6I', criteria = '7:算法|7:计算机|7:编程|7:数据结构|7:软件工程|7:计算机科学|7:IT|7:软件开发|7:转赠|7:美国|3:/subject/36654266/', preview = '', debug = false, adSlots = ['dale_book_subject_top_right', 'dale_book_subject_middle_mini']; global.DoubanAdRequest = {src: adSource, uid: userId, bid: browserId, crtr: criteria, prv: preview, debug: debug}; global.DoubanAdSlots = (global.DoubanAdSlots || []).concat(adSlots); newNode.setAttribute('type', 'text/javascript'); newNode.setAttribute('src', '//img1.doubanio.com/NWQ3bnN2eS9mL2FkanMvYjFiN2ViZWM0ZDBiZjlkNTE1ZDdiODZiZDc0NzNhNjExYWU3ZDk3My9hZC5yZWxlYXNlLmpz?company_token=kX69T8w1wyOE-dale'); newNode.setAttribute('async', true); existingNode.parentNode.insertBefore(newNode, existingNode); })(this); var _paq = _paq || []; _paq.push(['trackPageView']); _paq.push(['enableLinkTracking']); (function() { var p=(('https:' == document.location.protocol) ? 'https' : 'http'), u=p+'://fundin.douban.com/'; _paq.push(['setTrackerUrl', u+'piwik']); _paq.push(['setSiteId', '100001']); var d=document, g=d.createElement('script'), s=d.getElementsByTagName('script')[0]; g.type='text/javascript'; g.defer=true; g.async=true; g.src=p+'://s.doubanio.com/dae/fundin/piwik.js'; s.parentNode.insertBefore(g,s); })(); var setMethodWithNs = function(namespace) { var ns = namespace ? namespace + '.' : '' , fn = function(string) { if(!ns) {return string} return ns + string } return fn } var gaWithNamespace = function(fn, namespace) { var method = setMethodWithNs(namespace) fn.call(this, method) } var _gaq = _gaq || [] , accounts = [ { id: 'UA-7019765-1', namespace: 'douban' } , { id: 'UA-7019765-16', namespace: '' } ] , gaInit = function(account) { gaWithNamespace(function(method) { gaInitFn.call(this, method, account) }, account.namespace) } , gaInitFn = function(method, account) { _gaq.push([method('_setAccount'), account.id]) _gaq.push([method('_addOrganic'), 'google', 'q']) _gaq.push([method('_addOrganic'), 'baidu', 'wd']) _gaq.push([method('_addOrganic'), 'soso', 'w']) _gaq.push([method('_addOrganic'), 'youdao', 'q']) _gaq.push([method('_addOrganic'), 'so.360.cn', 'q']) _gaq.push([method('_addOrganic'), 'sogou', 'query']) if (account.namespace) { _gaq.push([method('_addIgnoredOrganic'), '豆瓣']) _gaq.push([method('_addIgnoredOrganic'), 'douban']) _gaq.push([method('_addIgnoredOrganic'), '豆瓣网']) _gaq.push([method('_addIgnoredOrganic'), 'www.douban.com']) } if (account.namespace === 'douban') { _gaq.push([method('_setDomainName'), '.douban.com']) } _gaq.push([method('_setCustomVar'), 1, 'responsive_view_mode', 'desktop', 3]) _gaq.push([method('_setCustomVar'), 2, 'login_status', '0', 2]); _gaq.push([method('_trackPageview')]) } for(var i = 0, l = accounts.length; i < l; i++) { var account = accounts[i] gaInit(account) } ;(function() { var ga = document.createElement('script'); ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js'; ga.setAttribute('async', 'true'); document.documentElement.firstChild.appendChild(ga); })()

目录
第1章 初识数据结构 1
1.1 数据结构 2
1.1.1 定义数据结构 2
1.1.2 描述数据结构 3
1.1.3 算法与数据结构有区别吗 4
1.2 设定目标:阅读本书后的期望 4
1.3 打包背包:数据结构与现实世界的结合 5
1.3.1 抽象化问题 5
1.3.2 寻找解决方案 6
1.3.3 拯救大家的算法 7
1.3.4 打破常规来思考问题 8
1.3.5 完美的结局 9
1.4 小结 9
第一部分 改进基本数据结构
第2章 改进优先队列:d叉堆 12
2.1 本章结构 13
2.2 问题:处理优先级 13
2.3 已知解决方案:让列表保持有序 15
2.4 描述数据结构API:优先队列 15
2.4.1 使用优先队列 16
2.4.2 优先级为何非常重要 17
2.5 具体数据结构 17
2.5.1 性能比较 18
2.5.2 正确的具体数据结构是什么 18
2.5.3 堆 18
2.5.4 优先级、最小堆和最大堆 20
2.5.5 高级变体:d叉堆 21
2.6 如何实现堆 22
2.6.1 向上冒泡 22
2.6.2 向下推动 25
2.6.3 插入 27
2.6.4 移除顶部元素 28
2.6.5 修改 30
2.6.6 处理重复优先级 31
2.6.7 堆化 32
2.6.8 API之外的方法:包含 34
2.6.9 性能回顾 34
2.6.10 从伪代码到实现 35
2.7 用例:找到最大的k个元素 35
2.7.1 选择正确的数据结构 36
2.7.2 正确地使用数据结构 36
2.7.3 代码写起来 36
2.8 更多的用例 37
2.8.1 图中的最小距离:Dijkstra算法 37
2.8.2 更多的图算法:Prim算法 37
2.8.3 数据压缩:霍夫曼编码 38
2.9 对分支因子进行分析 41
2.9.1 是否需要d叉堆 41
2.9.2 运行时间 42
2.9.3 寻找最佳分支因子 42
2.9.4 分支因子与内存的关系 43
2.10 性能分析:寻找最佳分支因子 43
2.10.1 剖析 44
2.10.2 解释结果 45
2.10.3 堆化的谜团 49
2.10.4 选择最佳分支因子 49
2.11 小结 50
第3章 树堆:使用随机化来平衡二叉搜索树 52
3.1 问题:多索引 53
3.2 解决方案:描述与API 53
3.3 树堆 54
3.3.1 旋转 57
3.3.2 一些设计问题 60
3.3.3 实现搜索方法 61
3.3.4 插入 61
3.3.5 删除 64
3.3.6 去顶、看顶以及修改 66
3.3.7 返回最小键和最大键 67
3.3.8 性能回顾 67
3.4 应用:随机树堆 68
3.4.1 平衡树 68
3.4.2 引入随机化 70
3.4.3 随机树堆的应用 71
3.5 性能分析和剖析 72
3.5.1 理论:期望高度 72
3.5.2 剖析高度 74
3.5.3 剖析运行时间 76
3.5.4 剖析内存使用情况 78
3.5.5 结论 78
3.6 小结 80
第4章 布隆过滤器:减少跟踪内容所需的内存 81
4.1 字典问题:跟踪事物 82
4.2 实现字典的其他方法 83
4.3 描述数据结构API:关联数组 83
4.4 具体数据结构 84
4.4.1 无序数组:快速插入,慢速搜索 84
4.4.2 有序数组和二分查找:慢插入,稍微快一些的搜索 85
4.4.3 哈希表:在不需要有序的情况下,具有平均常数时间的性能 86
4.4.4 二叉搜索树:所有操作都是对数阶的 86
4.4.5 布隆过滤器:与哈希表一样快,但(由于一个缺陷而)更节省内存 88
4.5 表面之下:布隆过滤器是如何工作的 88
4.6 实现 89
4.6.1 使用布隆过滤器 90
4.6.2 位的读取和写入 91
4.6.3 找到键存储的位置 92
4.6.4 生成哈希函数 93
4.6.5 构造函数 93
4.6.6 查找键 94
4.6.7 存储键 95
4.6.8 估计准确率 96
4.7 应用场景 97
4.7.1 缓存 97
4.7.2 路由 98
4.7.3 爬虫 98
4.7.4 I/O提取器 98
4.7.5 拼写检查器 98
4.7.6 分布式数据库和文件系统 99
4.8 为什么布隆过滤器是可行的 99
4.8.1 为什么没有假阴性 100
4.8.2 为什么有假阳性 100
4.8.3 作为随机算法的布隆过滤器 101
4.9 性能分析 101
4.9.1 运行时间 101
4.9.2 构造函数 102
4.9.3 存储元素 102
4.9.4 查找元素 102
4.10 估计布隆过滤器的精确度 102
4.11 改进的变体 106
4.11.1 布隆表过滤器 106
4.11.2 组合布隆过滤器 106
4.11.3 分层布隆过滤器 106
4.11.4 压缩布隆过滤器 107
4.11.5 可扩展布隆过滤器 107
4.12 小结 108
第5章 不交集:次线性时间的处理过程 109
5.1 不同子集问题 110
5.2 解决方案的论证 111
5.3 描述数据结构API:不交集 112
5.4 简单解决方案 113
5.5 使用树状结构 117
5.5.1 从链表转移到树 117
5.5.2 实现使用树的版本 118
5.6 改进运行时间的启发式算法 120
5.6.1 路径压缩 121
5.6.2 实现平衡性与路径压缩 122
5.7 应用程序 124
5.7.1 图:连通分量 124
5.7.2 图:最小生成树的Kruskal算法 124
5.7.3 聚类 125
5.7.4 合一 126
5.8 小结 126
第6章 trie与基数树:高效的字符串搜索 127
6.1 拼写检查 128
6.1.1 拼写检查器的设计 128
6.1.2 压缩是关键 129
6.1.3 描述与API 129
6.2 trie 130
6.2.1 为什么trie更好 132
6.2.2 搜索 134
6.2.3 插入 137
6.2.4 删除 139
6.2.5 搜索最长前缀词 140
6.2.6 返回匹配特定前缀的所有键 141
6.2.7 什么时候应该使用trie 143
6.3 基数树 144
6.3.1 节点和边 146
6.3.2 搜索 148
6.3.3 插入 149
6.3.4 删除 151
6.3.5 搜索最长前缀词 153
6.3.6 返回匹配特定前缀的所有键 153
6.4 应用程序 154
6.4.1 拼写检查器 154
6.4.2 字符串相似度 156
6.4.3 字符串排序 157
6.4.4 T9 157
6.4.5 自动完成 158
6.5 小结 158
第7章 用例:LRU缓存 160
7.1 不要重复计算 160
7.2 第一次尝试:记住数据 163
7.2.1 描述与API 164
7.2.2 请保存新数据 164
7.2.3 处理异步调用 165
7.2.4 将缓存的值标记为“正在加载” 166
7.3 内存(真的)不够 167
7.4 清除陈旧数据:LRU缓存 168
7.4.1 有时必须要重复解决问题 169
7.4.2 时间排序 170
7.4.3 性能 174
7.5 当新数据更有价值时:LFU 175
7.5.1 如何选择缓存的清除策略 176
7.5.2 LFU缓存有什么不同 176
7.5.3 性能 178
7.5.4 LFU缓存的不足 178
7.6 如何使用缓存也同样重要 179
7.7 同步简介 180
7.7.1 (在Java中)解决并发问题 182
7.7.2 锁简介 183
7.7.3 获取锁 183
7.7.4 重入锁 184
7.7.5 读锁 185
7.7.6 解决并发的其他方法 186
7.8 缓存应用程序 186
7.9 小结 187
第二部分 多维查询
第8章 最近邻搜索 190
8.1 最近邻搜索问题 190
8.2 解决方案 191
8.2.1 第一次尝试 191
8.2.2 有时缓存并不是答案 191
8.2.3 简化事情以获得灵感 192
8.2.4 谨慎选择数据结构 193
8.3 描述与API 194
8.4 迁移到k维空间 195
8.4.1 一维二分查找 196
8.4.2 迁移到更高维度 196
8.4.3 用数据结构对二维空间进行建模 197
8.5 小结 198
第9章 k-d树:索引多维数据 199
9.1 从结束的地方继续 199
9.2 迁移到k维空间:循环遍历
维度 199
9.2.1 构造BST 201
9.2.2 不变量 204
9.2.3 保持平衡的重要性 204
9.3 方法 205
9.3.1 搜索 206
9.3.2 插入 208
9.3.3 平衡树 209
9.3.4 删除 212
9.3.5 最近邻搜索 218
9.3.6 区域搜索 224
9.3.7 所有方法的回顾 227
9.4 限制与可能的改进 228
9.5 小结 229
第10章 相似性搜索树:图像检索的近似
最近邻搜索 230
10.1 从结束的地方继续 230
10.1.1 一个新的(更复杂的)例子 231
10.1.2 克服k-d树的缺陷 232
10.2 R树 232
10.2.1 先退一步:B树简介 232
10.2.2 由B树到R树 233
10.2.3 在R树中插入点 236
10.2.4 搜索 237
10.3 SS树 238
10.3.1 搜索 241
10.3.2 插入 244
10.3.3 插入:方差、均值与投影 249
10.3.4 插入:分裂节点 252
10.3.5 删除 255
10.4 相似性搜索 259
10.4.1 最近邻搜索 260
10.4.2 区域搜索 262
10.4.3 近似相似性搜索 263
10.5 SS+树 265
10.5.1 SS树会更好吗 266
10.5.2 缓解超球体的限制 267
10.5.3 改进拆分启发式算法 267
10.5.4 减少重叠 268
10.6 小结 270
第11章 最近邻搜索的应用 271
11.1 应用程序:查找最近的枢纽 271
11.1.1 解决方案的初稿 272
11.1.2 天堂里的麻烦 273
11.2 中心化应用程序 274
11.2.1 过滤点 274
11.2.2 复杂的决定 276
11.3 迁移到分布式应用程序 278
11.3.1 处理HTTP通信的问题 279
11.3.2 保持库存同步 281
11.3.3 经验教训 281
11.4 其他应用程序 282
11.4.1 色彩还原 282
11.4.2 粒子的相互作用 283
11.4.3 多维数据库查询的优化 285
11.4.4 聚类 287
11.5 小结 287
第12章 聚类 288
12.1 聚类简介 289
12.1.1 机器学习的类型 289
12.1.2 聚类的类型 290
12.2 k均值算法 291
12.2.1 k均值算法的问题 295
12.2.2 维度诅咒再次来袭 296
12.2.3 k均值算法的性能分析 297
12.2.4 用k-d树来加快k均值算法 297
12.2.5 关于k均值算法的最后一些提示 300
12.3 DBSCAN算法 300
12.3.1 直接可达与密度可达 301
12.3.2 从定义到算法 302
12.3.3 实现 304
12.3.4 DBSCAN算法的优缺点 305
12.4 OPTICS算法 307
12.4.1 定义 308
12.4.2 OPTICS算法的核心思想 308
12.4.3 从可达距离到聚类 311
12.4.4 分层聚类 314
12.4.5 性能分析和最终的考虑 318
12.5 评估聚类结果:评估指标 318
12.6 小结 322
第13章 并行聚类:MapReduce与树冠聚类 323
13.1 并行化 323
13.1.1 并行计算与分布式计算 324
13.1.2 并行化k均值算法 325
13.1.3 树冠聚类 325
13.1.4 应用树冠聚类 327
13.2 MapReduce 328
13.2.1 MapReduce是如何工作的 328
13.2.2 先映射,后归约 331
13.2.3 表面之下,还有更多 334
13.3 MapReduce版本的k均值算法 334
13.3.1 并行化树冠聚类 337
13.3.2 使用树冠聚类来进行质心的初始化 339
13.3.3 MapReduce版本的树冠聚类 340
13.4 MapReduce版本的DBSCAN 算法 343
13.5 小结 348
第三部分 平面图与最小交叉数
第14章 图简介:寻找距离最短的
路径 350
14.1 定义 351
14.1.1 图的实现 351
14.1.2 作为代数类型的图 353
14.1.3 伪代码 354
14.2 图的属性 354
14.2.1 无向 355
14.2.2 连通 355
14.2.3 无环 356
14.3 图的遍历:BFS与DFS 357
14.3.1 优化配送路线 357
14.3.2 广度优先搜索 359
14.3.3 重建到目标的路径 361
14.3.4 深度优先搜索 362
14.3.5 再次比较队列与堆栈 364
14.3.6 投递包裹的最佳路线 365
14.4 加权图中的最短路径:迪杰斯特拉 算法 365
14.4.1 与BFS算法的区别 366
14.4.2 实现 367
14.4.3 分析 368
14.4.4 投递包裹的最佳路线 369
14.5 超越迪杰斯特拉算法:A*
算法 370
14.5.1 A*算法到底有多好 372
14.5.2 将启发式函数作为平衡实时数据的一种方式 375
14.6 小结 376
第15章 图嵌入与平面性:绘制具有最少相交边的图 377
15.1 图嵌入 378
15.1.1 一些基础定义 379
15.1.2 完全图与完全二分图 380
15.2 平面图 381
15.2.1 在实践中使用库拉托夫斯基定理 381
15.2.2 平面性测试 382
15.2.3 用于平面性测试的朴素算法 383
15.2.4 提高性能 386
15.2.5 高效的算法 388
15.3 非平面图 389
15.3.1 找到交叉数 391
15.3.2 直线交叉数 392
15.4 边的交叉点 393
15.4.1 直线线段 394
15.4.2 折线 397
15.4.3 贝塞尔曲线 397
15.4.4 二次贝塞尔曲线之间的交点 398
15.4.5 顶点与顶点相交以及边与顶点相交 401
15.5 小结 402
第16章 梯度下降:(不仅是)图的优化问题 403
16.1 用于交叉数的启发式算法 404
16.1.1 刚才提到启发式了吗 404
16.1.2 扩展到曲线边 408
16.2 优化的工作原理 409
16.2.1 成本函数 410
16.2.2 阶跃函数与局部最小值 412
16.2.3 优化随机抽样算法 412
16.3 梯度下降 414
16.3.1 梯度下降中的数学描述 415
16.3.2 几何解释 416
16.3.3 什么时候可以应用梯度下降 418
16.3.4 梯度下降的问题 418
16.4 梯度下降的应用 419
16.5 使用梯度下降进行图嵌入 422
16.5.1 另一种标准 423
16.5.2 实现 425
16.6 小结 426
第17章 模拟退火:超越局部最小值的优化 427
17.1 模拟退火 428
17.1.1 有时候需要先向上爬才能到达底部 429
17.1.2 实现 431
17.1.3 为什么模拟退火是有效的 432
17.1.4 短程与长程的转换 434
17.1.5 变体 435
17.1.6 模拟退火与梯度下降:应该选择哪一个呢 436
17.2 模拟退火与旅行推销员 436
17.2.1 精确解与近似解 438
17.2.2 可视化成本 438
17.2.3 修剪域 440
17.2.4 状态转换 440
17.2.5 相邻交换与随机交换 443
17.2.6 TSP近似算法的应用 444
17.3 模拟退火与图嵌入 444
17.3.1 最小边交叉 445
17.3.2 力导向绘制 446
17.4 小结 450
第18章 遗传算法:受生物学启发的快速收敛优化 451
18.1 遗传算法简介 451
18.1.1 来自大自然的灵感 453
18.1.2 染色体 456
18.1.3 种群 457
18.1.4 适应度 458
18.1.5 自然选择 459
18.1.6 选择交配的个体 461
18.1.7 交叉操作 466
18.1.8 突变操作 468
18.1.9 遗传算法模板 469
18.1.10 遗传算法在什么时候效果最好 470
18.2 TSP 471
18.2.1 适应度、染色体与初始化 471
18.2.2 突变操作 472
18.2.3 交叉操作 472
18.2.4 结果与参数调整 473
18.2.5 超越TSP:优化整个车队的路线 476
18.3 最小顶点覆盖 477
18.3.1 顶点覆盖的应用 478
18.3.2 实现遗传算法 478
18.4 遗传算法的其他应用 480
18.4.1 最大流问题 480
18.4.2 蛋白质折叠 481
18.4.3 超越遗传算法 482
18.4.4 算法,超越本书 483
18.5 小结 483
附录A 伪代码快速指南 485
附录B 大O符号 494
附录C 核心数据结构 500
附录D 类似于优先队列的容器 511
附录E 递归 514
附录F 分类问题与随机算法的度量指标 520
(展开全部)

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注