- 高级算法和数据结构
- (意)马塞洛·拉·罗卡
- 2字
- 2024-01-31 17:45:13
前言
为什么要选择本书
谈及为什么需要花时间学算法,我至少可以列举出三个很好的理由。
(1)性能:选择正确的算法可以显著提升应用程序的速度。仅就搜索来说,用二分查找替换线性搜索就能为我们带来巨大的收益。
(2)安全性:如果你选用了错误的算法,攻击者就可以利用它使你的服务器、节点或应用程序崩溃。比如哈希碰撞拒绝服务攻击,就利用了作为字典来存放POST请求以提交参数的哈希表,并使用有可能导致大量碰撞的序列来让这个哈希表退化,进而使整个服务器停止响应。另一个关于安全性的有趣例子是,曾有黑客成功使用有缺陷的随机数生成器入侵在线扑克网站。[1]
[1] “How we learned to cheat at online poker: A study in software security”(“在线扑克如何作弊:一次软件安全研究”),Brad Arkin等,developer.com期刊,1999年。
(3)设计代码的效率:如果有合适的构建模块可用来完成各种事情(特别是如果还能重用代码的话),你就能更快地实现代码的编写,而且会让代码更整洁。
那么,为什么推荐你阅读本书呢?一个很重要的原因就是,在本书中,我精挑细选地为你准备了一个具有战略意义的“高级算法库”,其中的算法能够帮助你改进代码,进而应对现代系统面临的各种挑战。
此外,我试着用一种不同于普通教材的方法来介绍这些算法。虽然本书也会解释算法背后的理论,但更侧重于给出使用这些算法的实际应用程序的相关背景信息,以及在什么时候应该使用这些算法的建议。
在日常工作中,你通常要做的是处理某个大型软件(也可能是遗留软件)上的某个特定部分。但是,在整个职业生涯中,你肯定会遇到需要设计大型软件的情况。到了那时,你就会用上本书讨论的大部分内容了。我将尽可能地给出有关如何编写简洁且高效代码的建议,以帮助你解决将来要面对的相关问题。
正是因为采用了这 种新的方式来介绍算法,所以在每一章中,我都会列举有助于解决某些问题的数据结构。这是一本当你需要用以提高应用程序性能的建议时,可以随时参考的辅助性手册。
最后要说的是,如果你碰巧读过Aditya Y. Bhargava撰写的《算法图解》(人民邮电出版社,2017年),并且十分喜欢里面的内容;那么只要你还想继续学习算法,就可以通过阅读《高级算法和数据结构》得到进一步提升。如果你还没有读过《算法图解》,我强烈推荐你看一看,这本书是你了解算法相关主题的绝佳选择,它能广受欢迎绝非偶然。希望我的这本书也能达到同样的效果。