算法(第4版)

[美] Robert Sedgewick

出版时间

2012-09-30

ISBN

9787115293800

评分

★★★★★

标签

编程

书籍介绍
这不是一本读完就能速成的工具书,而是一本值得反复翻读的算法经典。它最大的争议点在于全程使用 Java 实现:有人因语言门槛望而却步,也有人因此得以在真实代码中理解算法。与偏重数学证明的《算法导论》不同,它把重点放在“如何写出可运行、可复用、可测试的代码”上——通过 API 与静态方法库实现模块化,让每个程序都按可重用的方式编写。读者反馈它“讲得清晰”“比教材友好”,但也指出性能分析过于简略。它适合愿意边做边学、从 C/C++ 到数据结构再到算法循序渐进的人;若只想快速找公式、要数学严谨性,或许会觉得芜杂。
作者简介
Robert Sedgewick 斯坦福大学博士(导师是Donald E. Knuth),从1985年开始一直担任普林斯顿大学计算机科学系教授,曾任该系主任,也是Adobe Systems公司董事会成员,曾在Xerox PARC、国防分析研究所(Institute for Defense Analyses)和法国国家信息与自动化研究所(INRIA)从事研究工作。他的研究方向包括解析组合学、数据结构和算法的分析与设计、程序可视化等。 Kevin Wayne 康奈尔大学博士,普林斯顿大学计算机科学系高级讲师。研究方向包括算法的设计、分析和实现,特别是图和离散优化。
AI导读
核心看点
  • 经典算法教材,涵盖排序搜索图处理等50个核心算法
  • Java代码实现模块化,配套网站提供丰富测试数据与课件
  • 讲解清晰直观,图示丰富,比算法导论更友好易读
读者共识
  • 公认最适合自学的算法入门书,讲解细致且友好
  • 相比算法导论更注重工程实践,代码可直接复用
  • 虽缺动态规划等深度内容,但作为基础教材极佳
精彩摘录
  • "编写递归代码时最重要的有以下三点: * 递归总有一个最简单的情况——方法的第一条语句总是一个包含 return 的条件语句。 * 递归调用总是去尝试解决一个规模更小的子问题,这样递归慈恩那个收敛到最简单的情况。 * 递归调用的父问题和尝试解决的子问题之间不应该有交集。"
  • "你应该将自己编写的每一个程序都当做一个日后可以重用的库。 * 编写用例,在实现中将计算过程分解成可控的部分。 * 明确静态方法库和与之对应的API(或者多个库的多个API)。 * 实现API和一个能够对方法进行独立测试的 main() 函数。 这种方法不仅能帮助你实现可重用的代码,而且能够教会你如何运用模块化编程来解决一个复杂的问题。 API 的目的是将调用和实现分离:除了API中给出的信息,调用者不需要知道实现的其他细节,而实现也不应考虑特殊的应用场景。API使我们能够广泛地重用那些为各种目的独立开发的代码。"
  • "这个模型的最重要之处在于通过静态方法库实现了模块化编程。我们可以构造许多个静态方法库(模块),一个库中的静态方法也能够调用另一个库中定义的静态方法。这能够带来许多好处: * 程序整体的代码量很大时,每次处理的模块大小仍然适中; * 可以共享和重用代码而无需重新实现; * 很容易用改进的实现替换老的实现; * 可以为解决编程问题建立合适的抽象模型; * 缩小调试范围"
  • "构建现代软件最重要也最有挑战的一项任务就是设计API。它需要经验、思考和反复的修改,但设计一份优秀的API所付出的所有时间都能从调试和代码复用所节省的时间中获得回报。为一个小程序给出一份API似乎有些多余,但你应该按照能够复用的方式编写每个程序。理想情况下,一份API应该能够清楚地说明所有可能的输入和副作用,然后我们应该先写出检查实现是否与API相符的程序。但不幸的是,计算机科学理论中一个叫做说明书问题(specification problem)的基础结论说明这个目标是不可能实现的。简单地说,这样一份说明书应该用一种类似于编程语言的形式语言编写。而从数学上可以证明,判定这样两个程序进行的计算"
  • "系统将“whitelist.txt”作为参数传递给main()"
  • "对于 int 和 double 来说,这些操作是我们熟悉的算数运算;对于 boolean 来说则是逻辑运算。"
  • "例如,BinarySearch 的 main(() 方法调用了系统库 java.utils.Arrays 的 sort() 方法,我们的库 StdIn 中的 readInts() 方法和 StdOut 库中的 println() 方法。"
  • "每次调用 StdOut.print() 或是 StdOt.println() 都会向该文件追加一段文本。"
目录
第1章  基础  1
1.1 基础编程模型  4
1.1.1 Java程序的基本结构  4
1.1.2 原始数据类型与表达式  6
1.1.3  语句  8

显示全部
用户评论
读了开头,并卖了(再见吧计算机算法😄
很详细,但是很多地方有点鸡肋,对于有一定编程经验的人来说
需要反复读的一本书。
买了原著但是没怎么读,学是学了黑马根据这本书编写的java数据结构与算法课程
看完这本书,我立马把严蔚敏那本书扔了
好难好难好难
极品。比老严那本书强多了
Weiss的数据结构本来就已经极好了,和这部一对比,居然成了“黄山归来不看岳”。在干《算法导论》前把这部看一遍还是很有必要的。算法导论重点在设计方法和分析技巧上,对必要算法的讲述不如这本
主次不分,罗里吧嗦,翻译不敢恭维,深度和广度也都一般
适合对算法进行基本了解
下载
收藏