- 以下哪几种方式可用来实现线程间通知和唤醒:( )
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^4T(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]
原文地址:https://www.cnblogs.com/l999q/p/12341586.html
时间: 2024-11-13 22:05:31