逻辑结构是指数据元素之间的逻辑关系,即从逻辑关系上描述数据。
逻辑结构包括:
如何用计算机表示数据元素的逻关系?
存储结构是指数据结构在计算机中的表示(又称映像),也称物理结构。
存储结构包括:
针对于某种逻辑结构,结合实际需求,定义基本运算。 例如:逻辑结构->线性结构
基本运算:
1.查找第i个数据元素
2.在第i个位置插入新的数据元素
3.删除第i个位置的数据元素......
数据类型是一个值的集合和定义在此集合上的一组操作的总称。例如:定义int整形,我们就可以把他们加减乘除等操作。
抽象数据类型(Abstract Data Type,ADT)是抽象数据组织及与之相关的操作。ADT 用数学化的语言定义数据的逻辑结构、定义运算。与具体的实现无关。
程序 = 数据结构+算法 数据结构:如何用数据正确地描述现实世界的问题,并存入计算机。 算法:如何高效地处理这些数据,以解决实际问题
算法(Algorithm)是对特定问题求解步骤的一种描述,它是指令的有限序列,其中的每条指令表示一个或多个操作。
有穷性 | 一个算法必须总在执行有穷步之后结束,且每一步都可在有穷时间内完成 |
---|---|
确定性 | 算法中每条指令必须有确定的含义,对于相同的输入只能得到相同的输出 |
可行性 | 算法中描述的操作都可以通过已经实现的基本运算执行有限次来实现 |
输入 | 一个算法有零个或多个输入,这些输入取自于某个特定的对象的集合 |
输出 | 一个算法有一个多个输出,这些输出是与输入有着某种特定关系的量 |
我们可以类比:y = f(x)函数,其中x就是输出,y就是输出,这个函数就是算法。
优质的算法应该达到的目标:
正确性 | 算法应能够正确的求解问题 |
---|---|
可读性 | 算法应具有良好的可读性,以帮助人们理解 |
健壮性 | 输入非法数据时,算法能适当地做出反应或进行处理,而不会产生莫名奇妙地输出结果。 |
效率与低存储量需求 | 花的时间少即:时间复杂度低。不费内存即:空间复杂度低 |
思路:找出基本运算执行次数
与问题规模
的关系,解得
,
最高幂次为
,则算法时间复杂度为
。
1. int i = 1; 2. int y = 5;
while(i <= n) while((y+1)*(y+1)<n)
i = i * 2; y = y + 1;
例1:设基本运算
执行次数为
,则
,解得
,则
例2:设基本运算
执行次数为
,则
(此处的y是指最终y的值,由于初始时y=5,所以最终y的值减去5才是基本运算的执行次数)。那么
,
化简可得
,则
思路:数学归纳法 或 直接累计循环次数。(如1.2.3中的16)
🌷递归:公式递推
,即
🌷非递归:直接累计次数
01
可以用()定义一个完整的数据结构。
A. 数据元素 B. 数据对象 C. 数据关系 D. 抽象数据类型
03
以下属于逻辑结构的是()。
A. 顺序表 B. 哈希表 C. 有序表 D. 单链表
01
对于两种不同的数据结构,逻辑结构或物理结构一定不相同吗?
02
试举一例,说明对相同的逻辑结构,同一种运算在不同的存储方式下实现时,其运算效率不同。
一、单选
03
若某算法的空间复杂度为O(1),则表示该算法()。
A. 不需要任何辅助空间 B. 所需辅助空间大小与问题规模n无关
C. 不需要任何空间 D. 所需空间大小与问题规模n无关
16
下列程序段的时间复杂度是()。
int sum = 0;
for(int i = 1; i < n; i *= 2)
for(int j = 0; j < i; ++j)
sum++;
A. O(logn) B. O(n) C. O(nlogn) D. O(n^2)
一、单选
01
✅答案:D. 抽象数据类型
💡解析:
数据结构三要素:逻辑结构、存储结构、数据的运算。
数据结构是相互之间具有一种 或 多种特定关系的数据元素的集合。
A. 数据元素:数据的基本单位
B. 数据对象:具有相同性质的数据元素的集合
C. 数据关系:即结构(数据元素相互之间的关系)
D. 抽象数据类型:一个数学模型 及 定义在该模型上的一组操作
抽象数据类型(ADT)描述了数据的逻辑结构和抽象运算,通常用(数据对象,数据关系,基本操作集)这样的三元组来表示,从而可构成完整的数据结构定义。
03
✅答案:C. 有序表
💡解析:
顺序表、链表属于一般线性表;线性表、有序表是逻辑结构;顺序表,链表是存储结构
A. 顺序表是线性表的顺序存储、D. 单链表是线性表的链式存储
B. 哈希表(散列表)是基于哈希函数将数据映射到索引,使得增、删、查具有平均O(1)复杂度。
哈希表本质上是数组加链表,不属于线性结构。
顺序表、哈希表、单链表是三种不同的数据结构,既描述逻辑结构,又描述存储结构和数据运算。
对于C. 有序表是指关键字有序的线性表,仅说明了数据元素之间的逻辑关系。
二、应用
01
✅答案:
数据结构三要素:逻辑结构、存储结构(物理结构)、数据的运算。
当数据结构不同时,也有可能是数据的运算不同。
例如,对于二叉树 和 二叉排序树,二叉排序树可以采用二叉树的逻辑表示和存储方式,虽然它们均有建立树、查找结点、插入结点、删除结点等操作,但是实际的定义是不同的,二叉树平均复杂度为O(n),而二叉排序树的平均时间复杂度为O(logn)。
二叉排序树讲解
02
✅答案:
例如,线性表可以采用顺序存储和链式存储。
在顺序存储下,线性表插入、删除操作的时间复杂度为O(n);
在链式存储下,线性表插入、删除操作的时间复杂度为O(1)。
1.2.3 习题答案及解析
一、单选
03
✅答案:B. 所需辅助空间大小与问题规模n无关
💡解析:
空间复杂度为算法所需的存储空间,
若输入数据所占的空间只取决于问题本身,与算法无关,则只需分析辅助空间。
16
✅答案:B. O(n)
💡解析:
设最外层循环执行了次,则,化简可得。
内层循环执行次数,则。
那么f(n) = n,即时间复杂度T(n) = O(f(n)) = O(n)。
求解斐波那契数列
有递归、非递归算法。试分别分析两种算法的时间复杂度。
✅答案:(1)递归:
(2)非递归:
💡解析:
(1)递归
void F(n){
if(n <= 1) return n;
return F(n - 1) + F(n - 2);
}
从上述递归形式不难发现,每次会形成两个分支,最终形成递归二叉树,则时间复杂度约为
实际上时间复杂度为
。【斐波那契数列通项公式】