1.1 数据结构的基本概念
相关名词
数据:数据是描述客观事物的数值,字符以及能输入及其且能被处理的各种符号的集合。数据包含整型,实型,布尔型,图像,字符,声音等。
数据元素:组成数据的基本单位,时数据集合的个体,通常作为一个整体进行考虑和处理。一般用节点表示数据元素。一个数据元素可以有很多数据项
数据对象:性质相同的数据元素的集合,是数据的一个子集。
数据结构:相互之间存在的一种或者多种特定关系的数据元素集合,是带有结构的数据元素的集合,它指的是数据元素之间的相互关系,即数据的组织形式。
数据类型:一组性质相同的值集合以及定义在这个值集合上的一组操作的总称。分为,原子类型和结构类型(按照值是否可以分解来定义,原子不可分解,结构可分解)
数据抽象与抽象数据类型:抽象数据类型值基于一类逻辑关系的数据类型以及定义在这个类型之上的一组操作。
抽象数据类型确定了一个模型,但将模型的实现细节隐藏起来,他定义了一组运算,但将运算的实现过程隐藏起来。
抽象数据类型实现的三种方法:
(1)传统的面向过程的程序设计
(2)“包”,“模型”的设计方法
(3)面向对象的程序设计(OOP)
有两个重要特征:
(1)数据抽象:用抽象数据类型描述程序处理的实体,强调的是本质特征,能完成的功能以及它和外部用户的接口
(2)数据封装,将外部特性和内部实现分离,并且对外部用户隐藏内部实现细节。
1.2 数据结构的内容
逻辑结构:指数据元素之间逻辑关系的描述。
形式化描述:Data_Structure=(D,R)
D 是数据元素的有限集,R时D上关系的有限集。
四类基本结构:
集合结构,线性结构,树形结构,图状结构
集合结构:(本课程不讨论)
线性结构:结构中的数据元素存在一一对应的关系。
树形结构:结构中的数据元素之间存在着一对多的层次关系。
图状结构:结构中的数据元素之间存在着多对多的任意关系。
逻辑结构
1)线性结构,分为线性表,栈和队列,串,数组和广义表
2)非线性结构,分为树,图
存储结构:逻辑结构在计算机中的存储印象,是逻辑结构在计算机中的实现,包含数据元素的表示和关系的表示。
数据元素的表示:用若干个二进制“位串”表示。
数据元素之间的关系的表示方法
1)顺序存储。用物理存储地址的紧密表示逻辑关系的紧密。
2)非顺序存储(链式存储)。物理存储地址紧密的数据元素逻辑关系未必紧密。
运算集合:在计算机中进行运算操作的集合。
1.3 算法
1.3.1 算法定义
算法时规则的优先级和,时为解决特定问题而规定的一系列操作
特性:
1)有限性:有限步骤之内正常结束,不能形成无穷循环
2)确定性:算法中的每一个步骤必须有确定含义,无二义性
3)输入:有多个或0个输入
4)输出:至少有一个或多个输出
5)可行性:原则上能精确进行,操作课通过已实现基本运算执行有限次而完成。
算法特征:
1.正确性。程序没有语法错误;程序对于机组输入数据能够得出满足规格的结果;对于精心选择的典型,苛刻而带有刁难性的几组数据能够得出符合的结果;对一切合法的输入数据能产生满足规格说明要求的结果(正确性的四个层次)。
2.可读性。
3.健壮性。
4.高效率和低存储量
算法,语言和程序的关系
1.算法描述了数据对象的元素之间的关系(包括数据逻辑关系,存储关系描述)
2.描述算法的工具:算法可以用自然语言,框图或者高级程序设计语言进行描述
3.程序是算法在计算机中的实现。
1.3.2 算法性能分析
定义:对问题规模N与该算法在运行时所占的空间S和所耗费的时间T给出一个数量关系的评价。
N——不同问题含义不同:
对矩阵是阶数
对多项式是多项式项数
对图是定点个数
对集合运算是集合中元素个数
算法效率的衡量
两种方法:
1)事后统计法。缺点:必须执行程序,其他因素可能掩盖算法本质(配置等)
2)事前分析估算法。
和算法执行时间相关的因素
1 算法使用的策略
2 问题的规模
3 编写程序的语言
4 编译程序产生的机器代码的质量
5 计算机执行指令的速度
一个算法耗费的时间和 =算法中各条语句执行时间之和。不考虑机器软硬件因素,可以认为算法“运行工作量”时问题规模的函数。
算法执行时间:一个算法执行时间大致等于所有语句执行时间的总和。对于语句的执行时间应该是语句的执行次数和执行一次所需时间的乘积。是估算不是精确计算。
语句频度:该语句在一个算法中重复执行的次数。
算法的时间复杂度:T(n)=O(f(n))
O(1) 常数型
N 线性型
N^2 平方型
N^3 立方型
2^N 指数型
log2N 对数型
Nlog2N 二维型
一般而言只有线性型,平方型,二维型,对数型可以实现。
算法的空间复杂度:作为算法所需的存储空间的量度,一般只评价。S(n)=O(f(n))
算法的存储量包括:
1.输入数据所占空间
2.程序本身所占空间
3.辅助变量所占空间