算法分析与设计复习真题(上)

本文涉及的产品
公共DNS(含HTTPDNS解析),每月1000万次HTTP解析
全局流量管理 GTM,标准版 1个月
云解析 DNS,旗舰版 1个月
简介: 笔记

2019年本院真题,所有题目均已附上答案和个人分析。因为没有从老师那里要到答案,可能有些地方的解答表述不太妥当,但也足够解答题目了。这里把题目和解析一是为了自己日后算法比赛的快速复习回忆知识点,另一是为了造福在算法苦海中苦苦挣扎的各位同学。

 希望本文能发挥它该有的作用,如发现任何表述或逻辑问题,请私信我或在下方评论区回复。


一、选择


1、关于NP问题说法正确的是()

A、NP问题都是不可能解决的问题

B、P类问题包含在NP类问题中

C、NP完全问题是P类问题的子集

D、NP类问题包含在P类问题中

答案:B

解析:P类问题包含在NP类问题中。至于NPC问题,是NP问题中可在多项式时间复杂度中分析的问题,而P类问题是在多项式时间可解决。


2、算法分析中,记号Ω表示()

A、渐进下界

B、渐进上界

C、非紧上界

D、非紧下界

答案:A

解析:渐进上界O,渐进下界Ω,紧渐进界Θ,非紧上界ω,非紧下界o。


3、Fibonacci数列递归的边界条件有()条

A、1

B、2

C、3

D、4

答案:B

解析:直接或间接递归调用自身的函数为递归函数,递归函数由边界条件和递归方程组成。


4、使用分治算法求解不需要满足的条件是()

A、子问题必须是一样的

B、子问题不能够重复

C、子问题的解可以合并

D、原问颗和子问题采用相同的方法解

答案:A

解析:分治算法不要求子问题必须是一样的,但子问题必须相互独立,否则应该使用动态规划算法或贪心算法。


5、Strassen矩阵乘法是利用()实现的算法

A、分治策略

B、动态规划

C、贪心算法

D、回溯法

答案:A

解析:使用分治策略解决矩阵乘法可将2*2阶矩阵的乘法减少至7次。


6、下列不是动态规划算法基本步骤的是()

A、找出最优解的性质

B、构造最优解

C、计算最优解

D、定义最优解

答案:B

解析:动态规划解决问题分为四步:

(1)找出最优解的形式,并刻画其结构特征

(2)递归地定义最优值

(3)以自底向上的方式计算最优值

(4)根据计算最优值时的信息,构造最优解

在只需要求出最优值的情形下,步骤④可以省略。


7、在有7个顶点的凸多边形的三角剖分中,有()

A、5条弦和6个三角形

B、4条弦和5个三角形

C、5条弦和5个三角形

D、4条弦和4个三角形

答案:B

解析:凸多边形三角剖分问题中,n个顶点对应n-2个三角形和n-3条边。


8、备忘录方法是()的变形

A、分治法

B、动态规划法

C、贪心法

D、回溯法

答案:B

解析:动态规划法具备最优子结构性质和重叠子问题性质,而动态规划法的变性为备忘录方法。注意动态规划法时自底向上求解。


9、不可以使用分治法求解的是()

A、棋盘覆盖

B、线性时间选择

C、合并排序

D、0-1背包问题

答案:D

解析:0-1背包因其具有子问题重叠性质,不使用分治法求解。


10、在大整数乘法运算中,使用分治法可以把乘法次数减少到()次

A、4

B、3

C、2

D、1

答案:B

解析:大整数乘法中将乘法次数由4次减少为3次。


11、合并排序的平均时间复杂度为()

A、n

B、n2

C、n*1og n

D、2n

答案:C

解析:合并排序使用分治算法,平均和最坏时间复杂度都是nlog n。


12、在最接近点对问题中,考虑两点分处不同区域情况,己知一点坐标后,另一点可以考虑在另一侧划分成6个矩形区域内部,使得每个区域最多只能出现()个点

A、4

B、6

C、2

D、1

答案:D

解析:根据鸽笼定理,在另一侧划分的2d^d的大矩形可划分为6个小矩形,每个小矩形最多只能出现一个点。


13、通常以自底向上方式求最优解的是()

A、分治法

B、动态规划

C、贪心法

D、回溯法

答案:B

