2.21专项测试复盘

  • 以下哪几种方式可用来实现线程间通知和唤醒:( )
    A. Object.wait/notify/notifyAll
    B. ReentrantLock.wait/notify/notifyAll
    C. Condition.await/signal/signalAll
    D. Thread.wait/notify/notifyAll

    解析:Condition是在java 1.5中才出现的,它用来替代传统的Object的wait()、notify()实现线程间的协作,相比使用Object的wait()、notify(),使用Condition1的await()、signal()这种方式实现线程间协作更加安全和高效。因此通常来说比较推荐使用Condition,在阻塞队列那一篇博文中就讲述到了,阻塞队列实际上是使用了Condition来模拟线程间协作。
    答案:AC

  • 算法的时间复杂度取决于()
    A. 问题的规模
    B. 待处理数据的初态
    C. A和B

    答案:C

  • 下列排序方法中,若将顺序存储更换为链式存储,则算法的时间效率会降低的是 。
    Ⅰ.插入排序 Ⅱ.选择排序 Ⅲ.起泡排序 Ⅳ.希尔排序 Ⅴ.堆排序
    A. 仅Ⅰ、Ⅱ
    B. 仅Ⅱ、Ⅲ
    C. 仅Ⅲ、Ⅳ
    D. 仅Ⅳ、Ⅴ

    解析:插入排序、选择排序、起泡排序原本时间复杂度是O(n2),更换为链式存储后的时间复杂度还是O(n2)。希尔排序和堆排序都利用了顺序存储的随机访问特性,而链式存储不支持这种性质,所以时间复杂度会增加,因此选D。
    答案:D

  • T(n) = 25T(n/5)+n^2的时间复杂度?
    A. O(n^2(lgn))
    B. O(n^2)
    C. O(lgn)
    D. O(n^3)

    解析:
    T(n) = 25T(n/5) + n^2
    = 25
    ( 25T(n/25) + (n/5)2 ) + n^2
    = 5^4
    T(n/52) + 2n^2
    = 5^(2k)
    T(n/5k) + kn^2
    根据主方法,有T(n) = aT(n/b)+O(n^d), 则a=5^(2k), b=5k, d=2, a=b^d。
    所以T(n)=O(n^d
    (lgn))=O(n^2(lgn)).

    答案:A

  • 下列关于线性表,二叉平衡树,哈希表存储数据的优劣描述错误的是?
    A. 哈希表是一个在时间和空间上做出权衡的经典例子。如果没有内存限制,那么可以直接将键作为数组的索引。那么所有的查找时间复杂度为O(1);
    B. 线性表实现相对比较简单
    C. 平衡二叉树的各项操作的时间复杂度为O(logn)
    D. 平衡二叉树的插入节点比较快

    解析:在平衡二叉树中插入结点要随时保证插入后整棵二叉树是平衡的,所以可能需要通过一次或多次树旋转来重新平衡这个树
    答案:D

  • 已知一段文本有1382个字符,使用了1382个字节存储,这段文本全部是由a、b、c、d、e字符组成,a 354次,b 483次,c 227次,d 96次,e 222次,对这5个字符使用哈夫曼编码。则以下说法正确的是?
    A. 使用哈夫曼编码后,使用编码值来存储这段文本将花费最少的存储空间、
    B. 使用哈夫曼编码后,a b c d e 这5个字符对应的编码值是唯一确定的
    C. 使用哈夫曼编码后,a b c d e 这5个字符对应的编码值可以有多套,但每个字符的编码位数是确定的
    D. d这个字符的编码位数最短,d这个字符的哈夫曼编码位数应该最长

    解析:对于哈夫曼树的最小权值的两个结点,位置可以互换,从而编码换了,但是编码的效率不变。
    答案:ACD

  • 折半查找与二元查找树的时间性能在最坏的情况下是相同的()
    A. 对
    B. 错

    解析:折半查找最坏的情况下查找log(n)+1次,而二叉查找树最坏的情况是查找n次。
    答案:B

  • 对长度为n的有序表进行折半查找的判定树的高度为「log2n+1]

猜你喜欢

转载自www.cnblogs.com/l999q/p/12341586.html
今日推荐