当前位置: 首页 > news >正文

计算机考研408《数据结构》真题模拟——数据结构与算法基本概念

一、单项选择题

1.下列叙述能作为“算法必须具备的基本特性”之一的是( )。
A.对任意输入都能在有限步内结束(有穷性)
B.执行步骤可以随心所欲地改变
C.必须含有至少一个递归过程
D.必须使用某种特定编程语言描述

2.下列过程不能称为算法的是( )。
A.无输入时直接输出常数 1
B.对给定 nnn,若 n=0n=0n=0 输出 0,否则输出 1
C.反复随机选择数组中的两个元素交换,直到“看起来有序”为止
D.对给定整数 nnn,输出其二进制表示

3.关于“算法与程序”的关系,下列说法正确的是( )。
A.算法依赖具体语言,语言不同算法也不同
B.同一算法可用不同语言实现为不同程序
C.程序与算法完全等价
D.算法只描述数据,程序只描述操作

4.已知以下渐近复杂度从小到大的正确顺序是( )。
A.O(n)<O(log⁡n)<O(1)<O(nlog⁡n)O(n)<O(\log n)<O(1)<O(n\log n)O(n)O(logn)O(1)O(nlogn)
B.O(1)<O(log⁡n)<O(n)<O(nlog⁡n)O(1)<O(\log n)<O(n)<O(n\log n)O(1)O(logn)O(n)O(nlogn)
C.O(log⁡n)<O(1)<O(n)<O(n2)O(\log n)<O(1)<O(n)<O(n^2)O(logn)O(1)O(n)O(n2)
D.O(1)<O(n)<O(log⁡n)<O(n2)O(1)<O(n)<O(\log n)<O(n^2)O(1)O(n)O(logn)O(n2)

5.给定程序段:

cnt = 0;
for (i = 1; i <= n; ++i)for (j = 1; j <= n; j *= 2)++cnt;

其最坏情况时间复杂度为( )。
A.O(log⁡n)O(\log n)O(logn) B.O(n)O(n)O(n) C.O(nlog⁡n)O(n\log n)O(nlogn) D.O(n2)O(n^2)O(n2)

6.给定程序段:

cnt = 0;
for (i = 1; i <= n; i *= 2)for (j = i; j <= n; j += i)++cnt;

其最坏情况时间复杂度为( )。
A.O(log⁡n)O(\log n)O(logn) B.O(n)O(n)O(n) C.O(nlog⁡n)O(n\log n)O(nlogn) D.O(n2)O(n^2)O(n2)

7.对长度为 nnn 的有序数组进行递归二分查找,其最坏时间复杂度与辅助空间复杂度分别为( )。
A.O(log⁡n)O(\log n)O(logn)O(1)O(1)O(1)
B.O(n)O(n)O(n)O(1)O(1)O(1)
C.O(log⁡n)O(\log n)O(logn)O(log⁡n)O(\log n)O(logn)
D.O(n)O(n)O(n)O(log⁡n)O(\log n)O(logn)

8.对无序数组进行顺序查找,下列说法正确的是( )。
A.最好、最坏、平均情形的时间复杂度都为 O(n)O(n)O(n)
B.最好为 O(1)O(1)O(1),最坏为 O(n)O(n)O(n),平均约为 O(n)O(n)O(n)
C.最好为 O(n)O(n)O(n),最坏为 O(1)O(1)O(1),平均为 O(log⁡n)O(\log n)O(logn)
D.最好为 O(1)O(1)O(1),最坏为 O(log⁡n)O(\log n)O(logn),平均为 O(log⁡n)O(\log n)O(logn)

9.使用哈希表将查找从 O(log⁡n)O(\log n)O(logn) 降到期望 O(1)O(1)O(1) 的主要代价是( )。
A.牺牲算法的确定性
B.增加辅助空间的使用
C.降低输入规模
D.必须改用递归实现

10.将规模较大的问题分解为若干规模较小但结构相同的子问题,分别求解后再合并结果的设计思想是( )。
A.穷举法 B.递归法 C.分治法 D.贪心法

二、综合应用题

01.(概念与度量的基础练习)
(1)下列两个过程是否都可称为算法?请分别指出是否满足或缺少“五大特性”中的哪一项,并给出一句话理由
A.对数组 AAA 随机选择下标 iii,若 A[i]=kA[i]=kA[i]=k 则返回 iii,否则重复该步骤。
B.输入 nnnn≥0n\ge 0n0),若 n=0n=0n=0 返回 1,否则返回 n×fact(n−1)n\times \mathrm{fact}(n-1)n×fact(n1)

(2)分析下列程序段的最坏情况时间复杂度辅助空间复杂度(用 O(⋅)O(\cdot)O() 表示):

int f(int n){int s = 0;for (int i = 1; i <= n; ++i)for (int j = 1; j <= i; ++j)++s;return s;
}

要求:给出结论并用 1~2 句话说明推导依据(如“嵌套求和 ∑i=1ni\sum_{i=1}^{n} ii=1ni”等)。

单项选择题(答案与解析)

1.解析:A。
算法必须具备有穷性、确定性、可行性、输入性、输出性五特性。“对任意输入都能在有限步内结束”对应有穷性;B 违背确定性;C 并非必须递归;D 不要求特定语言。

2.解析:C。
“随机交换直到看起来有序”为止既不保证有穷性,又缺少确定性;A、B、D 都能在有限步内给出确定输出。

