数据结构第一章重点总结
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
数据结构
逻辑结构(关系):
(1)集合:集合中任何两个结点之间都没有逻辑关系,组织形式松散。
(2)线性结构:元素之间存在着一对一的关系。依次排列形成一条“锁链”。
(3)树形结构:数据元素之间存在着一对多的关系,具有分支、层次特性。
(4)图状结构:数据元素之间存在多对多的关系,元素之间互相缠绕,具有网络特性。
存储结构:逻辑结构及数据元素在计算机中的表示。
(1)顺序存储方式(向量存储)、
(2)链式存储方式
(3)索引存储方式
(4)散列存储方式
抽象数据类型:一个数学模型和定义在这个数学模型的一组操作。
抽象的含义:
★.范围广包括已存在的数据类型和用户自定义数据类型
★★.实现方法不同,但数学特性相同—数学抽象特性
ADT抽象数据类型名
{
数据对象:<数据对象的定义>
数据关系:<数据关系的定义>
基本操作:<基本操作的定义>
}ADT抽象数据类型名
数据结构
数据结构就是要研究数据之间的结构关系。具体来说,它包括数据的逻辑结构和物理结构,以及在这些结构上定义的相应的运算。
按照某种逻辑结构组织的一组数据,按一定的存储方式将它们映射到计算机的存储器中,并且在这些数据上定义了一个运算的集合运算的结果保持原来的结构。
结构
结构是指同一数据对象中各数据元素之间存在的关系。
数据结构课程研究的主要内容
【1】研究数据元素之间的客观联系。(逻辑结构)
【2】研究具有某种逻辑关系的数据在计算机存储器内的存储方式。(存储结构)
【3】研究如何在数据的各种结构。(逻辑的和物理的)的基础上对数据实施一系列有效的基本操作。
数据结构举例
例1:一系列整数,我们可以用算术运算“+、—、*、/”等进行运算,此时数据对象是整数集合,那么,数据对象整数再加上“+、—、*、/”等符号的运算就构成了一个数据结构的定义。
数据结构课程研究的主要内容
主要内容可以归纳为三个层次五个要素:
三个层次:抽象实现评价
五个要素:逻辑结构存储结构基本运算算法不同结构的比较及分析
3.算法及算法评价
算法概念
解决问题的方法和步骤,指为解决一个或一类问题给出的一个确定的、有限长的操作序列。
算法特性:【1】有穷性
【2】确定性
【3】可行性
【4】有输入
【5】有输出
算法描述:
【1】程序设计语言描述的算法
【2】伪语言算法
【3】非形式算法(自然语言算法)
算法评价:
【1】算法的正确性
【2】算法是否易读、易改、易写
【3】算法执行速度——较高时间效率
【4】算法所占空间——辅助存储量
算法效率的度量:
时间复杂度:假如随着问题规模n的增长,算法执行时间的增长率和f(n)的增长率相同,则记作T(n)=O(f(n)),称T(n)为算法的时间复杂性频度统计法:以语句执行的次数的多少作为算法的时间量度的分析方法称为频度统计法。
一条语句的频度是指该语句被执行的次数,而整个算法的频度是指算法中所有语句的频度之和。
例如:
1)X=X+1机器只执行一次,则它的频度为一次,
f(n)=1执行时间复杂度为O(1)。
2)For(i=1;i<=n;i++)其语句执行n次,频度为n次,执行时
间与n成正比,f(n)=n,复杂度为O(n)。
X=X+1
3)For(i=1;i<=n;i++)其语句执行次,频度为次。执行时间与
成正比,f(n)=,复杂度为O()。
For(j=1;j<=n;j++)
X=X+1
关于符号O的数学定义
当n→∞时,有f(n)/g(n)=常数≠0,
则称函数f(n)与g(n)同阶,或者说,f(n)与g(n)同一个数量级,记作
f(n)=O(g(n))
称上式为算法的时间复杂度,或称该算法的时间复杂度为O(g(n))。其
中,n为问题的规模(大小)的量度。
lim(f(n)/g(n))=lim((2n*n*n+3n*n+2n+1)/n*n*n)=2
n→∞n→∞
算法的时间复杂度为O(n*n*n)
空间复杂度
假如随着问题规模n的增长,算法执行所需存储量的增长率和g(n)
的增长率相同,则记作S(n)=O(g(n)),称S(n)为算法的空间复杂性。
算法的存储空间:Ⅰ、输入数据所占的空间
Ⅱ、程序本身所占的空间
Ⅲ、辅助变量所占的空间
时间频度
一个算法执行所耗费的时间,从理论上是不能算出来的,必须上机运行测试才能知道。但我们不可能也没有必要对每个算法都上机测试,只需知道哪个算法花费的时间多,哪个算法花费的时间少就可以了。并且一个算法花费的时间与算法中语句的执行次数成正比例,哪个算法中语句执行次数多,它花费时间就多。一个算法中的语句执行次数称为语句频度或时间频度。记为T(n)。
计算方法
1.一般情况下,算法的基本操作重复执行的次数是模块n的某一个函数f(n),因此,算法的时间复杂度记做:T(n)=O(f(n))
分析:随着模块n的增大,算法执行的时间的增长率和f(n)的增长率成正比,所以f(n)越小,算法的时间复杂度越低,算法的效率越高。
2.在计算时间复杂度的时候,先找出算法的基本操作,然后根据相应的各语句确定它的执行次数,再找出T(n)的同数量级(它的同数量级有以下:1,log(2)n,n,n log(2)n,n的平方,n的三次方,2的n次方,n!),找出后,f(n)=该数量级,若T(n)/f(n)求极限可得到一常数c,则时间复杂度T(n)=O(f(n))整个算法的执行时间与基本操作重复执行的次数成正比。基本操作重复执行的次数是问题规模n的某个函数f(n),于是算法的时间量度可以记为:T(n)= O(f(n))