| T | F |
|---|
解析:如三个顶点三条边连成一个三角形的图每个顶点度为2
| T | F |
|---|
解析:递归次数,取决于递归树,而递归树取决于轴枢的选择。树越平衡,递归次数越少。而对分区的长短处理顺序,影响的是递归时对栈的使用内存,而不是递归次数。
| T | F |
|---|
解析:映射到同一散列地址的关键字称为同义词。
| T | F |
|---|
解析:堆排序仅需一个记录大小供交换用的辅助存储空间,所以空间复杂度为 O ( 1 ) O(1) O(1)
| T | F |
|---|
解析:给定带权无向连通图G,任意一条边e∈G且有e为G中权值最小的边(或之一),则存在一个G的最小生成树G’使e∈G’。这个命题是真的。证明可以直接借用Kruskal算法的正确性,因为选取某个权值最小边的操作正是Kruskal算法的第一步操作,你爱挑哪个都行,所以一定存在一个最小生成树包含某个最小边。
| T | F |
|---|
解析:
| 选项 | |
|---|---|
| A | 86,65,74,33,49,12,50,26 |
| B | 86,74,65,49,33,12,50,26 |
| C | 12,26,65,33,49,74,86,50 |
| D | 12,26,33,65,49,74,50,86 |
解释:如果堆的有序状态因为某个节点变得比它的父节点更大而打破,那么就需要通过交换它和它的父节点来修复堆。从最后一个非叶结点逐渐往上浮,直到有序。
c/(e-f)*(a+b),对应的后缀表达式是( )| 选项 | |
|---|---|
| A | ef-c/ab+* |
| B | c/e-f*a+b |
| C | cef-/ab+* |
| D | cef/-ab*+ |
解释:
给出一个中缀表达式:c/(e-f)*(a+b)
第一步:按照运算符的优先级对所有的运算单位加括号:式子变成了:((c/(e-f))*(a+b))
第二步:转换前缀与后缀表达式
前缀:把运算符号移动到对应的括号前面
则变成了:*(/(c-(ef))+(ab))
把括号去掉: */c-ef+ab前缀式子出现
后缀:把运算符号移动到对应的括号后面
则变成了:((c(ef)-)/(ab)+)*
把括号去掉: cef-/ab+*后缀式子出现
| 选项 | |
|---|---|
| A | O ( n n ) O(n\sqrt{n}) O(nn) |
| B | O ( n l o g 2 n ) O(nlog_{2}n) O(nlog2n) |
| C | O ( n 2 ) O(n^{2}) O(n2) |
| D | O ( 2 n ) O(2^n) O(2n) |
解释:
选择排序(Selection sort)是一种简单直观的排序算法。它的工作原理是每一次从待排序的数据元素中选出最小(或最大)的一个元素,存放在序列的起始位置,直到全部待排序的数据元素排完。 选择排序是不稳定的排序方法(比如序列[5, 5, 3]第一次就将第一个[5]与[3]交换,导致第一个5挪动到第二个5后面)
其实选择排序是非常简单的,和冒泡排序有异曲同工之妙。就是把元素分成两部分,一部分是有序的,另外一部分是无序的;每次循环从无序的元素中选取一个元素放到有序的元素中,依次循环到最后把所有元素都放到了有序那一部分中(也就是无序部分,元素为零);即两层循环, 所以选择排序和冒泡排序的最优的时间复杂度 和最差的时间复杂度 和平均时间复杂度 都为 : O ( n 2 ) O(n^{2}) O(n2)。
| 选项 | |
|---|---|
| A | 1010 |
| B | 1011 |
| C | 以上都错 |
| D | 1009 |
解释:
一个具有n个节点的完全二叉树,
其叶子节点的个数n0为: ⌈ n 2 ⌉ \left \lceil \frac{n}{2} \right \rceil ⌈2n⌉向上取整,或 ⌊ n + 1 2 ⌋ \left \lfloor \frac{n+1}{2} \right \rfloor ⌊2n+1⌋ 向下取整
度为1的节点的个数n1为:当n为偶数:1;当n为奇数:0
度为2的节点数为: ⌈ n 2 ⌉ − 1 \left \lceil \frac{n}{2} \right \rceil - 1 ⌈2n⌉−1向上取整,或 ⌊ n + 1 2 ⌋ − 1 \left \lfloor \frac{n+1}{2} \right \rfloor - 1 ⌊2n+1⌋−1 向下取整
| 选项 | |
|---|---|
| A | 抽象数据类型 |
| B | 数据关系 |
| C | 数据对象 |
| D | 数据元素 |
解释:
数据结构包括三方面的内容:逻辑结构、存储结构、数据的运算。
一个算法的设计(定义)取决于所选定的逻辑结构,而算法的实现依赖于所采用的存储结构。
抽象数据类型不关心存储结构,只描述数据的逻辑结构和抽象运算。
所以,它虽然不能实现一个数据结构,但可以定义一个数据结构。
| 选项 | |
|---|---|
| A | 236,301 |
| B | 301,892 |
| C | 485,301 |
| D | 43,892 |
解释:
基数排序是一种稳定的排序方法。由于采用最低位优先(LSD) 的基数排序,即第1趟对个位进行分配和收集的操作,因此第一-趟 分配和收集后的结果是{151, 301, 372, 892, 93, 43,485, 946, 146, 236, 327,9},元素372之前、之后紧邻的元素分别是301和892,故选C。
| 选项 | |
|---|---|
| A | 75 |
| B | 0 |
| C | 149 |
| D | 150 |
解释:
共有n+1个插入位置, 总移动次数为 ( 1 + n ) ∗ n 2 \frac{(1+n)*n}{2} 2(1+n)∗n, 平均移动次数为 [ ( 1 + n ) ∗ n 2 ] n + 1 = n 2 \frac{\left [ \frac{(1+n)*n}{2} \right ]}{n + 1} = \frac{n}{2} n+1[2(1+n)∗n]=2n
| 选项 | |
|---|---|
| A | 1020 |
| B | 820 |
| C | 818 |
| D | 1018 |
解释:
L O C [ 6 , 5 ] = 10 + ( ( 6 − 1 ) ∗ 100 + 5 − 1 ) ∗ 2 = 1018 LOC[6,5]=10+((6 - 1) * 100 + 5 - 1) * 2 = 1018 LOC[6,5]=10+((6−1)∗100+5−1)∗2=1018
将 A A A转化 A m n A_{mn} Amn, L O C [ 6 , 5 ] = L O C [ i , j ] LOC[6,5]=LOC[i,j] LOC[6,5]=LOC[i,j]
则 L O C [ i , j ] = 基 地 址 + ( ( i − 1 ) ) ∗ n + j − 1 ) ∗ 2 LOC[i,j]=基地址+((i-1))*n+j-1)*2 LOC[i,j]=基地址+((i−1))∗n+j−1)∗2
| 选项 | |
|---|---|
| A | top[1]=top[2] |
| B | top[1]+1=top[2] |
| C | |top[2]-top[1]|=0 |
| D | top[1]+top[2]=m |
解释:当两个栈的指针相邻时栈满,而非两个指针指向同一个位置,因为指向同一个位置会导致数据覆盖。

