2020清华大学912计算机基础综合回忆(数据结构部分)

2020清华大学912计算机基础综合

数据结构

1. 判断正误( 12 x 2’ )

  1. n l o g n = Ω ( l o g n n ) ( C S D N 为 什 么 不 支 持 公 式 左 对 齐 啊 ) nlogn = \Omega (log^n n) (CSDN为什么不支持公式左对齐啊) nlogn=Ω(lognn)(CSDN)
  2. quicksort平均情况下时间复杂度为 O ( n l o g n ) O(nlogn) O(nlogn),最好情况下也是如此。
  3. 规模为 n n n的跳转表,期望塔高为 l o g n logn logn
  4. 败者树delmax()操作时间复杂度在渐进意义上优于胜者树。
  5. 完全二叉堆删除操作平均时间复杂度为 O ( 1 ) O(1) O(1),最坏情况为 O ( l o g n ) O(logn) O(logn)
  6. Crane左式堆合并堆A和堆B,则合并堆的右侧连节点未必都来自A或B的右侧链。
  7. 规模为 n n nAVL树一次插入操作,最坏情况下会引发 O ( l o g n ) O(logn) O(logn)次局部重构。
  8. n n n个元素组成一个完全二叉堆,至少需要 O ( n l o g n ) O(nlogn) O(nlogn)的时间。
  9. 红黑树中的每个节点的黑深度和黑高度之和必定相等。
  10. 基于CBA算法,可以在 O ( n ) O(n) O(n)时间内从 n n n个无序数中找到前10%
  11. 相对于封闭散列,开放散列能更好的利用系统缓存。
  12. DAGDFS后有 k k k条边被标记为backward,图中未必恰好含有 k k k个环。

2. 选择题( 6 x 3’ )

  1. DFS各节点按访问顺序____输出即为原图的拓扑排序序列。
  2. 若基数排序底层采用的排序算法不稳定,则基数排序的正确性和稳定性如何?
  3. 模式串文本串由随机英文字母和数字组成,蛮力算法的最好情况和平均情况相比KMP算法如何?
  4. RPN表达式值为2019,问缺失操作符是什么?(跟往年差不多,但具体表达式是啥记不清了)
  5. 多少个无差别节点构成真二叉树的种类,与2019对括号对构成的合法表达式一样多?
  6. 模式串HHF...HHFB...(一共15个字符),问使用改进后的next表,next[14]-next[0]等于多少?

3. 证明与证否( 5’ )

  1. 给定二叉树的先序和后序遍历序列,请问是否可以得到唯一的层次遍历?如果可以,请证明。如果不可以,请举出反例。

4. 算法题

struct BinNode{
    BinNode *lc;
    BinNode *rc;
    BinNode *parent;

    BinNode *zig(BinNode *t); //绕节点顺时针旋转,返回旋转后处于该节点处的节点。
    BinNode *zag(BinNode *t); //绕节点逆时针旋转,返回旋转后处于该节点处的节点。
}
  1. 给定规模为n的完全二叉树,求根节点左子树的规模,写出推导过程。
  2. 将第一道题你的思路用伪代码的方式实现,并添加相应的注释。
int lSize(BinNode *t){
    //your code
}
  1. 找到该完全二叉树在中序遍历下第k个节点,用伪代码实现,并添加相应注释。
BinNode *search(BinNode *t, int k){
    //your code
}
  1. 给定二叉树节点axax的祖先,试通过zigzag操作,把节点x调整为a的孩子节点,若anull,则调整x为根节点。
BinNode *regulate(BinNode *x, BinNode *a){
    //your code
}
  1. 使用上述已经实现的接口将给定二叉树转化为完全二叉树。
BinNode *balance(...){
    //your code 
    //时间复杂度不超过O(nlogn)
    //空间好像是就地或者线性复杂度
}
  1. 证明你所实现的balance能够达到题目要求的时间复杂度。

你可能感兴趣的:(2020清华大学912计算机基础综合回忆(数据结构部分))