1.以下哪种结构是逻辑结构,而与存储和运算无关:A
A.队列
B.双链表
C.数组
D.顺序表
解析: A、队列:可以是顺序或链式存储,是逻辑结构 B、双链表:链式存储 C、数组:按索引值从小到大存放在一片相邻的连续区域,定义了存储结构 D、顺序表:按索引值从小到大存放在一片相邻的连续区域,定义了存储结构
2.下列说法正确的是:AB
A.如果函数f(n)是O(g(n)),g(n)是O(h(n)),那么f(n)是O(h(n))
B.如果函数f(n)是O(g(n)),g(n)是O(h(n)),那么f(n)+g(n)是O(h(n))
C.如果a>b>1,是,logan是O(logbn),但logbn不一定是O(logan)
D.函数f(n)是O(g(n)),当常数a足够大时,一定有函数g(n)是O(af(n))
解析: A、(1) 根据O()定义可知. B、(2) 如果f(n)是O(g(n)),g(n)是O(h(n)), 则f(n)是O(h(n)),所以f(n)+g(n)是O(h(n)) C、(3)logan=log(n)/log(a),logbn=log(n)/log(b),所以前者与后者只差了一个常数项,所以logbn一定是O(logan) D、(4)当f(n)=n,g(n)=n*2, 无论a多大,g(n)都不可能是O(af(n)).
3.由大到小写出以下时间复杂度的序列:(5)(1)(2)(4)(3)
解析: 计算复杂度时,系数是可以忽略的。(5)和(1)是指数级复杂度,大于(2)(3)(4)多项式级复杂度,区别在于指数中是否有n。而(5)的指数里还有指数级复杂度的表达式,(1)的指数是n,为多项式级,故(5)比(1)复杂。对于(2)(3)(4),(2)的指数最大,为2.5,(4)的指数居中,为2,(3)的指数最小,解释如下:logn的任意实数次方的复杂度都小于n,故(logn)4比n复杂度低,故n*(logn)4比n*n复杂度低,故(4)比(3)复杂,故答案为(5)(1)(2)(4)(3)
4.已知一个数组a的长度为n,求问下面这段代码的时间复杂度: B
A.Ω(n^2)
B.O(n^2)
C.θ(n^2)
D.O(n)
解析: A、本代码实际上是求a中有序子数组中最长的长度。譬如,在[1, 8, 1, 2, 5, 0, 11, 9]中,最长的是[1, 2, 5],长度为3 。其时间复杂度与a中元素的实际取值状态相关。 1)若a的所有元素是按照降序方式排列。则外层循环n-1次,每次内层只执行一次,整个开销为θ(n) 2)若a的所有元素是按照升序方式排列。则外层循环n-1次,每次内层需要执行n-i-1次,整个开销为θ(n^2) 所以,一般来说,时间复杂度是Ω(n)的,也是O(n^2)