#2017_8_6 10:06
booksite:algs4.cs.princeton.edu,该网站的内容极其丰富,可能是书的内容的十倍之多。
这本书的目标是学习一系列重要而且有用的算法,即能够解决实际问题,并且能够用代码来实现。算法和数据结构是相辅相成的,数据结构指的是组织数据的方案,从而能够通过算法对数据进行有效的处理。这一章介绍了我们学习数据结构和算法需要的基本工具。
首先,介绍了我们要用到的基本编程模型。所有的程序都是通过Java自带库的子集+我们自己的库(用来IO和统计分析的)来进行实现的。1.1节就是对语言结构、特性、库进行一个概述。
接着,我们会强调数据抽象。我们会在模块化编程中定义抽象数据类型。1.2节介绍了通过Java语言实现ADT的过程( by specifying an applications programming interface (API))。并且使用Java的类机制开发在客户端中使用的代码。
然后,我们会重点关注三种ADTs:bag stack queue。1.3节描述了通过数组、可变数组和链表来实现包、队列、堆栈的过程。
1.4节描述了算法性能分析的方法。我们使用了科学的方法,即提出性能的假设、建立数学模型、通过重复的实验测试。
最后,我们通过一个案例,来研究一个使用算法和数据结构解决网络连通性的问题,在这个过程中,我们会使用经典的union-find ADT。
算法
算法是独立于计算机硬件和计算机语言。算法指定了解决问题的具体步骤。算法是有限的、确定的、有效的解决问题的方法,并且能够使用计算机语言来实现。我们可以通过自然语言或者计算机程序语言来实现算法。下面讲到了欧几里得的求最大公约数的算法。最好能在阅读1.1完毕以后,去做1.1.24和1.1.25的练习。在本书中,我们使用计算机程序来描述算法。因为这样做的话,更容易去检查它是否满足有限性、确定性、有效性。
绝大多数的算法涉及到了组织数据的方式(数据结构)。简单的算法可能会产生复杂的数据结构,复杂的算法也可能会用到简单的数据结构。所以这本书的完整名称是《算法和数据结构》。