01数据结构基本概念
1.1基本概念
数据,数据元素,数据对象,数据类型,抽象数据类型,数据结构
注意:
数据类型:原子类型,结构类型,抽象数据类型{
原子类型:其值不可再分的数据类型;
结构类型:其值可以再分成若干成分的数据类型
抽象数据类型:抽象数据组织和与之相关的操作
}
通常用数据对象,数据关系,基本操作集这样的三元组来表示抽象数据类型。
数据结构是互相之间存在一种或者多种特定关系的数据关系的集合。数据结构包括三方面的内容:逻辑结构,存储结构和数据的运算。
1.1.2数据结构三要素
1,数据的逻辑结构分为线性结构和非线性结构。
2,数据存储结构指的是计算机中的映像或者物理结构。它包括数据元素的表示和关系的表示。数据的存储结构是逻辑结构用计算机语言实现的。数据的存储结构主要有:顺序存储,链式存储,索引存储和散列存储。
3,数据的运算:运算的定义针对逻辑结构,指出运算的功能;运算的实现是针对存储结构的,指出运算的具体步骤。
问答题:
1)可以用 抽象数据类型 定义一个完整的数据结构
2)顺序表,哈希表和单链表几种数据结构,既描述逻辑结构,也描述存储结构和数据运算。然而有序表是指关键字有序的线性表,可以链式存储也可以顺序存储,仅描述了元素之间的逻辑关系
3)循环队列是用顺序表表示的队列,是一种数据结构。栈是一种抽象数据类型,可采用顺序存储或链式存储,只表示逻辑结构。
4)对于两种不同的数据结构,逻辑结构或物理结构一定不相同吗?
数据的运算也是数据结构的一个重要方面。对于两种不同的数据结构,它们的逻辑结构和物理结构完全有可能相同。比如二叉树和二叉排序树,二叉排序树可以采用二叉树表示和存储方式,前者通常用来表示层次关系,而后者通常用于排序和查找。
5)试举例,说明对相同的逻辑结构,同一种运算在不同的存储方式下实现,其运算效率不同?
线性表可以用顺序存储方式实现,也可以用链式存储方式实现。在顺序存储方式下,在线性表中插入和删除元素,平均要移动接近一半的元素,时间复杂度为o(n);而在链式存储方式下,插入和删除的时间复杂度都是O(1)
1.1算法和算法评价
1.2.1算法的基本概念
算法是对特定问题求解步骤的一种描述,他是指令的有限序列,其中每一条指令表示一个或者多个操作。
一个算法还具有以下特性:
1)有穷性
一个算法必须总是在执行有穷步骤后结束,并且每一条指令都可以在有穷时间内完成。
2)确定性
算法中每条指令必须有确切的含义,读者不会产生二义性。
3)可行性
一个算法是可行的,既算法中描述的操作都是可以通过已经实现的基本运算执行有限次来实现的。
4)输入
一个算法有0个或多个输入,这些输入取自于某个特定的对象集合
5)输出
一个算法有一个或则多个输出,这些输出与输入有特定关系的量
备注:
设计一个好的算法应考虑达到以下目标:
a)正确性 b)可读性 c)健壮性既输入非法数据时候不会产生一些莫名的数据产出 d)效率与低存储量的需求
1.2.2算法效率的度量
算法效率的度量是通过时间复杂度和空间复杂度来描述的。
1,时间复杂度
一个语句的频度是指该语句在算法中被重复执行的次数。算法中所有语句频度之和记作T(n),他是算法问题规模的n的函数,时间复杂度主要分析T(n)数量级。算法中的基本运算(最深层循环内的语句)的频度与T(n)同数量级,所以通常采用算法中基本运算的频度f(n)来分析运算法的时间复杂度。因此,算法的时间复杂度记为: T(n)=O(f(n))
备注:
最坏时间复杂度 是指在最坏情况下,算法的时间复杂度。
平均时间复杂度是指所有可能输入实例在等概率出现的情况下,算法的期望运行时间。
最好时间复杂度是指在最好的情况下,算法的时间复杂度。
一般而言考虑最坏情况下的时间复杂度,以保证算法的运行时间不会比他更长。
分析一个程序的时间复杂性时,有以下两条规则:
a)加法规则
T(n)=T1(n) + T2(n) = O(f(n)) + O(g(n)) = O(max(f(n),g(n)))
b)乘法规则
T(n) = T1(n) * T2(n) = O(f(n)) * O(g(n)) = O(f(n) * g(n))
2,空间复杂度
算法的空间复杂度S(n),定义为该算法所耗费的存储空间,他是问题规模n的函数,渐近空间复杂度简称空间复杂度,记作:S(n)=O(g(n))。
算法原工作地指所需辅助空间是常量,既O(1)。
习题: