高级/进阶”算法和数据结构书籍推荐

“高级/进阶”算法和数据结构书籍推荐《高级算法和数据结构》

高级算法和数据结构

为什么要选择本书

谈及为什么需要花时间学算法,我至少可以列举出三个很好的理由。

(1)性能:选择正确的算法可以显著提升应用程序的速度。仅就搜索来说,用二分查找替 换线性搜索就能为我们帶来巨大的收益。

(2)安全性:如果你选用了错误的算法,攻击者就可以利用它使你的服务器、节点或应 用程序崩溃。比如哈希碰撞拒绝服务攻击,就利用了作为字典来存放POST 请求以提交参数 的哈希表,并使用有可能导致大量碰撞的序列来让这个哈希表退化,进而使整个服务器停止 响应。另一个关于安全性的有趣例子是,曾有黑客成功使用有缺陷的随机数生成器入侵在线 扑克网站。1

(3)设计代码的效率:如果有合适的构建模块可用来完成各种事情(特别是如果还能重用 代码的话),你就能更快地实现代码的编写,而且会让代码更整洁。

那么,为什么推荐你阅读本书呢?一个很重要的原因就是,在本书中,我精挑细选地为你 准备了一个具有战略意义的“高级算法库”,其中的算法能够帮助你改进代码,进而应对现代系 统面临的各种挑战。

此外,我试着用一种不同于普通教材的方法来介绍这些算法。虽然本书也会解释算法背后 的理论,但更侧重于给出使用这些算法的实际应用程序的相关背景信息,以及在什么时候应该 使用这些算法的建议。

在日常工作中,你通常要做的是处理某个大型软件(也可能是遗留软件)上的某个特定部 分。但是,在整个职业生涯中,你肯定会遇到需要设计大型软件的情况。到了那时,你就会用 上本书讨论的大部分内容了。我将尽可能地给出有关如何编写简洁且高效代码的建议,以帮助 你解决将来要面对的相关问题。

正是因为采用了这种新的方式来介绍算法,所以在每一章中,我都会列举有助于解决某些 问题的数据结构。这是一本当你需要用以提高应用程序性能的建议时,可以随时参考的辅助性 手册。

适读人群 :1.高等院校计算机相关专业本科高年级学生以及研究生2.从事与算法相关工作的开发者、程序员、工程师

1.使用特定的数据结构和(或)算法来提高性能”,解决工程实战中存在的真实问题。
2.Github国内大厂、美国大厂的面试题中会多有涉及。
3.涵盖国内大厂、美国大厂常见面试,包括动态规划、布隆过滤器、图计算等。

这是一本关于“高级/进阶”算法和数据结构的图书,主要介绍了用于Web 应用程序、系统 编程和数据处理领域的各种算法,旨在让读者了解如何用这些算法应对各种棘手的编码挑战, 以及如何将其应用于具体问题,以应对新技术浪潮下的“棘手”问题。

本书对一些广为人知的基本算法进行了扩展,还介绍了用于改善优先队列、有效缓存、对 数据进行集群等的技术,以期读者能针对不同编程问题选出更好的解决方案。书中示例大多辅 以图解,并以不囿于特定语言的伪代码以及多种语言的代码样本加以阐释。

学完本书,读者可以了解高级算法和数据结构的相关内容,并能运用这些知识让代码具备 更优性能,甚至能够独立设计数据结构,应对需要自定义解决方案的情况。

本书可作为高等院校计算机相关专业本科高年级学生以及研究生的学习用书,也可供从事与 算法相关工作的开发者参考。

本书的内容是如何组织的:路线图

第 1 章定义了算法和数据结构,阐释了它们的区别,并通过一个例子探究了用不同算法解 决问题的过程,以及如何利用这些算法来找到更好的解决方案。

从第2章开始,本书剩余的内容将分为三大部分以及附录。每一部分会集中介绍一大类内 容——可以是某个抽象的目标,也可以是我们需要解决的某类问题。

第一部分探讨了一些高级数据结构,目的是让你进一步掌握像跟踪一个或一组事物这样的 基本操作。这一部分旨在让你熟悉这样一种思维模式:对数据执行操作的方法有很多,而最好 的方法取决于上下文和需求。

第2章介绍了二叉堆的高级变体——d 叉堆,还描述了第一部分各章中用来介绍各种主题的 编撰结构。

