文章目录
2024年西安交通大学软件工程专业考研915真题
写在前面
本文旨在帮助考生了解915的知识点考察方法,我备考过程也做过那些机构所谓的回忆版真题,实在错漏百出让人难以理解出题人的想法,但是上了考场之后发现出题人真的非常严谨,于是考完之后就想把所有题目回忆出来,题目的选项以及数据实在无法全部记下来,考生可以自己造一些数据自行练习。
选择题
-
数据的最小单位是什么
-
某算法的时间复杂度为 T ( n ) = n l o g n + n 3 2 T(n) = nlogn + n^{\frac{3}{2}} T(n)=nlogn+n23,问下列哪个复杂度表示是错的
A. Ω ( n l o g n ) Ω(nlogn) Ω(nlogn)
B. Ω ( n 3 2 ) Ω(n^{\frac{3}{2}}) Ω(n23)
C. Θ ( n 3 2 ) Θ(n^{\frac{3}{2}}) Θ(n23)
D. O ( n l o g n ) O(nlogn) O(nlogn)
-
给定数据,求哈夫曼树的外部结点带权路径长度
-
给定数据,按顺序插入2-3树,求根节点的数据
-
Floyd的邻接矩阵的k次方的 D i j D_{ij} Dij是什么含义
-
在装载因子a<1的哈希表中,线性探测法和平方探测法能否保证一定插入
-
给定对称矩阵 A [ 1 ... 15 ] [ 1 ... 15 ] A[1...15][1...15] A[1...15][1...15],按列优先的顺序放入 B [ 0 ... 120 ] B[0...120] B[0...120]中,问 A [ 10 ] [ 5 ] A[10][5] A[10][5]对应B数组的下标是
-
判断下列说法正确的是
A. 对图的一次dfs可以遍历到图的所有节点
B. 有向图的邻接表和逆邻接表的结点个数不相等
C. 一棵树用左孩子右兄弟来表示得到的二叉树的根节点没有右儿子
D.
-
一棵哈夫曼树有m个叶子节结点,若用二叉链表存储,则有多少个空链域
-
对图片的像素颜色进行分类,以下哪个算法的效率最快
A. HashTable
B. Heap
C. 并查集
D. AVL
填空题
-
O ( l o g ( N 2 ) ) O(log(N^2)) O(log(N2)), 0.000001 N 0.000001N 0.000001N, O ( l o g ( 2 N ) ) O(log(2^N)) O(log(2N)), O ( l o g N ) O(logN) O(logN), O ( N l o g N ) O(NlogN) O(NlogN), O ( 4 N ) O(4^N) O(4N), 对于相同N,请按照增长率从低到高排序
-
一棵高为4的AVL,最少有多少个结点,最多有多少个结点(树根高为1)
-
为什么一个正序数组可以看作一个小根堆
-
若一个有向图中,结点编号为1到k,若两点存在边当且仅当结点编号i < j,问图中有多少条边,有多少个拓扑排序
-
给出3个BST查找数据的比较过程序列,构建出这棵BST,求这棵树的先序遍历序列
-
对于全部元素相同的数组,插入排序的算法复杂度是多少?快速排序的复杂度是多少?(用O表示)
-
给你中缀表达式,写出它的后缀表达式
-
每次从未排序的选一个,和已经排序的进行比较,请问是什么排序方法
-
逆序输出AVL的所有偶数,AVL中有N个元素,请问时间复杂度
-
循环队列队头是F,对尾是R,长度是M,求队列现有元素的个数(对头指向第一个结点,队尾指向最后一个结点的后面一个)
简答题
-
(1) 用数学归纳法证明 leaves(T) ≤ internal (T) + 1,其中leaves(T)表示树T中的叶子节点个数,internal(T) 是树T内部节点的个数
(2) 对于下列两个函数,g[N]只会返回true或false,问两个函数分别的最好时间复杂度和最坏时间复杂度是多少,用Θ表示
cppvoid fun1(int N) { if (N == 0) return; fun1(N - 1); if (g[N - 1]) fun1(N - 1) } void fun2(int N) { if (N == 0) return; fun2(N / 2); if (g[N / 2]) fun2(N / 2); }
-
(1) 对于下列函数,问fun(1234)的值是多少,时间复杂度是多少
cppint fun(int N) { if (N < 10) return N * 10 + N; int a = fun(N / 10); int b = fun(N % 10); return a * 100 + b; }
(2) 对于上述函数,结合数据结构栈,把递归改成递推,写出相关代码加上必要注释
-
定义一个先中序遍历,代码如下
cppvoid Prein(TNode *root) { if (root == NULL) return; print(root -> data); // 访问节点 Prein(T -> lchild); print(root -> data); // 访问节点 Prein(T -> rchild); }
(1) 给定数据,构造一棵BST
(2) 写出(1)中的先中序遍历序列
(3) 给定一个先中序遍历序列,构造出二叉树
(4) 给定先中序遍历序列 3 3 3 3 3 3 4 4,写出符合这个序列的所有可能的二叉树
-
给定一个图的邻接矩阵
(1) 以A为起始点,按照字母顺序优先,写出DFS和BFS序列
(2) 分别写出普利姆和克鲁斯卡尔算法求最小生成树的过程,按照选边的顺序(例如:(A,B))普利姆算法以A为起始点
(3) 求出Dijikstra算法以A为起点到其他所有点的最短路径,并画出最短路径生成树
(4) Dijkstra算法适用于正权图,当出现负权边时会失效,对于从A到G的路径中,改变哪一条边为负会让(3)中求的最短路径改变,这种边可能不止一条,请举例出所有边,并解释原因
-
给定长度为9的哈希表,哈希函数是h(k) = k % 9
(1) 若哈希表中都是普通链表,画出哈希表并求平均查找长度
(2) 若哈希表中都是AVL,画出哈希表并求平均长度
-
(1) 小明同学认为插入排序中最坏和平均的时间复杂度都是 O ( N 2 ) O(N^2) O(N2) 的,如果数组正序的话,那么不需要进行交换,则时间复杂度是O(1)的,你认为他说的对吗?说明理由
(2) 下面给出四个排序算法进行过程中某个时刻的序列情况,判断是分别是什么排序算法,备选的有SelectionSort、MergeSort、QuickSort、HeapSort
① 04 02 05 03 09 07 08 12 15 62 84 15 72 84 26 17
② 84 87 92 98 12 15 27 49 30 60 71 84 02 04 06 08
③ 01 02 04 92 58 91 28 94 27 59 29 12 49 20 18 22
④ 01 04 02 18 29 03 05 12 84 28 49 17 28 91 26 48
-
亲和数,又称相亲数、友爱数、友好数,指两个正整数中,彼此的全部约数之和(本身除外)与另一方相等,求10000以内的所有亲和数,给出完整代码
样例输出:
220:1 2 4 5 10 11 20 22 44 55 110
284:1 2 4 71 142
-
给定两个字符串s和t,s和t的长度最大是n,判断s和t的相同字母的数量是否相等,大小写敏感,且时间复杂度要求在O(n),除了输入输出不能用字符串相关的函数,如果是则输出true,不是输出false,给出完整代码