如果你被困在一个沙漠孤岛上,并且只能选择一本算法书,我们推荐Donald Knuth的《计算机程序设计艺术(卷1~3)》(1998)。Knuth在这本书中描述了大量的数据结构和算法,并且进行了精巧的处理和分析。这本书包含了大量的脚注和练习,并且能够帮助一名程序员在接下来的时间中保持活力和竞争力。这些练习非常有挑战性,并且你能够直接接触到Knuth的思想。
但是你没有被困在孤岛上,对吗?你接手了一些劣质的代码,而且这些代码必须在周五前进行改进,你需要知道如何去处理才行!
在你面对一个算法问题,需要解决一个特定的问题或者对现有解决方案进行改进的时候,我们希望本书能够成为你的第一选择。为解决各种问题,我们广泛地讨论了现存的算法,并且遵循以下原则:
·我们使用模式化的统一格式来描述每一个算法,进行每一次讨论并解释算法的重点。正因如此,我们的书才如此易读。我们才能够看出相似的设计会对不同的算法产生什么样的影响。
·在这本书中,我们使用了不同的编程语言(包括C、C++、Java还有Ruby)来描述算法。得益于此,我们能够使用你熟悉的编程语言对算法进行详细的讨论。
·我们描述了算法的期望性能,并且根据经验提供了支持这些结论的证据。无论你相信数学还是相信实际的运行时间,你都会被我们说服。
对软件工程师、程序员以及设计师来说,我们希望这本书能够派上用场。为了达到目标,你需要参考大量的关于实际解决方案和算法的资料,才能够解决手头的实际问题。你已经知道了如何用多种语言编写一个程序。你也知道了计算机科学的关键数据结构,例如数组、链表、栈、队列、散列表、二叉树还有有向图或者无向图。你不需要实现这些数据结构,因为它们大都在库函数中可以找到。
我们希望你能从这本书中学到如何选择并且测试解决方案以快速高效地解决问题,也能够学到一些高级数据结构和一些使用标准数据结构的新方法,来改善程序的性能。在选择算法时,如果你可以知道什么样的决定可以改善解决方案的效率,那么就能够提高你解决问题的能力。