第 3 章利用树堆进一步探讨了堆的高级用法。树堆是二叉搜索树和堆的混合体,可以在不 同的上下文中提供帮助。

第4章介绍了布隆过滤器。这是哈希表的一种高级形式,可以帮助我们节省内存,同时将 查找操作的平摊时间复杂度维持在常数级别。

第5章介绍了一些用来跟踪不交集的替代数据结构。不交集是构建高级算法的基石,已用 在若干实际应用中。

第6章介绍了两种在存储和查找字符串方面都优于通用容器的数据结构: trie (前缀树)和 基数树(又称为压缩前缀树)。

第7章基于前面介绍的数据结构构建了一种能有效处理缓存的组合数据结构: LRU 缓存,还 详细讨论了LFU 缓存 (LRU 缓存的变体)以及如何在多线程环境中同步共享容器的问题。

第二部分探讨搜索算法的一种特殊情况:处理多维数据时应该如何索引这些数据,以及如 何执行空间查询。本书将再次展示一些比使用基本搜索算法有更大改进的专用数据结构。不仅 如此,这一部分还将描述另一个重要的主题——聚类。聚类用到了大量的空间查询,还用到了MapReduce 这样的分布式计算模型。

第8章探讨了最近邻问题。

第9章描述了k-d 树——一种支持在多维数据集上进行高效搜索的解决方案。 第10章介绍了树的更多高级版本,如 SS 树和R 树。

第11章深入探讨了如何基于需要派送的客户地址找到最近的仓库,还着重介绍了最近邻搜 索的应用。

第12 章介绍了三种旨在高效实现最近邻搜索的聚类算法: k 均值算法、DBSCAN 算法和 OPTICS 算法。

第13章介绍了MapReduce (一种强大的分布式计算模型),并探讨了如何将其应用到第12 章所讨论的聚类算法上。

第三部分只关注一种数据结构——图。这部分内容将介绍各种旨在推动当今人工智能和大 数据发展的算法。

第14章介绍了图数据结构的基础知识,还介绍了深度优先遍历(DFS)、广度优先遍历(BFS)、 迪杰斯特拉算法以及A*算法,并描述了如何使用它们来解决“最短路径”问题。

第15章介绍了图嵌入、平面性以及稍后几章将要尝试解决的几个问题,例如如何找到对图 进行嵌入时的最小交叉数,以及如何更好地绘制图。

第16章描述了一种我们在机器学习中经常要用到的基本算法——梯度下降算法,并展示了 如何将这种算法应用于图以及图嵌入。

第17章在第16章的基础上介绍了模拟退火算法——这是一种更强大的优化技术。在处理 不可微函数或是具有多个局部最小值的函数时,这种算法能够克服梯度下降算法的缺点。

第18章描述了遗传算法——这是一种十分高级的优化技术,有助于加快收敛速度。

本书各章会按照“提出问题→设计数据结构作为解决方案→实现解决方案并分析运行时间 和内存需求”这一结构来安排内容。

最后,附录部分涵盖了阅读本书所必须掌握的那些关键主题。附录不是基于示例来讲解的, 而是采用了与正文不同的内容组织方式。附录旨在向读者提供在开始阅读正文之前就应该熟悉的 各种知识的摘要,其中的大部分主题是基础算法课程中的内容。我们建议读者在阅读第2章之前 浏览一遍附录中的内容。

附录 A 介绍了用来描述算法的伪代码的各种符号。

附录B 提供了对大O 符号以及时间分析与空间分析的总结。

附录C 和附录D 给出了各种核心数据结构的摘要。这些数据结构是本书将要介绍的各种高 级数据结构的基础模块。

附录 E 解释了递归。递归是一种比较具有挑战性的编程技术,旨在对算法进行更明确、更 简洁的定义。当然,在采用递归时,我们需要对利弊进行权衡。

附录 F 给出了不同类型的随机算法的定义,包括蒙特卡罗算法、拉斯维加斯算法,还介绍 了各种分类问题和随机解决方案的评估指标。

关于代码

本书中的算法是用伪代码加以解释的,因此读者不需要有特定编程语言的背景知识。

不过,我们还是希望读者对基本的、与语言无关的编程概念有一定的了解,例如循环、条 件、布尔运算符、变量以及赋值的相关概念。