解析:自底向上求最优解的是动态规划,自顶向下求最优解的是备忘录算法和贪心算法。


14、使用动态规划算法求解捡硬币问题,当coins={5,1,2,10,6,2}时,最优解为()

A、13

B、21

C、17

D、12

答案:C

解析:最优解为17,选择5,10,2三枚硬币。


15、用动态规划法求解最大子段和问题,时间复杂度为()

A、log n

B、n

C、n2

D、n* log n

答案:B

解析:最大子段和可以用三种方法求解,分别是暴力算法、分治法和动态规划算法,时间复杂度分别为:O(n^2),O(nlogn),O(n)。


16、矩阵连乘问题可由()算法实现

A、分支限界

B、动态规划

C、贪心

D、回溯

答案:B

解析:矩阵连乘问题由动态规划算法求解。


17、一个问题可以使用动态规划算法或者贪心算法求解的关键特征是问题具有()

A、重叠子问题性质

B、最优子结构性质

C贪心选择性质

D、递归性质

答案:B

解析:最优子结构性质是使用动态规划算法或者贪心算法求解的关键特征。


18、哈夫曼编码贪心算法所需的计算时间为()

A、n2n

B、n1og n

C、2n

D、n

答案:B

解析:哈夫曼编码贪心算法所需的计算时间为n*1og n


19、最小生成树可以使用()算法求解

A、Prim

B、Kruskal

C、Prim和Kruskal

D、Dijkstra

答案:C

解析:Prim和Kruskal都可以解决最小生成树问题,Prim算法解决疏松图,Kruskal算法解决稠密图。


20、贪心算法能得到()

A、长江游艇问题的解

B、电路布线问题的解

C、背包问题的解

D、旅行售货员问题的解

答案:C

解析:贪心算法能解决背包问题的解,但0-1背包不能用动态规划算法解决。


21、以下活动安排问题的最优解包含()项活动

A、2

B、3

C、4

D、5

答案:C

解析:活动安排问题的策略是每次都选和之前己选活动相容且结束时间最早的活动,使用动态规划算法求解。


22、证明贪心算法不能求解该问题一般使用()

A、数学归纳法

B、演绎法

C、举反例

D、反证法

答案:D

解析:使用反证法反证贪心算法不能求解某一个问题。


23、最优装载问题的贪心策略是()

A、选择当前价值最大的箱子

B、选择当前重量最重的箱子

C、选择当前价值最小的箱子

D、选择当前重量最轻的箱子

答案:D

解析:选择当前重量最轻的箱子,再选择当前重量次轻的箱子。


24、最小生成树问题的重要应用方向为()

A、电路布线

B、删数问题

C、遍历图顶点

D、数据分组

答案:C

解析:最小生成树应用于图论知识的实际问题,解决遍历图顶点问题,也有其他不同的作用。例如:要在n个城市之间铺设光缆,主要目标是要使这n个城市的任意两个之间都可以通信,但铺设光缆的费用很高,且各个城市之间铺设光缆的费用不同,因此另一个目标是要使铺设光缆的总费用最低。这就需要找到带权的最小生成树。


25、贪心算法与动态规划算法的主要区别是具有()

A、最优子结构性质

B、贪心选择性质

C、可以构造最优解的能力

D、重叠子问题性质

答案:B

解析:贪心算法与动态规划算法的最大区别在于用贪心算法求解的题目具有贪心选择性质,用贪心算法求解的所有题目均可以用动态规划算法求解,反之不成立。


26、以深度优先方式系统搜索问题解的算法是()

A、分支限界法

B、概率算法

C、贪心算法

D、回溯法

答案:D

解析:回溯法使用深度优先策略,分支限界法使用广度优先或最大效益(最小耗费)优先的策略。


27、两艘船的装载问题用回溯法求解()

A、总能求得最优解,保证两艘船都装满

B、效率低于贪心算法,通常不用

C、可以求出解,但不一定能把两艘船装满

D、无法求解,也不能保证两艘船都装满

答案:C

解析:两艘船的装载问题类似于特殊的0-1背包问题,用回溯法(深度优先剪枝,但本质还是穷举)无法保证将两艘船都装满(会留下剩余的不可利用的空间)。


28、使用回溯法求解0-1背包问题()

A、效率比动态规划算法好很多

B、效率比分支限界法算法好很多

