1.1 数据结构的原则
1.1.1 学习数据结构的必要性
一个算法如果能在所要求的资源限制(resource constraint)内将问题解决好,则称这个算法是有效率的(efficient)。一个算法如果比其他已知解所需要的资源都少,这个算法也可以称为是有效率的。一个算法的代价(cost)是指这个算法消耗的资源量。
为解决某一问题而选择数据结构时,应该完成以下几步:
1.分析问题以确定任何算法均会遇到的资源限制;
2.确定必须支持的基本运算,并度量每种运算所受的资源限制;
3.选择最接近这些开销的数据结构。
1.2 抽象数据类型和数据结构
定义1.2 类型(type)是一组值的集合。数据类型(data type)是指一个类型以及定义在这个类型上的一组操作。数据项(data item)是一条信息或者其值属于某个类型的一条记录。数据项是数据类型的成员(member)。整数是简单数据项(simple data item),因为他不包含子结构。而银行账户则属于复杂数据项(aggregate data item)。
定义1.3 抽象数据类型(abstract data type),简称ADT,是指基于一个逻辑类型的数据类型以及这个类型上的一组操作。每一个操作由它的输入和输出定义。隐藏实现细节的过程称为封装(encapsulation)。数据结构(data structure)是ADT的物理实现。ADT的每一个操作均由一个或者多个子程序来实现。
定义1.4 数据项有逻辑形式(logical form)和物理形式(physical form)两个方面。用ADT给出的数据项的定义是它的逻辑形式。数据结构中对数据项的实现是它的物理形式。
1.3 问题、算法和程序
算法(algorithm):算法是指解决问题的一种方法或者一个过程。算法包括以下几个性质:1.正确性(correct);2.具体步骤(concrete steps);3.确定性(no ambiguity);4.有限性(finite);5.可终止性(terminable)。
程序(program):一个计算机程序被认为是使用某种程序设计语言对一个算法的具体实现。
定义1.6 问题(problem)是一个函数,或者是从输入到输出的一种映射。算法(algorithm)是一个能够解决问题的、有具体步骤的方法。算法步骤必须无二义性,算法必须正确,长度有限,必须对所有输入都能终止。程序(program)是算法在计算机程序设计语言中的实现。
其他参考书:Robert Sedgewick著的《算法》、Cormen、Leiserson等著的《算法概论》内容较先进。