附录 A 提供了一份简短的指南,对本书用到的语法(或者更确切地说,伪语法)进行了介绍。我们建议读者能够在开始阅读第1章之前浏览一遍附录A。当然,如果你对自己非常有 信心,可以直接阅读正文中的代码,当觉得对其中使用的语法不甚了解时,再参考附录 A 中 的内容。

本书给出了伪代码,如果你对特定的编程语言感兴趣,或者想要弄清楚书中的概念是如何 用真实的可执行代码来实现的,可访问本书的GitHub 仓库,以了解如何使用不同的编程语言(如 Java 、Python 、JavaScript) 实现本书介绍的各种数据结构。

关于作者

Marcello La Rocca现为一家电商公司的高级软件工程师,曾参与开发 Twitter、微软和苹果 等公司的大型Web 应用程序和数据基础设施,并发明了NeatSort 这一自适应排序算法。他的主 要研究领域为图、算法优化、机器学习和量子计算。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/195320.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Python基础语法之学习input()函数

Python基础语法之学习input函数 前言一、代码二、效果 前言 一、代码 # 默认是字符串类型 number input("请输入一个数字:") print("输入的数字是",number)二、效果 没有人可以阻止你成为自己想成为的人,只有你自己才能放弃梦想。…

WinMerge使用教程,WinMerge下载

一、下载 官方下载 WinMerge - You will see the difference… 官方地址:https://winmerge.org/ 阿里云盘下载 文件内容对比工具WinMerge2.16.25.25 https://www.alipan.com/s/r7MzudB235x 点击链接保存,或者复制本段内容,打开「阿里云盘…

机器视觉:塑造未来的智能视界

🎥 屿小夏 : 个人主页 🔥个人专栏 : IT杂谈 🌄 莫道桑榆晚,为霞尚满天! 文章目录 📑 前言🌤️ 机器视觉技术的实现☁️ 图像采集☁️ 图像处理☁️ 数据建模☁️应用展示…

94.STM32外部中断

目录 1.什么是 NVIC? 2.NVIC寄存器 3.中断优先级 4.NVIC的配置 设置中断分组​编辑 配置某一个中断的优先级 5.什么是EXTI 6.EXTI和NVIC之间的关系 7.SYSCFG 的介绍 1.什么是 NVIC? NVIC是一种中断控制器,主要用于处理 ARM Cort…

java--子类中访问其他成员的特点

1.在子类方法中访问其他成员(成员变量、成员方法),是依照就近原则的。 ①先子类局部范围找。 ②然后子类成员范围找。 ③然后父类成员范围找,如果父类范围还没有找到则报错。 2.如果父类中,出现了重名的成员,会优先使用子类的…

NV040C语音芯片:让自助ATM机使用更加安全快捷

近年来,移动支付方式的兴起、银行加强线上化服务、数字人民币项目推进等因素的影响,人们使用ATM机的频率呈现小幅度的下降趋势。然而,自助ATM机并未从我们的视野中消失,它们仍然在金融领域发挥着重要的作用。未来,ATM机…

Rust内存布局

