数据结构的基础概念
数据是表征客观事物的可记录可识别的符号集合。
数据:
描述客观事物的数值、字符以及一切能输入到计算机且能被处理的符号集合。
数据元素:
数据元素是组成数据的基本单位,是数据集合的个体。
数据对象:
数据对象是性质相同的数据元素的集合,是数据集的一个子集。
数据结构:
数据结构,是相互之间存在一种或多种特定关系的数据元素集合。强调是带有结构的数据元素的集合,数据元素之间的相互关系,即数据的组织形式。
数据类型:
一组性质相同的值集合以及定义其上的一组操作的集合。
抽象:
抽象是计算机技术的本质技术。
抽象数据类型ADT:就是定义在一个模型上的一组操作的集合。
其特点是抽象和隐蔽;
包括定义和实现两大方面。
数据结构的内容:
数据结构的内容,即数据结构的研究范围;
数据结构注重的是数据元素之间的相互关系;
数据结构的内容包括逻辑结构和数据结构的存储结构及运算集合。
- 【数据结构的逻辑结构】
数据元素之间存在四种基本的逻辑结构:
(1) 集合结构:集合是属于与不属于简单的关系;
(2) 线性结构:结构中的数据元素之间存在着一对一的线性关系:如线性表(学籍表);
(3)树形结构:结构中的数据元素之间存在着一对多的层次关系:如树(学校组织结构图);
(4) 图形结构:结构中的数据元素之间存在着多对多的任意关系:如图(网络节点图);
综上所述,数据的逻辑结构可概括为: 线性结构-----线性表、栈、队列、双队列、字符串、数组、广义表 ;非线性结构----树、图 ;
- 【数据结构的存储结构】:
是逻辑结构在计算机中的存储映象,也是在计算机中的实现。
逻辑结构和存储结构之间的关系:
存储结构是逻辑关系的映象。逻辑结构是数据结构的抽象,存储结构是数据结构的实现,两者综合起来建立了数据元素之间的结构关系。
数据元素之间关系在计算机中的存储映像分为:
- 顺序映象(顺序存储结构,如数组,就是一组连续配置的单元) ;
- 非顺序映象(非顺序存储结构,如链表,是一组任意配置的单元,通过指针连接起来,维持逻辑关系)。
运算集合:
定义在数据集及数据元素关系集上的运算操作集合; 数据结构的内容:按照一定的逻辑关系组织起来的一批数据,按一定的映像方式存放在计算机中,并在其上定义运算集合,就构成数据结构内容的三要素。
算法性能评价:
【性能评价】应是问题规模的函数,以刻画表征问题规模的大小。
【问题规模】对于不同的问题其含义不同: 如矩阵的阶、多项式的项数、图的顶点数、集合的个数等,是反映问题大小的本质数目。
【时间数量关系的计算方法】
算法实际执行时间与机器硬件和软件环境相关(比如两个机器的性能指标不同,就不便比较算法执行的快慢),舍弃机器环境差异影响,语句执行时间本质就是语句执行次数,与机器环境无关。 因此算法的执行时间就是算法所有语句的执行次数之和。
【算法的时间复杂度T(n)】
一个算法的时间复杂度T(n)是该算法的时间度量, 计作: T(n)=O(f(n)) 它表示随问题规模 n 的增大,算法的执行时间的增长率和 f(n)的增长率相同,称作算法的渐进时间复杂度,简称时间复杂度。
【常用算法时间复杂度】
数据结构中常用的时间复杂度频率计数有 7 个:O(1) 常数型 O(n)线性型 O(n2)平方型 O(n3)立方型 O(2n)指数型 O(log2n)对数型 O(nlog2n)二维型
按时间复杂度由小到大递增排列成表 1-3(当 n 充分大时):
一般情况下,随 n 的增大,T(n)的增长较慢的算法为最优的方法。 从中我们应该选择使用多项式阶 O(nk)的算法,而避免使用指数阶的算法。
常用的时间复杂度频率表
【最坏时间复杂度】 :是指执行基本操作的最大次数。基本操作时指算法中基本运算的操作。
【算法的空间性能分析】 类似于时间复杂度的讨论,一个算法的空间复杂度 S(n)定义为该算法所耗费的存储空间的数量级,它也是问题规模 n 的函数。
记做: S(n)=O(f(n))
一般情况下,一个程序在机器上执行时,除了需要寄存本身所用的指令、常数、 变量和输入数据以外,还需要一些对数据进行操作的辅助存储空间。其中对于输 入数据所占的具体存储量只取决于问题本身,与算法无关,这样我们只需要分析 该算法在实现时所需要的辅助空间单元个数就可以了。若算法执行时所需要的辅 助空间相对于输入数据量而言是个常数,则称这个算法为原地工作,辅助空间为 O(1)。
算法的时间复杂度和空间复杂度合称为算法的复杂度。
算法和算法描述
【算法的定义】算法是规则的有限集合,是为解决特定问题而规定的一系列操作。也就是说算法是处理步骤的序列集合。 【算法的特性】 :有限性、确定性、可行性和输入输出特性。 【算法设计的要求】 算法需要保证正确性、可读性、健壮性和高效率低存储量等问题。
算法的正确性是不言而喻的,正确可分为三个层次:1、一般数据能得出要求结果;2、精心选择的边界数据也能得到要求结果;3、所有合法数据都能得到要求结果。一层比一层要求更高。
可读性就是便于理解和交流,有助于合作开发。 健壮性就是耐折腾,非法操作时也不至于瘫痪。 高效率和低存储即:执行效率高,存储容量少,但往往需要折中。