3.解析:B。
算法是解决问题的思想与步骤,可用不同语言实现为不同程序而保持逻辑一致;A、C、D 对算法与程序的关系理解错误。

4.解析:B。
常见复杂度从小到大:  O(1)<O(log⁡n)<O(n)<O(nlog⁡n)<O(n2)<⋯  \;O(1)<O(\log n)<O(n)<O(n\log n)<O(n^2)<\cdots\;O(1)<O(logn)<O(n)<O(nlogn)<O(n2)<。因此选 B。

5.解析:C。
外层循环 nnn 次;内层每次从 111 乘二到 ≤n\le nn,次数为 ⌊log⁡2n⌋+1\lfloor\log_2 n\rfloor+1log2n+1,总操作约为 n⋅log⁡nn\cdot\log nnlogn,故为 O(nlog⁡n)O(n\log n)O(nlogn)

6.解析:B。
外层 i=1,2,4,…≤ni=1,2,4,\ldots\le ni=1,2,4,n;对给定 iii 内层次数 ⌊n/i⌋\lfloor n/i\rfloorn/i。总工作量

∑k=0⌊log⁡2n⌋⌊n2k⌋≤2n, \sum_{k=0}^{\lfloor\log_2 n\rfloor}\Big\lfloor\frac{n}{2^k}\Big\rfloor \le 2n, k=0log2n2kn2n,

故为 O(n)O(n)O(n)

7.解析:C。
递归二分查找最坏时间 O(log⁡n)O(\log n)O(logn);递归深度为 ⌈log⁡2n⌉\lceil\log_2 n\rceillog2n,需要相应栈空间,空间为 O(log⁡n)O(\log n)O(logn)。迭代版可降为 O(1)O(1)O(1) 空间,但题干指定“递归”。

8.解析:B。
顺序查找最好命中首元素为 O(1)O(1)O(1),最坏未命中或在尾部为 O(n)O(n)O(n),平均比较次数约 (n+1)/2(n+1)/2(n+1)/2,量级为 O(n)O(n)O(n)

9.解析:B。
用哈希表把查找期望降到 O(1)O(1)O(1) 的代价是增加辅助空间(表与桶等),体现时间—空间权衡。A、C、D 与本质无关。

10.解析:C。
“分解→递归求解→合并”的套路即分治法。穷举法是枚举所有可能;递归法是实现形式,不一定有“分治”的分解与合并;贪心法与题意不符。


综合应用题(答案与解析)

01.(概念与度量的基础练习)

(1)判定是否为算法:
A.不是算法。缺少有穷性(可能无限重复,无法保证终止)与确定性(随机选择导致对同一输入结果不唯一)。
B.是算法。满足五特性:有输入 nnn,有输出 fact(n)\mathrm{fact}(n)fact(n);每步明确且确定;有递归出口 n=0n=0n=0 保证有穷性;操作(乘、减一、比较)均可行

(2)复杂度分析:
代码总计执行自增语句的次数为

∑i=1n∑j=1i1=∑i=1ni=n(n+1)2=Θ(n2), \sum_{i=1}^{n}\sum_{j=1}^{i}1=\sum_{i=1}^{n} i=\frac{n(n+1)}{2}=\Theta(n^2), i=1nj=1i1=i=1ni=2n(n+1)=Θ(n2),

最坏时间复杂度为 O(n2)O(n^2)O(n2)。仅使用常数个局部变量(s,i,js,i,js,i,j),无与 nnn 相关的额外结构,辅助空间复杂度为 O(1)O(1)O(1)

http://www.dtcms.com/a/354886.html

相关文章:

  • DQN(深度Q网络):深度强化学习的里程碑式突破
  • Java 线程池拒绝策略
  • vscode pyqt5设置
  • 基于SpringBoot的老年人健康数据远程监控管理系统【2026最新】
  • JavaSE——八股文
  • 医院信息系统(HIS)的开发架构解析,代码示例
  • 面试tips--并发--进程与线程的区别线程通信方式总结
  • k8s集群1.20.9
  • 虚拟相机的最佳实践参考是什么
  • k8s是什么?
  • docker和k8s的区别
  • Android 开发 - 数据共享(数据共享、内容提供者实现、动态权限申请)
  • 面试记录7 c++软件开发工程师
  • Flask测试平台开发实战-第二篇
  • 面试之HashMap
  • 面试tips--JVM(3)--类加载过程
  • 【赵渝强老师】MySQL数据库的多实例环境
  • 前端Sentry数据分析与可视化:构建智能化监控仪表板
  • 大数据毕业设计选题推荐-基于大数据的痴呆症预测数据可视化分析系统-Spark-Hadoop-Bigdata
  • 重置 Windows Server 2019 管理员账户密码
  • 基于SamOut的音频Token序列生成模型训练指南
  • 【Rust】 3. 语句与表达式笔记
  • Flask测试平台开发实战-第一篇
  • 安科瑞三相智能安全配电装置在养老院配电系统中的应用
  • Flask测试平台开发,登陆重构
  • F010 Vue+Flask豆瓣图书推荐大数据可视化平台系统源码
  • 新型Zip Slip漏洞允许攻击者在解压过程中操纵ZIP文件
  • 大模型训练推理优化(5): FlexLink —— NVLink 带宽无损提升27%
  • Android Glide插件化开发实战:模块化加载与自定义扩展
  • 使用MySQL计算斐波那契数列