Algorithms

Robert Sedgewick, Kevin Wayne

出版时间

2010-02-04

ISBN

9780321713179

评分

★★★★★
精彩摘录
  • "编写递归代码时最重要的有以下三点: * 递归总有一个最简单的情况——方法的第一条语句总是一个包含 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() 都会向该文件追加一段文本。"
用户评论
普林斯顿老爷子的coursera网课课本 嗯 接触到core system之后 越来越多碰到算法了 就得回来温习一下
相比有点学院派的算法导论,这书里面提到的内容大概是要求码农对算法了解的下限
翻译的版本劝退,原版还是很经典的
Addison-Wesley Educational Publishers Inc的其他书籍查看全部

收藏