C、效率比贪心算法差很多

D、效率比分治法差很多

答案:A

解析:回溯法求解0-1背包问题时间复杂度为O(2^n),而动态规划算法求解的时间复杂度为O(n*2的n次方)。


29、批处理作业调度问题的解空间树为()

A、排列树

B、子集树

C、n叉树

D、随问题而动态变化的树

答案:A

解析:作业调度问题的解空间树为排列树。


30、符号三角形问题有解时,第一行的符号个数不可以为()个

A、4

B、6

C、7

D、8

答案:B

解析:要满足符号三角形的特性,需要整体的符号个数n(n-1)/2非奇数(n为第一行的符号个数),只有这样才满保证+号和-号各占n(n-1)/4。


31、四皇后问题如果不考虑对称性,一共有()个解

A、无

B、1

C、2

D、4

答案:C

解析:四皇后问题不考虑对称性的话,共有4个解。


32、关于着色问题,在一个平面或者球面中,一般情况下使用最多()种颜色,即可保证任意两个相邻区域颜色不同

A、4

B、5

C、6

D、7

答案:A

解析:4色猜想不多说了。


33、回溯算法的效率不依赖于下列哪项因素()

A、满足显约束值的个数

B、计算约束函数的时间

C、计算限界函数的时间

D、确定解空间的时间

答案:D

解析:回溯算法的效率依赖于满足显约束值的个数、计算约束函数的时间、计算限界函数的时间等。


34、回溯法和分支限界法求解问题的解空间树不会是()

A、有序树

B、排列树

C、子集树

D、无序树

答案:D

解析:解空间树都是有序树。有序树的定义为:若将树中每个结点的各子树看成是从左到右有次序的(即不能互换),则称该树为有序树(Ordered Tree) 。


35、优先队列式分支限界法选取扩展节点的原则是()

A、先进先出

B、后进先出

C、节点的优先级

D、从上到下,从左到右

答案:C

解析:在队列式分治限界法中,拓展节点按照节点的优先级为顺序,这里的优先级一般为最小耗费优先。


36、能求解布线问题的算法是()

A、分支限界法

B、动态规划法

C、回溯法

D、分治法

答案:A

解析:布线问题:与拓展节点相邻且可达的方格成为可行节点被加入活结点队列中,使用分支限界法求解。


37、解图的最大团问题,等价于求其补图的()

A、最小团

B、最大点独立集

C、最小点独立集

D、最小生成树

答案:B

解析:解图的最大团问题,等价于求其补图的最大点独立集。


38、装载问题或最优装载问题,通常不使用()方法求解

A、动态规划

B、贪心法

C、回溯法

D、分支限界法

答案:C

解析:回溯法求解装载问题或最优装载问题的时间复杂度较高,一般不用其求解。


39、关于连续邮资问题,以下说法不正确的是()

A、第一张邮票的面值只能是1

B、可以用回溯法或分支限界法求解