| 选项 | |
|---|---|
| A | 15、3、14、6 |
| B | 26、3、14、6 |
| C | 21、3、14、6 |
| D | 25、3、14、6 |
解释:

Dijkstra算法求最短路问题:
最短路径:当图是带权图时,把从一个顶点到图中其余任意一个顶点的一条路径(可能不止一条)所经过边上的权值之和,定义为该路径的带权路径长度 。把带权路径长度最短的那条路径称为最短路径。
Dijkstra算法从点a到其他各个顶点的最短路径:
abaabaabcabaabc,模式串 S = abaabc,采用 KMP 算法进行模式匹配,到匹配成功时为止,在匹配过程中进行的单个字符间的比较次数是:| 选项 | |
|---|---|
| A | 15 |
| B | 10 |
| C | 12 |
| D | 9 |
解释:KMP算法的想法是,设法利用这个已知信息,不要把"搜索位置"移回已经比较过的位置,继续把它向后移,这样就提高了效率。
已知a和c不匹配时,前面五个字符是匹配的。查表可知,最后一个匹配字符对应的部分匹配值为2,因此按照下面的公式算出向后移动的位数:
移动位数 = 已匹配的字符数 - 对应的部分匹配值
因为 5 − 2 = 3 5-2=3 5−2=3,所以将搜索词向后移动3位。单个字符间的比较次数为6次。
逐位比较,直到搜索词的最后一位,发现完全匹配,于是搜索完成。如果还要继续搜索(即找出全部匹配),移动位数 = 6 - 0,再将搜索词向后移动6位,这里就不再重复了。单个字符间的比较次数为4次。
不了解的看这里👉字符串匹配的KMP算法

| 选项 | |
|---|---|
| A | ABCDFE |
| B | ABCEDF |
| C | ABCEFD |
| D | ACBDEF |
解释:
拓扑排序只适用于有向图,判断有没有环、排序任务或者上课的顺序。
拓扑排序的步骤:
1.在有向图中选一个没有前驱的顶点且输出之
2.从图中删除该顶点和所有以它为尾的弧
重复上述两步,直至全部顶点均已输出,或者当前图中不存在无前驱的顶点为止。
在拓扑排序算法中,使用堆栈和使用队列产生的结果可能不同,也可能相同。