在上一篇文章中我们学习了数据结构的概念、算法复杂度的概念及其相关计算,这篇文章侧重考研408、企业面试数据结构的导论、算法复杂度等练习。
目录
判断题
1.时间复杂度是根据算法写成的程序在执行时耗费时间的长度,往往与输入数据的规模有关。(对)
2.斐波那契数列FN的定义为:F0=0, F1=1, F(N)=F(N−1)+F(N−2), N=2, 3, …。用递归函数计算FN的空间复杂度是O(N)。(对)
3.斐波那契数列FN的定义为:F0=0, F1=1, FN=FN−1+FN−2, N=2, 3, …。用循环函数计算FN的时间复杂度是Θ(FN).(错)
解析:在循环函数中,我们通过迭代的方式依次计算每个斐波那契数列的数值,只需要进行 N-1 次迭代即可。故O(N)
4.(NlogN)/1000是O(N)的。(错)
解析:(NlogN)/1000仍然是O(NlogN)级别的,而不是O(N)。因为在计算复杂度时,常数因子和低阶项都可以忽略不计,只考虑最高次项的系数,即1000可忽略。
5.抽象数据类型中,描述数据类型的方法与实现操作的算法和编程语言无关。(对)
6.解决问题的效率,跟数据的组织方式无关。(错)
解析:选择合适的数据结构可以显著提高算法的效率。例如,在查找操作中,使用哈希表可以实现常数时间的查找效率,而使用线性表则需要线性时间。
7.对应同一个数据结构,可以有不同的实现方法。(对)
解析:链表是一种常见的数据结构,它可以用指针来实现,也可以用数组来实现。
8.算法可以没有输入,但是必须有输出。(对)
9.递归程序往往简洁易懂,但占用较大空间。递归层数过大会造成系统堆栈溢出。(对)
10.
N^2*logN
和N*logN^2
具有相同的增长速度。(错)
解析:N*logN^2
相当于2N*longN
,显然比N^2*logN
小。
11.数据类型由数据对象集和数据集合相关联的操作集组成。(对)
解析:比如说数据类型中的整数类型(int),在操作集合方面,int支持的基本算术运算有加、减、乘、除等。
12.抽象数据类型中,描述数据类型的方法与数据存储的物理结构有关。(错)
解析:方法关注的是数据对象的逻辑结构和行为,而数据存储的物理结构则决定了如何在计算机内存中存储和表示这些数据对象。
13.抽象数据类型中,描述数据类型的方法与存放数据的机器有关。(错)
解析:方法关注的是数据对象的逻辑结构和行为,而数据存储的物理结构则决定了如何在计算机内存中存储和表示这些数据对象。
14.算法的优劣与算法描述语言无关,但与所用计算机有关。 (错)
解析:优秀的算法应当在不同计算机环境下都能够展现出高效的特性。
15.空间复杂度是根据算法写成的程序在执行时占用存储单元的长度,往往与输入数据的规模有关。(对)
16.斐波那契数列的递归实现与循环实现的时间复杂度均为O(n)(对)
17.描述抽象数据类型的方法与实现操作的算法无关,与数据存储的物理结构无关(对)
18.for(i=1;i<n;i*=2)
for(j=0;j<i;j++)
a++;
时间复杂度为O(N) (对)
19.与数据元素的形式、内容、相对位置无关的是数据的逻辑结构(对)
20.数据的存储结构包括数据的表示及数据元素的表示(对)
21.链表是链式存储结构,数组是随机存取的存储结构(对,因为访问一个节点不需要遍历之前的节点)
22.栈的栈顶是表首(对)
23.只带头指针的非循环双链表不适合作链队,因为查找队尾指针需要O(n)(对)
24.数据元素可由若干个数据项(data item)组成,数据项是数据的不可分割的具有独立含义的最小标识单位。(对)
25.线性结构的基本特征是:每个元素有且仅有一个直接前驱和一个直接后继。 【解答】错。
每个元素最多只有一个直接前驱和一个直接后继
26.数据结构研究的内容包括数据的逻辑结构、存储结构和数据的运算。(对)
选择题
1.给定程序时间复杂度的递推公式:T(1)=1,T(N)=2T(N/2)+N。则对该程序时间复杂度最接近的描述是:(选D)
A.O(N^2) B.O(N) C.O(logN) D.O(N*logN)
解析:根据递推公式T(N) = 2T(N/2) + N,可以使用主定理(Master Theorem)来求解时间复杂度。递推公式的形式符合主定理的第二种情况:T(N) = aT(N/b) + f(N),其中a=2,b=2,f(N)=N。
根据主定理,时间复杂度可以表示为:
- 若f(N) = O(N^c) 其中c < log_b(a),则 T(N) = O(N^log_b(a))
- 若f(N) = Θ(N^c * log^k(N)) 其中c = log_b(a),则 T(N) = O(N^c * log^(k+1)(N))
- 若f(N) = Ω(N^c) 其中c > log_b(a),且对某个ε > 0,有af(N/b) ≤ εf(N),则 T(N) = Θ(f(N))
在这个递推公式中,a=2,b=2,f(N)=N,因此c=1,log_b(a)=log_2(2)=1,c=log_b(a)。
所以根据主定理,时间复杂度最接近的描述是 D.O(N*logN)。
另一种方法是将T(N/2)替代为含有T(N/4)的式子,