著名计算机科学家、Pascal语言发明者N.沃思教授提出:
程序 = 算法 + 数据结构
数据范畴范畴 数据结构是一门研究非数值计算的程序设计问题中计算机的操作对象以及它们之间的关系和操作等的学科
数据:所有能被输入到计算机中,且被计算机处理的符号的集合计算机操作的对象的总称
是计算机处理的信息的某种特定的符号表示形式
数据元素:数据中的一个“个体”,数据结构中讨论的基本单位
数据项:数据结构中讨论的最小单位,数据元素是数据项的集合,有时也称为域(field),即数据表中的字段
数据对象:性质相同的数据元素的集合,是数据的一个子集。如大写字母字符数据对象是集合C={A,B,C,……,Z} ,整数数据对象是集合 N = { 0, ±1, ±2,… }
例如:运动员(数据元素)
姓名 | 俱乐部名称 | 出生日期 | 参加日期 | 职务 | 业绩 |
---|---|---|---|---|---|
年 月 日 |
例如,一个含12位数的十进制数可以用三个4位的十进制表示
3214,6587,9345 — a1(3214), a2(6587), a3(9345)
在a1、a2和a3之间存在**”次序“关系**
又例,2行3列的二维数组{a1,a2,a3,a4,a5,a6}
a1 | a2 | a3 |
---|---|---|
a4 | a5 | a6 |
行的次序关系:
row = {
, , , }
列的次序关系:
col= {
, , }
再例,一维数组{a1,a2,a3,a4,a5,a6}
存在
次序关系:{
|i=1,2,3,4,5}
数据的逻辑结构可归结为一下四类:
数据结构是一个二元组,Data-Structure=(D,S)
其中:D是数据元素的有限集,S是D上关系的有限集。
数据的逻辑结构 只抽象反映数据元素的逻辑关系
数据的存储结构 数据的逻辑结构在计算机存储器中的存储形式(或称映像)
元素/节点 用于表示数据元素的二进制位(bit)的位串
数据域 用于表示数据项的二进制位(bit)的位串
数据结构的映像方法
用二进制位(bit)的位串表示数据元素
321 = 501 = 101000001
十进制 八进制 二进制
关系的映像方法:(表示
顺序映像 以存储位置的相邻表示后继关系
如:y的存储位置和x的存储位置之间差一个常量C
而C是一个隐含值,整个存储结构中只含数据元素本身的信息
链式映像 以附加信息(指针)表示后继关系
需要用一个和x在一起的附加信息指示y的存储位置
存储地址 | 存储内容 | 指针 |
---|---|---|
1345 | 元素1 | 1400 |
1346 | 元素4 | ∧ |
…… | ……… | ……. |
1400 | 元素2 | 1536 |
……. | ……… | ……. |
1536 | 元素3 | 1346 |
例如:以三个带有次序关系的整数表示一个长整数时,可利用C语言中提供的整数数组类型,定义长整数为:
typedef int Long_int[3]
数据类型 一个值的集合和定义在这个值集上一组操作的总称
例:C语言中,提供int, char, float, double等基本数据类型,数组、结构体、共用体、枚举等构造数据类型,还有指针、空(void)类型等。用户也可用typedef 自己定义数据类型
抽象数据类型(ADT) 是指一个数学模型以及定义在此数学模型上的一组操作
ADT 有两个重要特征 数据抽象 数据封装
算法 为了解决某类问题而规定的一个有限长的操作序列。一个算法必须满足以下五个重要特性
算法设计的原则
正确性 在合理的数据输入下,能在有限的运算时间内得到正确结果,对算法是否“正确”的理解可以有以下四个层次:
a.程序中不含语法错误;
b.程序对于几组输入数据能够得出满足要求的结果;
c.程序对于精心选择的、典型、苛刻切带有刁难性的几组输入数据能够得出满足要求的结果;
d.程序对于一切合法的输入数据都能得出满足要求的结果
可读性 易于人对算法的理解;另一方面,晦涩难读的程序易于隐藏较多错误而难以调试
健壮性 当输入的数据非法时,算法应当恰当地作出反映或进行相应处理,而不是产生莫名奇妙的输出结果。并且,处理出错的方法不应是中断程序的执行,而应是返回一个表示错误或错误性质的值,以便在更高的抽象层次上进行处理
高效率与低存储量需求 通常,效率指的是算法执行时间;存储量指的是算法执行过程中所需的最大存储空间。两者都与问题的规模有关
算法效率的衡量方法和准则
设解决一个问题的规模为n,基本操作被重复执行的次数是n的一个函数f(n),假如,随着问题规模n的增长,算法执行时间的增长率和f(n)的增长率相同,则可记作:
T (n) = O(f(n))
其中T(n)叫算法的渐进时间复杂度,简称时间复杂度。
算法的执行时间=∑原操作(i)的执行次数╳原操作(i)执行时间
从算法中选取一种对于所研究的问题来说是基本运算的原操作,以该原操作重复执行的次数作为算法运行时间度衡量准则。
空间复杂度:算法所需存储空间的度量,记作:
S(n)=O(f(n))
算法的存储量包括:
(1)输入数据所占空间;
(2)程序本身所占空间;
(3)辅助变量所占空间
)]
空间复杂度:算法所需存储空间的度量,记作:
S(n)=O(f(n))
算法的存储量包括:
(1)输入数据所占空间;
(2)程序本身所占空间;