2019上海科技大学991数据结构与算法

这篇博客详细介绍了2019年上海科技大学991数据结构与算法考试的内容,包括基础知识如满二叉树的性质、遍历方法和渐进符号的含义,以及真题部分的判断题、单选题、多选题和具体题目解析,涉及链表、二叉树、图和排序算法等知识点。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

算法导论:
链接:https://pan.baidu.com
/s/1nXzwVML3V_FFnQHGFfBcYg 
提取码:50pq 


基础知识与结论

①:

满 二 叉 树 中 , 叶 子 节 点 = 中 间 节 点 + 1 满二叉树中,叶子节点=中间节点+1 =+1
满二叉树就是每个节点要么没有儿子,要么有两个儿子;当叶子节点增加两个儿子时,叶子节点增加两个,并且刚刚的叶子节点变成了中间节点,所以相当于中间节点和叶子节点都同时增加1,而最开始的情况的时候,就是只有1个根节点,相当于叶子节点为1,中间节点为0,而向以后发展两种节点增加的速度是一样的,所以总是相差1

②:

前序遍历:根左右
中序遍历:左根右
后序遍历:左右根

③:渐进号

O O O:最坏时间复杂度
Ω \Omega Ω:最好时间复杂度
Θ \Theta Θ:包含最好最坏复杂度(好像不太对)
o o o:感觉就是数学里的高阶无穷小的意思

真题

一.判断题(10 题,每题 2 分)


1.在循环链表中,某些链接域可能为空(错 )
都是环了得哇,应该每个数的信息都一样,要是有一个空那全都空了

2.给定任意函数f(n)和g(n),f(n)=Q(g(n)和f(n)=o(g(n)可能同时成立。(错)
在算法导论的第三章21页

3. 一个好的哈希函数需满足简单均匀(对)

4.下列树是二叉搜索树。 (对)
在这里插入图片描述
满足左儿子<根<右儿子
5.一棵树的节点个数有可能大于叶节点两倍。(对)
没说是二叉树哦(╥╯^╰╥)
随便一根长一点直链就能举出例子

6.图的邻接矩阵表示空间复杂度与边数无关。 ( 对)

7.在图的广度遍历算法中,每个节点恰好仅入队一次。 ( 对)

8.给定一个带权有向图,图的节点为1,2…n,要计算节点1和n之间的最短路径或判断这样的路径不存在,这个问题阔以在多项式时间内解决 ( 对)

9.给定一个 图,确中是否存在给定一个图正好包含100 个节点的团是一个 NP-complete的问 题, 假设 P≠NP ( )

10.给定 一个图, 确定是否可以去除图中一半的节点后使得该可以三染色,这可以在多项式时间内完成, 假设 P≠NP ( )

二.单选题(10 题,每题 2 分)

1.哪种字符串的存储结构可以方便地进行插入,删除,并联及重新安排子字符串?( B)
A. 固定长度的存储结构
B. 链表存储结构
C. 具有固定最大长度的变存储结构
D. 数组存储结构
E. 以上都不是

2.下面哪个选项中的函数是按照渐进大小的增序排列?(C )
A. 2n, n + (log n)2, n3, 10n2, n log n
B. n + (log n)2, n3, 10n2, n log n, 2n
C. n + (log n)2, n log n, 10n2, n3, 2n
D. n + (log n)2, 10n2, n log n, n3, 2n
E. 2n, n3, 10n2, n log n, n + (log n)2

3.存储 10 个元素到一个哈希表,这 10 个元素的 key 是{5,28,19,15,20,12,33,17,10,18}。哈希表总共有 9 个 slots,哈希函数是 h(k) = k mod 9,并用链表解决冲突。哈希表中最长的链表长度是?( C)
mod之后:5 1 1 6 2 3 6 8 1 0
A. 1
B. 2
C. 3
D. 4

4.满二叉树的所有中间节点都有两个孩子节点。一个有 500 个叶子节点的满二叉树有多少个中间节点?( B)
A. 250
B. 499
C. 500
D. 501
E. 1000

5.以下哪一个关于树的描述是错误的?( A)
A. 非叶节点有可能没有孩子
B. 在一棵树中加一条边会形成一个环
C. 一棵树中并非每个节点都有父亲节点
D. 一棵包含一个节点的树高度为 0

A选项,不是叶子节点那下面不是肯定连着的吗?所以肯定有孩子呀
C选项是对滴,只剩一个根节点就没有父亲

6.下面二叉树的中序遍历是什么?( A)
在这里插入图片描述
A. DFBEAC
B. ABDFEC
C. FDEBCA
D. FDEBAC

7.Prim 算法是一种计算图的最小生成树算法,Floyd-Warshall 算法可用于计算有向图中所有节点对之间的最短路径。以下哪些表述肯定是正确的?(B)

i. Prim 算法是一种贪心算法。
ii. Prim 算法是一种动态规划算法。
iii. Floyd-Warshall 算法是一种贪心算法。
iv. Floyd-Warshall 算法是一种动态规划算法。
A. i 和 iii
B. i 和 iv
C. ii 和 iii
D. ii 和 iv

8.以下哪一个图的问题可以在线性时间内解决?( B)
A. 找到一个无向图中的最长简单环
B. 计算有向图的强连通分量
C. 解决带权有向图的单源最短路径问题
D. 找到一个无向图的最大团
汪同学说选B

9.下列关于归并排序和快速排序的陈述哪一项是对的?( A)
A. 都是用分治法
B. 给定一个长度为 n 的输入数组,都是需要O(n)的时间进行每一次切分
C. 都有相同的最坏时间复杂度
D. 以上都对
我是感觉AB都对,但是汪同学说,归并并不划分,只是在并的时候才花时间,大概这个意思
10.任何一个基于比较的算法在一个长度为 n 的数组中同时找出最大和最小值,至少需要数组元素之间的比较的次数与下列哪个最接近?(B )
A. n
B. 1.5n
C. 2n
D. n²

汪同学说见算法导论第九章第一页有证明,据说选B
哦~原来就是两个两个地拿进来比较,拿进来的这两个先比较一次,然后用小的比较最小值,大的比较最大值,这样每轮会比较3次,但是一共只会比较 n 2 \frac{n}{2} 2n 轮,总共就是 3 n 2 \frac{3n}{2} 23n
试了一下,为啥优化后反而时间还长了喃(T▽T),哦好像是产生的随机数太好了,如果换成递减数列,标答的方法就体现出来了~
改了一下,仅使用 i f 和 = if和= if=
第三种方法是有位同学提出来的,我觉得很有道理。。。

#include"bits/stdc++.h"
#define Rand(L,R) (L+sui()%(R-L+1))
using namespace std;
const int maxn=1e8+5;
int a[maxn],N=maxn-5;
clock_t t1,t2;
int solve1()
{
   
	int Max=a[1],Min=a[1];
	t1=clock();
	for(int i=2;i<=N;i++)
	{
   
		if(a[i]>Max)Max=a[i];
		if(a[i]<Min)Min=a[i];
	}
	t2=clock();
	cout<<"Max="<<Max<<" Min="<<Min<<endl;
	return t2-t1;
}
int solve2()
{
   
	int Max=-1e9,Min=1e9;
	t1=clock();
	for(int i=1;i<=N;i+=2)
	{
   
		if(a[i]<a[i+1])
		{
   
			if(a[i]<Min)<
评论 17
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值