数据结构
数据结构这一概念,至今尚未有一个被一致公认的定义。
数据结构是相互之间存在一种或多种特定关系的数据元素的集合。----这是书本的简单解释。
在我眼里数据结构主要学习的就是这些所谓的特定关系的表达与应用。
数据结构在计算机中的映像为存储结构。
根据数据元素之间关系的不同特性,通常有4类基本结构:
1.集合
结构中的数据元素之间除了“同属于一个集合”的关系外,别无其他关系。
2.线性结构
结构中的数据元素之间存在一个对一个的关系。
3.树形结构
结构中的数据元素之间存在一个对多个的关系。
4.图状结构
结构中是数据元素之间存在多个对多个的关系。
数据
数据(data)是对客观事物的符号表示,在计算机科学中是指所有能输入到计算机中并被计算机程序处理的符号的总称。
我们需要注意的数据是针对特定程序而言的。
数据元素
数据元素(data element)是数据的基本单位,在计算机程序中通常作为一个整体考虑处理。
若干个数据项构成数据元素。数据项(data item)是数据的不可分割的最小单位。
在计算机中的映像为节点(node)或元素(element)。
数据对象
数据对象(data object)是性质相同的数据元素的集合,是数据的一个子集。
顺序存储结构与链式存储结构
这是数据元素之间的关系在计算机中的表示方法。
1.顺序存储结构
借助元素在存储器中的相对位置来表示数据元素之间的逻辑关系。
2.链式存储结构
借助指示元素存储地址的指针(pointer)表示数据元素之间的逻辑关系。
数据类型
我们在学习中用数据类型来描述存储结构。
再用高级程序语言编写的程序中,每个变量、常量或者表达式都有一个它所属于的确定的数据类型。
类型明显或者隐含的规定了在程序执行期间变量或者表达式所有可能取值的范围,以及在这些值上允许的操作。
因此,数据类型(data type)是一个值的集合和定义在这个值集上的一组操作的总称。通常分为原子类型与结构类型。
抽象数据类型(abstract data type。简称ADT)与数据类型概念相同,是数据类型数学特性的抽象。通常分为原子类型、固定聚合类型与可变聚合类型。
算法
算法(algorithm)是对特定问题求解步骤的一种描述,它是指令的有限序列,其中没一条指令表示一个或多个操作。算法的5个特性:
1.有穷性
一个算法必须总是在执行有穷步骤后结束,且每一步都可在有穷时间内完成。
2.确定性
算法中每一条指令必须有确切的含义,不会产生二义性。并且,在任何条件下,算法只有唯一的一条执行路径,即对相同的输入只能得出相同的输出。
3.可行性
一个算法是能行的,即算法中描述的操作都是可以通过已经实现的基本运算执行有限次来实现的。
4.输入
一个算法有0个或者多个的输入,这些输入取自于某个特定的对象的集合。
5.输出
一个算法有一个或者多个的输出,这些输出是同输入有着某些特定关系的量。
一个算法是由控制结构(顺序、分支、循环)和原操作(指固有数据类型的操作)构成的。
时间复杂度
渐进时间复杂度(asymptotic time complexity),简称时间复杂度。
一般情况下,算法中基本操作重复执行的次数是问题规模n的某个函数f(n)。
T(n)=O(f(n))
它表示随着问题规模n的扩大,算法执行时间的增长率和f(n)的增长率相同。
显然,被称作问题的基本操作应该是其重复执行次数和算法的执行时间成正比的原操作,多数情况下它是最深层循环内的语句中的原操作,它的执行次数和包含它的语句的频度相同。语句的频度(frequency count)指的是该语句的重复执行的次数。
一般情况下,对一个问题(或一类算法)只需选择一种基本操作来讨论算法的时间复杂度即可,有时也需要同时考虑几种基本操作,甚至可以对不同的操作赋予不同的权值,以反应执行不同操作所需的相对时间。
由于算法的时间复杂度考虑的只是对于问题规模n的增长率,则在难以精确计算基本操作执行次数(或语句频度)的情况下,只需求出它关于n的增长率或阶即可。
除特别指明外,均求最坏情况下的时间复杂度。