题图忘了来自哪里.. 整型,浮点型,struct,vec!,enum 本文是对 Rust内存布局 的学习与记录 struct A { a: i64, b: u64,}struct B { a: i32, b: u64,}struct C { a: i64, b: u64, c: i32,}struct D { a: i32, b: u64, c: i32, d: u64,}fn main(…

关于网站的favicon.ico图标的设置需要注意的几点

01-必须在网页的head标签中放上下面的说明&#xff1a; <link rel"shortcut icon" href"/favicon.ico">否则&#xff0c;浏览器虽然能读到图标&#xff0c;但是不会把图标显示在标签上。 02-浏览器会默认到网站根目录中读取文件favicon.ico&#x…

学习笔记-瑞吉外卖项目实战(一)

软件开发整体介绍 软件开发流程 角色分工 软件环境 瑞吉外卖项目介绍 项目介绍 产品原型介绍 技术选型 功能架构 角色 开发环境搭建 数据 创建database reggie&#xff0c;在里面创建表&#xff1a; maven 创建springboot项目并导入相关依赖坐标&#xff1a; 我们可以在项目…

webGL网页游戏的开发步骤

开发基于 WebGL 的网页游戏涉及多个步骤&#xff0c;包括游戏概念的设计、图形资源的创建、编码和调试等。以下是一个一般性的步骤指南&#xff0c;希望对大家有所帮助。北京木奇移动技术有限公司&#xff0c;专业的软件外包开发公司&#xff0c;欢迎交流合作。 确定游戏概念&a…

【办公软件】XML格式文件怎么转Excel表格文件?

首先我们有一个XML格式的文件&#xff0c;例如&#xff1a; 其中的数据是这样的&#xff1a; 我们现在在路径中选中这个XML格式的文件&#xff0c;然后鼠标右键&#xff0c;选择用WPS表格打开后&#xff0c;可见XML格式的文件已经自动转换成了Excel表啦。。。。

CH02_交给子类

Template Method模式 组成模板的方法被定义在父类中&#xff0c;由于这些方法是抽象方法&#xff0c;所以只查看父类的代码是无法知道这些方法最终会进行何种具体处理的。唯一能知道的就是父类如何调用这些方法。 类图 说明 AbstractClass&#xff08;抽象类&#xff09; Abs…

JAVAEE初阶 多线程基础(四)

join的知识补充,线程的状态和线程安全 一.多线程完成运算操作二.多线程代码的变换2.1 转换成串行执行 三.join的参数四.获取线程的引用4.1用this方法获取实例4.2 用currentThread获取实例 五.线程的状态六.线程安全 一.多线程完成运算操作 可以发现,多线程并行比单线程的速度快…

Java核心知识点整理大全19-笔记

目录 14.1.5.2. MemStore 刷盘 全局内存控制 MemStore 达到上限 RegionServer 的 Hlog 数量达到上限 手工触发 关闭 RegionServer 触发 Region 使用 HLOG 恢复完数据后触发 14.1.6.HBase vs Cassandra 15. MongoDB 15.1.1. 概念 15.1.2. 特点 16. Cassandra 16.1.1…

MySQL-02-InnoDB存储引擎

实际的业务系统开发中&#xff0c;使用MySQL数据库&#xff0c;我们使用最多的当然是支持事务并发的InnoDB存储引擎的这种表结构&#xff0c;下面我们介绍下InnoDB存储引擎相关的知识点。 1-Innodb体系架构 InnoDB存储引擎有多个内存块&#xff0c;可以认为这些内存块组成了一…

1146:吃糖果(C语言)

题目描述 HOHO&#xff0c;终于从Speakless手上赢走了所有的糖果&#xff0c;是Gardon吃糖果时有个特殊的癖好&#xff0c;就是不喜欢连续两次吃一样的糖果&#xff0c;喜欢先吃一颗A种类的糖果&#xff0c;下一次换一种口味&#xff0c;吃一颗B种类的糖果&#xff0c;这样&…

GPT还远远不是真正的智能

GPT是一个基于深度学习的自然语言处理模型&#xff0c;它可以生成逼真的文本。虽然GPT在生成文本方面取得了显著的进展&#xff0c;但它并不具备真正的智能。GPT是通过训练模型来学习语言模式&#xff0c;它不具备理解、推理、判断和主动学习的能力。它只是根据已有的语料库生成…

Go 中切片(Slice)的长度与容量

切片长度与容量在 Go 中很常见。切片长度是切片中可用元素的数量&#xff0c;而切片容量是从切片中第一个元素开始计算的底层数组中的元素数量。 Go 中的开发者经常混淆切片长度和容量&#xff0c;或者对它们不够了解。理解这两个概念对于高效处理切片的核心操作&#xff0c;比…

天鹅湖国家旅游度假区 | 展柜OLED透明屏:创新展示提升互动体验

天鹅湖国家旅游度假区 | 展柜OLED透明屏 产品&#xff1a;一块55寸OLED透明屏嵌入玻璃安装 应用场景&#xff1a;用在天鹅湖国家旅游度假区——三门峡城市文化客厅展馆中的一个透明展示柜&#xff0c;用一块55寸OLED透明屏嵌入展示柜的玻璃&#xff0c;让观众即可以看到展柜里…

试写一算法将两个递增有序的带头结点的单链表合并为一个递增有序的带头结点的单链表。(利用原表结点空间)

试写一算法将两个递增有序的带头结点的单链表合并为一个递增有序的带头结点的单链表。 &#xff08;利用原表结点空间&#xff09; 比如现在要将下面两个链表合并&#xff0c;这里是要求利用原表空间 我们先创建一个辅助的链表L3&#xff0c;用p和q分别标记L1和L2的数据元素&…
最新文章