C、己选定x[1:i-1],最大连续邮资区间是[1:r],接下来x[i]的可取值范围是[x[i+1:r+1]

D、当n=5和m-4时,面值为(1,3,11,15,32)的5种邮票可以贴出邮资的最大连续邮资区间是1到70

答案:C

解析:x[i]接下来的可取值范围为[x[i-1]+1:r+1]。


40、下列算法中有时找不到问题解的是()

A、蒙特卡洛算法

B、拉斯维加斯算法

C、舍伍德算法

D、数值概率算法

答案:B

解析拉斯维加斯算法有时找不到问题的解,但只要找到解就一定是正确的。

相关文章
|
2月前
|
机器学习/深度学习 算法 搜索推荐
从理论到实践,Python算法复杂度分析一站式教程,助你轻松驾驭大数据挑战!
【10月更文挑战第4天】在大数据时代,算法效率至关重要。本文从理论入手,介绍时间复杂度和空间复杂度两个核心概念,并通过冒泡排序和快速排序的Python实现详细分析其复杂度。冒泡排序的时间复杂度为O(n^2),空间复杂度为O(1);快速排序平均时间复杂度为O(n log n),空间复杂度为O(log n)。文章还介绍了算法选择、分而治之及空间换时间等优化策略,帮助你在大数据挑战中游刃有余。
92 4
|
4月前
|
人工智能 算法 BI
第一周算法设计与分析 D : 两面包夹芝士
这篇文章介绍了解决算法问题"两面包夹芝士"的方法,通过找出两个数组中的最大最小值,计算这两个值之间的整数个数,包括特判不存在整数的情况。
|
4天前
|
缓存 算法 搜索推荐
Java中的算法优化与复杂度分析
在Java开发中,理解和优化算法的时间复杂度和空间复杂度是提升程序性能的关键。通过合理选择数据结构、避免重复计算、应用分治法等策略,可以显著提高算法效率。在实际开发中,应该根据具体需求和场景,选择合适的优化方法,从而编写出高效、可靠的代码。
18 6
|
27天前
|
并行计算 算法 测试技术
C语言因高效灵活被广泛应用于软件开发。本文探讨了优化C语言程序性能的策略,涵盖算法优化、代码结构优化、内存管理优化、编译器优化、数据结构优化、并行计算优化及性能测试与分析七个方面
C语言因高效灵活被广泛应用于软件开发。本文探讨了优化C语言程序性能的策略,涵盖算法优化、代码结构优化、内存管理优化、编译器优化、数据结构优化、并行计算优化及性能测试与分析七个方面,旨在通过综合策略提升程序性能,满足实际需求。
61 1
|
2月前
|
并行计算 算法 IDE
【灵码助力Cuda算法分析】分析共享内存的矩阵乘法优化
本文介绍了如何利用通义灵码在Visual Studio 2022中对基于CUDA的共享内存矩阵乘法优化代码进行深入分析。文章从整体程序结构入手,逐步深入到线程调度、矩阵分块、循环展开等关键细节,最后通过带入具体值的方式进一步解析复杂循环逻辑,展示了通义灵码在辅助理解和优化CUDA编程中的强大功能。
|
2月前
|
算法
PID算法原理分析
【10月更文挑战第12天】PID控制方法从提出至今已有百余年历史,其由于结构简单、易于实现、鲁棒性好、可靠性高等特点,在机电、冶金、机械、化工等行业中应用广泛。
|
3月前
|
算法 搜索推荐 开发者
别再让复杂度拖你后腿!Python 算法设计与分析实战,教你如何精准评估与优化!
在 Python 编程中,算法的性能至关重要。本文将带您深入了解算法复杂度的概念,包括时间复杂度和空间复杂度。通过具体的例子,如冒泡排序算法 (`O(n^2)` 时间复杂度,`O(1)` 空间复杂度),我们将展示如何评估算法的性能。同时,我们还会介绍如何优化算法,例如使用 Python 的内置函数 `max` 来提高查找最大值的效率,或利用哈希表将查找时间从 `O(n)` 降至 `O(1)`。此外,还将介绍使用 `timeit` 模块等工具来评估算法性能的方法。通过不断实践,您将能更高效地优化 Python 程序。
70 4
|
3月前
|
算法 程序员 Python
程序员必看!Python复杂度分析全攻略,让你的算法设计既快又省内存!
在编程领域,Python以简洁的语法和强大的库支持成为众多程序员的首选语言。然而,性能优化仍是挑战。本文将带你深入了解Python算法的复杂度分析,从时间与空间复杂度入手,分享四大最佳实践:选择合适算法、优化实现、利用Python特性减少空间消耗及定期评估调整,助你写出高效且节省内存的代码,轻松应对各种编程挑战。
69 1
|
2月前
|
算法
PID算法原理分析及优化
【10月更文挑战第6天】PID控制方法从提出至今已有百余年历史,其由于结构简单、易于实现、鲁棒性好、可靠性高等特点,在机电、冶金、机械、化工等行业中应用广泛。
|
3月前
|
算法 数据可视化
基于SSA奇异谱分析算法的时间序列趋势线提取matlab仿真
奇异谱分析(SSA)是一种基于奇异值分解(SVD)和轨迹矩阵的非线性、非参数时间序列分析方法,适用于提取趋势、周期性和噪声成分。本项目使用MATLAB 2022a版本实现从强干扰序列中提取趋势线,并通过可视化展示了原时间序列与提取的趋势分量。代码实现了滑动窗口下的奇异值分解和分组重构,适用于非线性和非平稳时间序列分析。此方法在气候变化、金融市场和生物医学信号处理等领域有广泛应用。
209 19

热门文章

最新文章