一、什么是数据结构?
要想知道什么是数据结构,首先要了解一些数据类型。
类型(type):是一组值得集合。例如布尔类型由true和false这两个值组成,整数也构成类型。
数据类型(data type):是指一种类型和定义在该类型上的一组操作。例如,一个整数变量是整数数据类型的一个成员,而加法是定义在整数数据类型上的一种操作。
抽象数据类型(abstract data type,简称ADT):是指数据结构作为一个软件组件的实现。ADT的接口用一种类型和该类型上的一组操作来定义,每个操作由它的输入和输出定义。ADT并不会指定数据类型如何实现,这些实现谢姐对于ADT的用户是隐藏的,并且通过封装来阻止外部对它的访问。
数据结构(data structure)就是ADT的实现。
下面用一张图把上面讲过的关系概括出来:
其中ADT中个提出的数据项的定义是它的逻辑形式,而数据结构中队数据项的实现是它的物理形式。
个人理解为:ADT接口定义了要做什么事情,然后数据结构就是要如何做每一件事情。
比ADT更高级的抽象是:对描述程序设计(即对象与类的相互关系)的抽象,这又被成为设计模式。
二、选择数据结构
1、分析问题,确定资源限制;
2、确定该问题需要什么操作,衡量各种数据结构的资源限制;
3、选出最合适该问题的数据结构。
切记:选择数据结构时必须以数据为中心。
三、算法的性质
1、正确性
2、具体步骤
3、确定性
4、有限性
5、可终止性
四、问题、算法和程序
1、问题是一个函数,是从输入到输出的一种映射;
2、算法是结局问题,有具体步骤的方法;
3、程序是算法在计算机程序设计语言的实现。
五、增长率的比较
1、渐进分析:当输入规模很大,或者数大道极限(微积分意义上)时,对一种算法的研究。即估算一种算法的时间或者其他待见是,经常忽略运行时间函数的系数。但也有局限性。
2、上限:表示算法可能出现的最高增长率。表达方式为T(n)在集合O(f(n))中。
3、下限:描述算法为某类数据输入时所需的最小资源。表达方式为T(n)在集合Ω(f(n))中。
4、当上限和下限相同时,可以用θ表示。直接说T(n)为θ(f(n))。
5、常用的时间复杂度所耗费的时间从小到大依次是:
O(1) < O(logn) < O(n) < O(nlogn) < O(n^2) < O(n^3) < O(2^n) < O(n!) < O(n^n)