潜抡痰固射梨础潞沦龚的规仙
1.1 知识梳理
1、
给定男孩和女孩的两张喜欢列表,GS算法的结果对( )是最好的选择。
答案: 男孩
2、
稳定匹配问题的输出是( )
答案: 完美匹配 ;
没有不稳定配对 ;
稳定匹配
3、
给定一个匹配,如果Z喜欢A甚于匹配的女朋友,A喜欢Z甚于匹配的男朋友,那么A和Z是一个不稳定配对。
答案: 正确
4、
任意给定两张喜欢列表,稳定匹配问题只有一个稳定匹配。
答案: 错误
1.2 知识梳理
1、
解决问题的基本步骤是()。(1)算法设计(2)算法实现(3)数学建模(4)算法分析(5)正确性证明
答案: (3)(1)(5)(4)(2)
2、
问题的两个要素是( )和()
答案: 输入;
输出
3、
算法的性质有()
答案: 确定性;
有穷性;
输入;
输出
4、
程序总是在有穷步的运算后终止。
答案: 错误
5、
算法是一步步正确解决问题的方法或策略。
答案: 正确
6、
程序是算法用某种程序设计语言的具体实现,不能使用自然语言描述。
答案: 正确
7、
算法每次求解一个实例,而计算机需要求解该问题的所有实例。
答案: 错误
1.3 知识梳理
1、
从右向左计算p(x) = anxn + an-1xn-1 +… + a1x1 + a0 的数量级为()
答案: n
2、
问题变换的目的()
答案: 复杂变简单;
未知变已知;
隐式变显式;
难解变易解
3、
传教士和野人问题转换的图是状态空间图。
答案: 正确
4、
大学入学问题的核心是稳定匹配问题
答案: 正确
5、
一个问题的实例可以变换为更简单更便利的实例,变换为不同的表达形式。
答案: 正确
第一章 测验
1、
算法与程序的区别是()
答案: 有穷性
2、
解决问题的基本步骤是()。(1)算法设计(2)算法实现(3)数学建模(4)算法分析(5)正确性证明
答案: (3)(1)(5)(4)(2)
3、
下面说法关于算法与问题的说法错误的是()。
答案: 证明算法不正确,需要证明对任意实例算法都不能正确处理。
4、
问题变换的目的有()。(1)复杂变简单 (2)未知变已知 (3)隐式变显式 (4)难解变易解 (5)以上都是。
答案: (5)
5、
按照霍纳法则,计算p(x) = anxn + an-1xn-1 +… + a1x1 + a0 的数量级为()
答案: n
6、
描述算法的基本方法有( )。(1)自然语言(2)流程图(3)伪代码(4)机器语言
答案: B.(1)(2)(3)
7、
问题变换的方法有( )
答案: 实例简单化;
问题约简 ;
表达变换
8、
下面关于程序和算法的说法正确的是()。
答案: 算法的每一步骤必须要有确切的含义,必须是清楚的、无二义的。;
程序是算法用某种程序设计语言的具体实现。;
算法是一个过程,计算机每次求解是针对问题的一个实例求解
9、
最大独立集问题和()问题等价。
答案: 最大团;
最小顶点覆盖
10、
给定两张喜欢列表,稳定匹配问题的输出是( )
答案: 完美匹配;
没有不稳定配对;
最大匹配 ;
稳定匹配
11、
给定一个实例,如果一个算法能得到正确解答,称这个算法解答了该问题。
答案: 错误
12、
计算机每次求解是针对问题的每个实例求解。
答案: 错误
13、
同一数学模型使用不同的数据结构会有不同的算法,有效性有很大差别。
答案: 正确
14、
证明算法不正确,只需给出一个反例,算法不能正确处理即可。
答案: 正确
15、
同一算法只有一种形式描述
答案: 错误
16、
一个问题的同一实例可以有不同的表示形式。
答案: 正确
17、
算法必须在有穷时间终止
答案: 正确
18、
一个问题的算法必须在有穷时间终止,并且对一切合法的输入都能得出满足要求的结果。
答案: 正确
19、
问题的两个要素是输入和实例。
答案: 错误
20、
算法是一个语句集合,按照顺序执行语句,处理实例,得到正确答案。
答案: 正确
第二章 算法分析
2.1 知识梳理
1、
计算算法的时间复杂度只要选取()
答案: 最复杂部分的运行时间 ;
关键操作的运行时间 ;
在最坏情况下运行时间
2、
算法分析的两种方法是事前分析和事后统计。
答案: 正确
3、
算法分析的两个阶段是粗粒度比较数量级和细粒度比较各种情况。
答案: 正确
4、
求解问题的输入量,称为问题的规模。
答案: 正确
5、
时间复杂度就是算法运行的时间的度量,衡量算法的效率。
答案: 正确
2.2 知识梳理
1、
g(n)为f(n)的下界,记为:f(n)= (g(n))
答案: Ω
2、
f(n)=3n^3+7n^2+4nlogn =( )(n^3)
答案: θ
3、
O(f(n))+O(g(n)) = O(min{f(n),g(n)})
答案: 错误
4、
任何多项式时间算法都是好算法,都是有效的。
答案: 错误
5、
f(n)=(g(n)) 则 f(n)=Ο(g(n))且f(n)=Ω(g(n))
答案: 正确
6、
f=o(g)且g = o(h) 则 f=o(h)
答案: 正确
2.3 知识梳理
1、
如果 =0, 则 f(n)= (g((n))
答案: o
2、
logn!=Q( )
答案: nlogn
3、
n!=()
答案: ;
4、
答案: 正确
5、
对于任意 x > 0, log n = o(n^x)
答案: 正确
6、
, 常数a, b > 0.
答案: 正确
7、
对任意 r > 1 和 d > 0, nd = o(r^n).
答案: 正确
8、
, 常数a, b > 0.
答案: 正确
2.4 知识梳理
1、
顺序查找的时间复杂度为()
答案: θ(n)
2、
下面程序的时间复杂度是() i=1while(i<=n) do i=i*3
答案: Q(logn)
3、
快速幂求x^n的时间复杂度为O()
答案: logn
4、
T1(n)+T2(n)=O(max(f(n),g(n))),因此并行语句时间复杂度等于两者中高的复杂度。
答案: 正确
5、
O(f)*O(g)=O(f*g),因此循环语句的时间复杂度等于循环体的时间复杂度与循环次数的乘积。
答案: 正确
6、
从n个数中查找最大值的时间复杂度为W (n)
答案: 错误
2.5 知识梳理
1、
给定图G=(V,E), |V|=n, |E|=m, 其邻接矩阵的空间复杂度为( )
答案: θ(n^2)
2、
下面以空间换时间的方法有()
答案: 预处理 ;
预构造 ;
动态规划
3、
空间复杂度S(n)是算法执行所需所有空间的资源量
答案: 错误
4、
时空均衡可通过以时间换空间或以空间换时间实现
答案: 正确
5、
给定n个整数,n个数的取值范围为[1,k], 计数排序的时间复杂度是O (n+k) 。
答案: 正确
6、
使用散列可以降低查找的时间复杂度
答案: 正确
第二章 测验
1、
从资源划分,算法的复杂度分为()和()。
答案: 时间复杂度 空间复杂度
2、
算法复杂度分析的两种基本方法为( )和( )
答案: 事后统计 事前分析
3、
设f(N)、g(N)是定义在正数集上的正函数,如果存在正的常数C和自然数N0,使得当N≥N0时有f(N)≥Cg(N),则称函数f(N)当N充分大时有下界g(N),记作f(N)=W(g(N)),即f(N)的阶( )g(N)的阶。
答案: 不低于
4、
f(n)= 100 当n为奇数 f(n)=5n^2+3n. 当n为偶数 f(n)的渐进性态f(n)= W( )
答案: 1
5、
下面程序的时间复杂度为() x=1for i=1 to n dofor j=1 to i do for k=1 to j do
x++
答案: n^3
6、
对近似递增序列的线性表从小到大排序,使用哪种方法好?
答案: 插入排序
7、
给定n个元素的数组A,n=10^3, 使用折半查找比使用顺序查找大约快___倍。
答案: 100
8、
给定图G=(V,E), |V|=n, |E|=m, 遍历其邻接表的时间复杂度为θ( )
答案: n+m
9、
logn!=Q( )
答案: nlogn
10、
给定n个元素的数组A,n=10^3, 使用折半查找比使用顺序查找大约快___倍。
答案: 100
11、
下面程序的时间复杂度是() i=1while(i<=n)
do i=i*5
答案: Q(logn)
12、
给定n个整数,n个数的取值范围为[1,k],计数排序的时间复杂度是O (n+k) 。
答案: n+k
13、
给定图G=(V,E), |V|=n, |E|=m, 其邻接矩阵的空间复杂度为( )
答案: θ(n^2)
14、
顺序查找适合的数据结构是()
答案: 顺序存储;
链式存储
15、
f(n)=3n^3+7n^2+4nlogn =()(n^3)
答案: Ο;
Ω;
θ
16、
下面那些算法的时间复杂度为O(n^2)?
答案: 插入排序;
冒泡排序;
折半插入排序
17、
两个n*n的矩阵相加的时间复杂度是( )
答案: θ(n^2);
O(n^2);
W(n^2)
18、
以空间换时间的方法有()
答案: 预处理 ;
预构造;
动态规划
19、
时间复杂度是指算法最坏情况下的运行时间。
答案: 正确
20、
f(n)=O(g(n)) 且 g(n)=O(h(n)),则h(n)=O(f(n))
答案: 错误
21、
f(n)=O(g(n)) 则 f(n)^2=O(g(n)^2)
答案: 正确
22、
f(n)=3n^3+7n^2+4nlogn =O(n^2)
答案: 错误
23、
如果一个算法是多项式时间算法,该算法是有效的,是好算法。
答案: 正确
24、
n!=o(2^n)
答案: 错误
25、
答案: 正确
26、
折半查找的时间复杂度为Q(nlogn)
答案: 错误
27、
f(n)=θ(g(n)) 当且仅当 g(n)=θ(f(n))
答案: 正确
28、
f=O(g)当且仅当 g =Ω (f)
答案: 正确
29、
时间复杂度就是算法运行的时间的度量,衡量算法的效率。
答案: 正确
30、
求解问题的输入量,称为问题的规模 。
答案: 正确
31、
O(f(n))+O(g(n)) = O(min{f(n),g(n)})
答案: 错误
32、
任何多项式时间算法都是好算法,都是有效的。
答案: 错误
33、
任何情况下,复杂性渐近阶低的算法都比复杂性渐近阶高的算法有效。
答案: 错误
34、
对任意 r > 1 和 d > 0, n^d= o(r^n).
答案: 正确
35、
f(n)=O(g(n)) 则 log(f(n)) =O(log(g(n)))
答案: 正确
36、
常数阶算法的运行时间与规模n无关。
答案: 正确
37、
从n个数中查找最大值的时间复杂度为W (n)
答案: 错误
38、
使用合适的数据结构可以同时减少时间和空间
答案: 正确
第三章 枚举算法
3.1 知识梳理
1、
枚举算法的优化方法有()
答案: 减少枚举变量;
减少枚举变量的值域;
优化算法;
优化数学模型
2、
冒泡排序的时间复杂度为O(nlogn)
答案: 错误
3、
0/1背包问题的时间复杂度为O(n2^n)
答案: 正确
4、
在某些问题实例中枚举是唯一的解决方法。
答案: 正确
5、
最好情况下,冒泡排序和选择排序的时间复杂度都是O(n^2)
答案: 错误
3.2 知识梳理
1、
子集生成方法有()
答案: 增量构造法;
二进制法;
位向量法
2、
位向量法生成子集,不直接构造子集本身。
答案: 正确
3、
二进制法生成子集,子集与运算可以生成并集
答案: 错误
4、
增量构造法生成子集前需要定序
答案: 正确
第三章 测验
1、
便于实现集合操作的子集生成算法是()
答案: 二进制法
2、
logn^2=( )(logn+5)
答案: θ
3、
0-1背包问题的枚举算法,如果在百万次每秒的计算机上运行,1年可以计算的问题规模估计是?
答案: 40
4、
A公司处理器速度是B公司的100倍。对于复杂度为n^2的算法,B公司的计算机可以在1小时内处理规模为n的问题,A公司的计算机在1小时能处理的问题规模是()
答案: 10n
5、
直接插入排序的时间复杂度是()。
答案: O(n^2)
6、
选择排序的时间复杂度是O(____)
答案: n^2
7、
分数拆分问题的枚举算法通过()方法进行了优化。
答案: 减少枚举变量 ;
减少枚举变量的值域 ;
优化数学模型
8、
子集生成方法有()
答案: 增量构造法 ;
二进制法;
位向量法
9、
枚举算法的优化方法有()
答案: 减少枚举变量 ;
减少枚举变量的值域 ;
优化算法;
优化数学模型
10、
冒泡排序的时间复杂度为W(n^2)
答案: 错误
11、
0-1背包问题的枚举算法的时间复杂度为O(2^n)
答案: 错误
12、
增量构造法生成子集前需要对集合中元素从小到大排列。
答案: 正确
13、
二进制法生成子集,子集与运算可以生成并集
答案: 错误
14、
枚举法适用于问题的小规模实例。
答案: 正确
15、
减少枚举变量可以减少枚举算法的时间复杂度
答案: 正确
16、
位向量法生成子集,子集或运算可以生成差集
答案: 错误
17、
分块查找一般设分块的长度是n/2.
答案: 错误
18、
旅行商问题的枚举算法的时间复杂度为O(n!)
答案: 正确
19、
在某些问题实例中枚举是唯一的解决方法。
答案: 正确
20、
蛮力法适用于问题的小规模实例。
答案: 正确
第四章 贪心算法
4.1 知识梳理
1、
部分背包问题的时间复杂度是O( )
答案: nlogn
2、
贪心算法的思想是依据贪婪准则作出决策,逐步构造解值。
答案: 正确
3、
贪心算法的思想是寻求局部最优解,逐步达到全局最优解
答案: 正确
4、
贪心算法总能找到可行解,并且是最优解。
答案: 错误
5、
部分背包问题的证明方法是领先的方法
答案: 正确
4.2 知识梳理
1、
原问题的最优解包含其子问题的最优解是最优子结构的性质。
答案: 正确
2、
通过一系列局部最优的选择(贪心选择)达到全局最优是贪心选择的性质
答案: 正确
3、
问题的全过程可以分为若干个阶段,而且在任何一个阶段x后的行为都只仅仅依赖于x的状态,而与x之前如何达到这种状态的方式无关。这是无后效性的性质
答案: 正确
4、
负权的最短路问题可以使用Dijkstra算法计算。
答案: 错误
5、
贪心法处理问题的核心是贪婪准则的选取
答案: 正确
6、
贪心算法一般在开始贪心策略前会进行预处理,预处理后再进行最优化选择。
答案: 正确
4.3 知识梳理
1、
区间调度问题贪心算法的时间复杂度是()
答案: O(nlogn)
2、
交换论证方法把任意一个解逐渐变为贪心算法的解,不会影响其最优性。
答案: 正确
3、
区间划分问题的证明方法是界的方法
答案: 正确
4、
区间选点问题的预处理方法是按照区间的终点递增排序
答案: 正确
5、
区间调度问题可以变换为最大独立集问题
答案: 正确
4.4 知识梳理
1、
Kruskal算法的时间复杂度是(),更适用于稀疏图。
答案: mlogn
2、
最小生成树问题可以使用的算法有( )
答案: Kruskal ;
Prim;
Solim
3、
MST是最小连通子图包含n 个顶点和n-1条边
答案: 正确
4、
Prim算法的贪婪准则是选取割集中的最小边
答案: 正确
5、
Kruskal算法的预处理是边权非递减排序。
答案: 正确
6、
设S是顶点子集,e是正好一个端点在S中的边中的最小边,那么最小生成树中肯定包含e.
答案: 正确
4.5 知识梳理
1、
最优前缀码数属于( )
答案: 变长码;
前缀码 ;
哈夫曼编码
2、
前缀码中任一字符的0-1编码都不是其他字符的前缀
答案: 正确
3、
哈夫曼编码给出现频率高的字符较短的编码,出现频率较低的字符以较长的编码,可以大大缩短总码长。
答案: 正确
4、
哈夫曼编码的预处理是根据频率大小,构造优先队列。
答案: 正确
第四章 测验
1、
贪心算法基本要素有( )和最优子结构性质。
答案: 贪心选择性质
2、
下面不是证明贪心算法证明方法的有()。
答案: 优化
3、
未来与过去无关指的是( )的性质
答案: 无后效性
4、
使目标函数最大(小)的解是问题的()
答案: 最优解
5、
对于稠密图,使用()算法计算MST更适合
答案: Prim
6、
把任意一个解逐渐变为贪心算法的解,不会影响其最优性。这种证明方法是_()
答案: 交换论证
7、
原问题的最优解包含其子问题的最优解是贪心算法的()性质。
答案: 最优子结构性质
8、
区间调度问题贪心算法的时间复杂度是()
答案: O(nlogn)
9、
最小生成树问题可以使用的算法有( )
答案: Kruskal ;
Prim ;
Solim
10、
区间问题包含()
答案: 区间调度;
区间划分;
区间选点;
区间覆盖
11、
贪心算法的基本要素是()
答案: 贪心选择的性质 ;
无后效性性质;
最优子结构性质
12、
贪心算法的证明方法有()
答案: 领先 ;
交换论证;
界;
反证;
归纳
13、
最小生成树问题可以使用的算法有( )
答案: Kruskal ;
Prim ;
Solim
14、
最优前缀码数属于( )
答案: 变长码 ;
前缀码 ;
哈夫曼编码
15、
贪心算法总能找到可行解,但未必是最优解。
答案: 正确
16、
贪心选择通过一步步选择得到问题的解,每一步的局部最优解都构成全局最优解的一部分。
答案: 正确
17、
问题的最优子结构性质是该问题可用贪心算法或动态规划算法求解的关键特征。
答案: 正确
18、
MST中若在树中任意增加一条边,将出现一个回路;若去掉一条边,将变成非连通图。
答案: 正确
19、
设C是一个环, f 是C中的最大边,那么最小生成树中肯定包含f.
答案: 错误
20、
Kruskal算法的贪婪准则是每一次选取不构成环路的最小边。
答案: 正确
21、
哈夫曼编码的平均码长最小
答案: 正确
22、
负权的单源最短路问题可以使用Dijkstra算法求解。
答案: 错误
23、
如果e是图G中权重最小的边,它至少是G的一颗最小生成树的边。
答案: 正确
24、
如果图G中每条边的权重都是互不相同的,图G必定只有一颗最小生成树。
答案: 正确
25、
问题的可行解是满足约束条件的解
答案: 正确
26、
贪心算法的思想是寻求局部最优解,逐步达到全局最优解
答案: 正确
27、
贪心算法总能找到可行解,并且是最优解。
答案: 错误
28、
负权的最短路问题可以使用Dijkstra算法计算。
答案: 错误
29、
未来不影响过去指的是无后效性的性质。
答案: 错误
30、
贪心法处理问题的核心是贪婪准则的选取
答案: 正确
31、
区间划分问题的预处理方法是按照开始时间递减排序。
答案: 错误
32、
区间选点问题的预处理方法是按照区间的终点递增排序
答案: 正确
33、
设S是顶点子集,e是正好一个端点在S中的边中的最小边,那么最小生成树中肯定包含e.
答案: 正确
34、
Kruskal算法的预处理是边权非递减排序。
答案: 正确
35、
任意变长码的平均码长最小
答案: 错误
36、
哈夫曼编码的贪婪准则是从队列中选择频率最小的两个。
答案: 正确
37、
哈夫曼编码给出现频率高的字符较短的编码,出现频率较低的字符以较长的编码,可以大大缩短总码长。
答案: 正确
第五章 递推算法
5.1 知识梳理
1、
递归函数的要素是递归方程和()
答案: 边界条件
2、
递归一般用于解决的问题有()
答案: 数据的定义是按递归定义的;
问题解法按递归实现;
数据的结构形式是按递归定义的
3、
递推是从小规模的问题推解出大规模间题的一种方法,是选代算法的最基本的表现形式。
答案: 正确
4、
递归与循环都是解决“重复操作”的机制
答案: 正确
5、
递归的效率高于递推
答案: 错误
6、
每个递归算法原则上总可以转换成与它等价的迭代算法;反之不然 。
答案: 错误
5.2 知识梳理
1、
使用递推关系求解问题的常用方法有()
答案: 递归 ;
正推 ;
倒推;
迭代
2、
倒推法是从后向前推解问题的方法.
答案: 正确
3、
不知前提条件的情况下,经常使用倒推求解问题。
答案: 正确
4、
由结果倒过来推解前提条件是倒推方法的一种
答案: 正确
5、
由于存储的要求从后向前进行推算是倒推方法的一种
答案: 正确
5.3 知识梳理
1、
迭代法分为( )
答案: 直接迭代;
差消迭代;
换元迭代
2、
求解递推方程的方法有()
答案: 迭代法 ;
递归树;
归纳法;
主定理
3、
主方法可以求解满足T(n)=aT(n/b) + f (n) 形式的递推方程, 则下列关于方程正确的是?A 对于系数a,必须满足a>=1B对于系数b,必须满足b>1C若对于常数ε>0,f(n)=O(nlogba-ε),则T(n)=Θ(nlogba)D若f(n)=O(nlogba),则T(n)=Θ(nlogbalogn)
答案: 对于系数a,必须满足a>=1;
对于系数b,必须满足b>1;
若对于常数ε>0,, 则
;
若,则
4、
迭代法从原始递推方程出发,反复将对应方程左边的函数用右边等式带入,直至得到初值,然后将所得的结果化简。
答案: 正确
5、
迭代一般用于一阶递推方程,高阶方程需要使用差消法化简为一阶方程求解
答案: 正确
6、
快速排序平均情况下的时间复杂度是O(nlogn)
答案: 正确
第五章 测验
1、
从大规模问题逐步化为小规模问题的算法是()
答案: 递归
2、
求解高阶递推方程一般使用()迭代方法
答案: 差消迭代
3、
下面有关递归与迭代的说法错误的是()
答案: 每个递归算法原则上总可以转换成与它等价的迭代算法
4、
主方法可以求解满足T(n)=aT(n/b) + f (n) 形式的递推方程, 则下列关于方程中的约束中不准确的是?
答案:
5、
T(n) = 2T(n/2) +n^2,T(1)=1,则 T(n) =()
答案: Q(n^2)
6、
从小规模问题推解出大规模问题的算法是()
答案: 递推
7、
递归函数的要素是()
答案: 边界条件 ;
递归方程
8、
递归变为非递归的方法有()
答案: 模拟栈 ;
递推 ;
尾递归
9、
递归一般用于解决问题有():
答案: 数据的定义是按递归定义的。 ;
问题解法按递归实现。;
数据的结构形式是按递归定义的
10、
求解递推方程的迭代法分为( )
答案: 直接迭代 ;
差消迭代;
换元迭代
11、
T(n) = T(n-1) + n ,T(1)=1,则 T(n) =()
答案: W(n^2);
n(n+1)/2;
(n^2);
Q(n^2)
12、
求解快速排序时间复杂度使用的方法有()
答案: 迭代法 ;
递归树;
归纳法 ;
主定理
13、
正推是从小规模的问题推解出大规模间题的一种方法
答案: 正确
14、
循环用于重复性的工作。循环体的特点是:“以不变应万变”。
答案: 正确
15、
递归算法是直接或间接地调用自身的算法。
答案: 正确
16、
尾递归中的递归调用是整个函数体中最后执行的语句且它的返回值不属于表达式的一部分。
答案: 正确
17、
一般来说,递归的效率高于递推。
答案: 错误
18、
递推是从问题的最终目标出发,逐渐将复杂问题化为简单问题,最终求得问题。
答案: 错误
19、
有些问题采用倒推法,容易理解和解决。
答案: 正确
20、
递归是从简单问题出发,一步步的向前发展,最终求得问题,是正向的。
答案: 错误
21、
一般来说,递推的效率高于递归,因此将递归转化为递推
答案: 正确
22、
每个递归算法原则上总可以转换成与它等价的迭代算法,反之不然。
答案: 错误
23、
由结果倒过来推解前提条件是倒推方法的一种。
答案: 正确
24、
迭代法从原始递推方程出发,反复将对应方程左边的函数用右边等式带入,直至得到初值,然后将所得的结果化简。
答案: 正确
25、
快速排序和插入排序最好情况下的时间复杂度是O(nlogn)
答案: 错误
第六章 分治算法
6.1 知识梳理
1、
合并排序的时间复杂度是O()
答案: nlogn
2、
分治法的适用条件是( )。
答案: 问题可以分解为规模较小的子问题;
小规模子问题可解;
子问题可合并为问题的解 ;
子问题相互独立
3、
分治法的设计思想是大事化小,各个击破,分而治之。
答案: 正确
4、
每次都将问题分解为原问题规模的一半进行求解,称为二分法
答案: 正确
5、
分治法一般在每一层递归上有分解、解决、合并三个步骤
答案: 正确
6、
减治法是把一个问题转化成一个子问题来解决,从子问题的解得到原问题的解。
答案: 正确
7、
分治法将原问题分解为若干个规模较小、相互独立、完全相同的子问题。
答案: 错误
6.2 知识梳理
1、
减治法常见的形式有()
答案: 减一个常量 ;
减一个常量因子;
减可变规模
2、
二分法子问题独立而不相似的情况可以转化为相似子问题求解
答案: 正确
3、
二分法子问题不独立的情况可以计算,但计算量大,一般使用动态规划计算。
答案: 正确
4、
N个元素排序的时间复杂度不可能是线性时间。
答案: 错误
5、
任何基于元素比较的排序算法的时间复杂度>=élogn!ù= Q(nlogn)
答案: 正确
6.3 知识梳理
1、
二分搜索算法将分治的2个子问题减少为1个,时间复杂度由n降低为logn
答案: 正确
2、
大整数乘法将分治的四个子问题减少为2个,时间复杂度由n2降低为n
答案: 错误
3、
Strassen矩阵乘法将分治的8个子问题减少为7个,时间复杂度由n3降低为n^log7
答案: 正确
4、
减少子问题的个数,可以降低分治算法的时间复杂度。
答案: 正确
5、
存在O(n2.376 )时间的矩阵乘法分治算法
答案: 正确
6.4 知识梳理
1、
改进分治的均衡度,就是减少时间复杂度函数T(n)=aT(n/b)+f(n) 中的()值。
答案: b
2、
随机快速排序的时间是O(n^2)
答案: 错误
3、
给定n个元素,找其中位数的时间是O(n)
答案: 正确
4、
给定n个元素,使用分治算法找k小元素,如果保证分治的两个子数组中最小的数组是原数组的ε倍,时间复杂度可以由nlogn降低为n. 0<ε<1.
答案: 正确
6.5 知识梳理
1、
减少合并时间,就是减少时间复杂度函数T(n)=aT(n/b)+f(n) 中的()值。
答案: f(n)
2、
最接近点对问题的时间复杂度为()
答案: nlogn
3、
最接近点对问题将合并的时间从n^2减少为n,从而将算法的时间复杂度由n^减少为nlogn。
答案: 正确
4、
计数逆序问题将合并计数逆序的时间由n^2减少为n,从而将算法的时间复杂度由n^2减少为nlogn。
答案: 正确
第六章 测验
1、
设有5000个无序的元素,希望用最快的速度挑选出其中前10个最大的元素,最好选用( )法。
答案: 冒泡排序
2、
堆排序的时间复杂度是O()。
答案: O(nlogn)
3、
使用分治法求解不需要满足的条件是( )。
答案: 子问题必须是一样的
4、
找n个元素的中位数的分治算法的时间复杂度为O(___).
答案: n
5、
合并排序的时间复杂度是()
答案: nlogn
6、
军事上迂回包围、穿插分割、各个歼灭是()思想。
答案: 分治
7、
堆排序的时间复杂度是()
答案: nlogn
8、
大整数乘法分治算法的时间为O()
答案: n^log3
9、
对线性表进行折半查找最方便的数据结构是()
答案: 有序顺序表
10、
减少子问题个数,就是减少时间复杂度函数T(n)=aT(n/b)+f(n) 中的()值。
答案: a
11、
分治法在每一层递归上有三个步骤()
答案: 分解;
解决 ;
合并
12、
通过减少子问题个数,降低分治算法时间复杂度的有()
答案: 大整数乘法;
Strassen矩阵乘法
13、
分治法所能解决的问题一般具有( )特征.
答案: 问题可以分解为规模较小的子问题;
小规模子问题可解 ;
子问题可合并为问题的解 ;
子问题相互独立
14、
减治法常见的形式有()
答案: 减一个常量;
减一个常量因子;
减可变规模
15、
改进分治算法的方法有()
答案: 减少子问题的个数 ;
改进分治的均衡度;
减少合并的时间
16、
分治法分解的子问题与原问题形式相同。
答案: 正确
17、
N个元素排序的时间复杂度不可能是线性时间。
答案: 错误
18、
分治法分解的子问题与原问题形式相同。
答案: 正确
19、
三分法的判定树是三叉树
答案: 正确
20、
减治法减一个常量就是每次迭代减去一个相同的常数因子(一般为2)
答案: 错误
21、
最小堆中每个元素调整的次数不超过树高 Q(logn)。
答案: 正确
22、
分治算法的思想是将难以直接解决的大问题,分割成一些规模较小的子问题,以便各个击破,分而治之。
答案: 正确
23、
任何排序算法至少需要O(nlog n)次比较。
答案: 错误
24、
改进子问题合并的时间复杂度可以减少分治算法的时间。
答案: 正确
25、
分治与递归都是从大规模问题逐步化为小规模问题,因此分治算法经常使用递归实现。
答案: 正确
26、
分治法将原问题分解为若干个规模较小、相互独立、完全相同的子问题。
答案: 错误
27、
减治法是把一个问题转化成一个子问题来解决,从子问题的解得到原问题的解。
答案: 正确
28、
任何基于元素比较的排序算法的时间复杂度>=élogn!ù= Q(nlogn)
答案: 正确
29、
建立n个元素的最大堆的时间为O(n)
答案: 正确
30、
存在O(n2.376 )时间的矩阵乘法分治算法
答案: 正确
31、
随机快速排序的时间是O(n^2)
答案: 错误
32、
给定n个元素,找其中位数的时间是O(n)
答案: 正确
33、
给定n个元素,使用分治算法找k小元素,如果保证分治的两个子数组中最小的数组是原数组的ε倍,时间复杂度可以由nlogn降低为n
答案: 正确
34、
两个有序数组合并的时间不会超过两个数组的长度和。
答案: 正确
第七章 动态规划
7.1 知识梳理
1、
下面不是动态规划算法特点的是()
答案: 从大到小计算
2、
备忘录与递归算法的相同点是()
答案: 递推关系;
最优子结构
3、
动态规划算法本质上是空间换时间的算法,每一个子问题只解一次,存储子问题结果,避免重复计算。
答案: 正确
4、
备忘录方法为每一子问题建立记录项,初始化时,存入特殊值。求解时遇到特殊值时计算并保存在相应记录项中,下次遇到时直接查表即可。
答案: 正确
5、
最优子结构是问题能用动态规划算法求解的前提。
答案: 正确
6、
通常不同的子问题个数随问题规模呈多项式增长。动态规划算法对于每个子问题求解一次,并保存子问题结果,因此只需要多项式时间。
答案: 正确
7.2 知识梳理
1、
确定第 i 阶段的收益函数和从第1阶段出发到第i 阶段末所获得收益的最优值,建立动态规划基本方程。这种方法是()
答案: 正推
2、
动态规划定义递推关系的方法有()
答案: 正推;
反推
3、
动态规划是“带决策的多阶段、多方位的递推算法”
答案: 正确
4、
给定n层数字三角形,动态规划计算的时间为O(n^3)
答案: 错误
5、
状态转移方程是状态间的递推关系,也是子问题间的递推关系。状态变量取值不同对应不同问题状态,也对应不同子问题。
答案: 正确
7.3 知识梳理
1、
OPT[i][w]=max{OPT[i-1][w],OPT[i][w-w[i]]+v[i]},这是()问题的递推关系。
答案: 完全0-1背包
2、
OPT[i][w]=max{OPT[i-1][w],OPT[i-1][w-k*w[i]] +k*v[i],0<=k<=n[i]}。这是()问题的递推关系。
答案: 多重0/1背包
3、
0-1背包问题的动态规划算法的时间复杂度是Q(n W),是多项式时间算法.
答案: 错误
4、
恰好装满的0-1背包问题,初始化时除了M[0]为0,其它M[1..C]均设为-∞,可以保证最终得到的M[C]是一种恰好装满背包的最优解。
答案: 正确
7.4 知识梳理
1、
动态规划算法的计算矩阵连乘问题的时间为O()
答案: n^3
2、
区间动态规划的计算次序是()
答案: 先小区间后大区间;
先小规模后大规模
3、
区间动归使用链长,先计算小区间,再递增计算大区间。
答案: 正确
4、
矩阵连乘的计算次序可以用完全加括号的方式来确定。
答案: 正确
5、
矩阵连乘问题的不同子问题个数为 O(n^2)
答案: 正确
7.5 知识梳理
1、
拓扑排序的时间复杂度是O( )
答案: m+n
2、
动态规划计算最长不降子序列的时间是O()
答案: n^2
3、
拓扑排序的结果是一个顶点序列,顶点间存在先序关系。
答案: 正确
4、
嵌套矩形问题本质上求DAG上的最长路径,但没有给出起点和终点。
答案: 正确
5、
反推求解嵌套矩形问题,很难打印字典序最小的方案。
答案: 错误
6、
硬币问题本质上是DAG上的最长路径和最短路,且给出起点和终点。
答案: 正确
7、
DAG图最长路的正推关系是 L(j) = 1 + max {L(i) : (i, j) 为边}
答案: 正确
7.7 知识梳理
1、
Floyd算法的复杂度为O()
答案: n^3
2、
如果图中存在负环,那么从s到t没有最短路。
答案: 正确
3、
Bellman算法的计算时间为Q(mn), 空间为 Q(n^2),可以求最短路,也可求最长路。
答案: 正确
4、
SPFA是Bellman-Ford算法的一种队列实现,减少了不必要的冗余计算。
答案: 正确
5、
Floyd算法可以构造无向或有向加权图(包含长度为负的回路)的完全最短路径
答案: 错误
6、
SPFA算法计算时,如果一个顶点入队列的次数超过n,则存在负权回路。
答案: 正确
7、
动态规划计算树上的最大独立集时,从叶子开始,先计算子树,逐步计算到根节点。
答案: 正确
7.8 知识梳理
1、
LCS问题的不同子问题个数为 O()
答案: mn
2、
序列 . 设LCS(X, Y)=
。若
则
,且
是
和
的最长公共子序列。
答案: 正确
3、
给定串 , 一个比对M是有序对
的集合,每一项至多参与一个配对,并且允许交叉。
答案: 错误
4、
动态规划方程中子问题个数为n^t,依赖的子问题个数为n^e, 则算法的时间复杂度为n^(t+e)
答案: 正确
5、
序列的编辑距离是间隔的惩罚值和错配的惩罚值之和。
答案: 正确
6、
动态规划方程M[i,j]=min(M[k]+wk), 1≤i≤k≤j≤n, 则算法的时间复杂度为n^2
答案: 错误
上方为免费预览版答案,如需购买完整答案,请点击下方红字
为了方便下次阅读,建议在浏览器添加书签收藏本网页
添加书签方法:
1.电脑按键盘的Ctrl键+D键即可收藏本网页
2.手机浏览器可以添加书签收藏本网页
我们的公众号
打开手机微信,扫一扫下方二维码,关注微信公众号:萌面人APP
本公众号可查看各种网课答案,还可免费查看大学教材答案
,
1、
给定男孩和女孩的两张喜欢列表,GS算法的结果对( )是最好的选择。
答案: 男孩
2、
稳定匹配问题的输出是( )
答案: 完美匹配 ;
没有不稳定配对 ;
稳定匹配
3、
给定一个匹配,如果Z喜欢A甚于匹配的女朋友,A喜欢Z甚于匹配的男朋友,那么A和Z是一个不稳定配对。
答案: 正确
4、
任意给定两张喜欢列表,稳定匹配问题只有一个稳定匹配。
答案: 错误
1.2 知识梳理
1、
解决问题的基本步骤是()。(1)算法设计(2)算法实现(3)数学建模(4)算法分析(5)正确性证明
答案: (3)(1)(5)(4)(2)
2、
问题的两个要素是( )和()
答案: 输入;
输出
3、
算法的性质有()
答案: 确定性;
有穷性;
输入;
输出
4、
程序总是在有穷步的运算后终止。
答案: 错误
5、
算法是一步步正确解决问题的方法或策略。
答案: 正确
6、
程序是算法用某种程序设计语言的具体实现,不能使用自然语言描述。
答案: 正确
7、
算法每次求解一个实例,而计算机需要求解该问题的所有实例。
答案: 错误
1.3 知识梳理
1、
从右向左计算p(x) = anxn + an-1xn-1 +… + a1x1 + a0 的数量级为()
答案: n
2、
问题变换的目的()
答案: 复杂变简单;
未知变已知;
隐式变显式;
难解变易解
3、
传教士和野人问题转换的图是状态空间图。
答案: 正确
4、
大学入学问题的核心是稳定匹配问题
答案: 正确
5、
一个问题的实例可以变换为更简单更便利的实例,变换为不同的表达形式。
答案: 正确
第一章 测验
1、
算法与程序的区别是()
答案: 有穷性
2、
解决问题的基本步骤是()。(1)算法设计(2)算法实现(3)数学建模(4)算法分析(5)正确性证明
答案: (3)(1)(5)(4)(2)
3、
下面说法关于算法与问题的说法错误的是()。
答案: 证明算法不正确,需要证明对任意实例算法都不能正确处理。
4、
问题变换的目的有()。(1)复杂变简单 (2)未知变已知 (3)隐式变显式 (4)难解变易解 (5)以上都是。
答案: (5)
5、
按照霍纳法则,计算p(x) = anxn + an-1xn-1 +… + a1x1 + a0 的数量级为()
答案: n
6、
描述算法的基本方法有( )。(1)自然语言(2)流程图(3)伪代码(4)机器语言
答案: B.(1)(2)(3)
7、
问题变换的方法有( )
答案: 实例简单化;
问题约简 ;
表达变换
8、
下面关于程序和算法的说法正确的是()。
答案: 算法的每一步骤必须要有确切的含义,必须是清楚的、无二义的。;
程序是算法用某种程序设计语言的具体实现。;
算法是一个过程,计算机每次求解是针对问题的一个实例求解
9、
最大独立集问题和()问题等价。
答案: 最大团;
最小顶点覆盖
10、
给定两张喜欢列表,稳定匹配问题的输出是( )
答案: 完美匹配;
没有不稳定配对;
最大匹配 ;
稳定匹配
11、
给定一个实例,如果一个算法能得到正确解答,称这个算法解答了该问题。
答案: 错误
12、
计算机每次求解是针对问题的每个实例求解。
答案: 错误
13、
同一数学模型使用不同的数据结构会有不同的算法,有效性有很大差别。
答案: 正确
14、
证明算法不正确,只需给出一个反例,算法不能正确处理即可。
答案: 正确
15、
同一算法只有一种形式描述
答案: 错误
16、
一个问题的同一实例可以有不同的表示形式。
答案: 正确
17、
算法必须在有穷时间终止
答案: 正确
18、
一个问题的算法必须在有穷时间终止,并且对一切合法的输入都能得出满足要求的结果。
答案: 正确
19、
问题的两个要素是输入和实例。
答案: 错误
20、
算法是一个语句集合,按照顺序执行语句,处理实例,得到正确答案。
答案: 正确
第二章 算法分析
2.1 知识梳理
1、
计算算法的时间复杂度只要选取()
答案: 最复杂部分的运行时间 ;
关键操作的运行时间 ;
在最坏情况下运行时间
2、
算法分析的两种方法是事前分析和事后统计。
答案: 正确
3、
算法分析的两个阶段是粗粒度比较数量级和细粒度比较各种情况。
答案: 正确
4、
求解问题的输入量,称为问题的规模。
答案: 正确
5、
时间复杂度就是算法运行的时间的度量,衡量算法的效率。
答案: 正确
2.2 知识梳理
1、
g(n)为f(n)的下界,记为:f(n)= (g(n))
答案: Ω
2、
f(n)=3n^3+7n^2+4nlogn =( )(n^3)
答案: θ
3、
O(f(n))+O(g(n)) = O(min{f(n),g(n)})
答案: 错误
4、
任何多项式时间算法都是好算法,都是有效的。
答案: 错误
5、
f(n)=(g(n)) 则 f(n)=Ο(g(n))且f(n)=Ω(g(n))
答案: 正确
6、
f=o(g)且g = o(h) 则 f=o(h)
答案: 正确
2.3 知识梳理
1、
如果 =0, 则 f(n)= (g((n))
答案: o
2、
logn!=Q( )
答案: nlogn
3、
n!=()
答案: ;
4、
答案: 正确
5、
对于任意 x > 0, log n = o(n^x)
答案: 正确
6、
, 常数a, b > 0.
答案: 正确
7、
对任意 r > 1 和 d > 0, nd = o(r^n).
答案: 正确
8、
, 常数a, b > 0.
答案: 正确
2.4 知识梳理
1、
顺序查找的时间复杂度为()
答案: θ(n)
2、
下面程序的时间复杂度是() i=1while(i<=n) do i=i*3
答案: Q(logn)
3、
快速幂求x^n的时间复杂度为O()
答案: logn
4、
T1(n)+T2(n)=O(max(f(n),g(n))),因此并行语句时间复杂度等于两者中高的复杂度。
答案: 正确
5、
O(f)*O(g)=O(f*g),因此循环语句的时间复杂度等于循环体的时间复杂度与循环次数的乘积。
答案: 正确
6、
从n个数中查找最大值的时间复杂度为W (n)
答案: 错误
2.5 知识梳理
1、
给定图G=(V,E), |V|=n, |E|=m, 其邻接矩阵的空间复杂度为( )
答案: θ(n^2)
2、
下面以空间换时间的方法有()
答案: 预处理 ;
预构造 ;
动态规划
3、
空间复杂度S(n)是算法执行所需所有空间的资源量
答案: 错误
4、
时空均衡可通过以时间换空间或以空间换时间实现
答案: 正确
5、
给定n个整数,n个数的取值范围为[1,k], 计数排序的时间复杂度是O (n+k) 。
答案: 正确
6、
使用散列可以降低查找的时间复杂度
答案: 正确
第二章 测验
1、
从资源划分,算法的复杂度分为()和()。
答案: 时间复杂度 空间复杂度
2、
算法复杂度分析的两种基本方法为( )和( )
答案: 事后统计 事前分析
3、
设f(N)、g(N)是定义在正数集上的正函数,如果存在正的常数C和自然数N0,使得当N≥N0时有f(N)≥Cg(N),则称函数f(N)当N充分大时有下界g(N),记作f(N)=W(g(N)),即f(N)的阶( )g(N)的阶。
答案: 不低于
4、
f(n)= 100 当n为奇数 f(n)=5n^2+3n. 当n为偶数 f(n)的渐进性态f(n)= W( )
答案: 1
5、
下面程序的时间复杂度为() x=1for i=1 to n dofor j=1 to i do for k=1 to j do
x++
答案: n^3
6、
对近似递增序列的线性表从小到大排序,使用哪种方法好?
答案: 插入排序
7、
给定n个元素的数组A,n=10^3, 使用折半查找比使用顺序查找大约快___倍。
答案: 100
8、
给定图G=(V,E), |V|=n, |E|=m, 遍历其邻接表的时间复杂度为θ( )
答案: n+m
9、
logn!=Q( )
答案: nlogn
10、
给定n个元素的数组A,n=10^3, 使用折半查找比使用顺序查找大约快___倍。
答案: 100
11、
下面程序的时间复杂度是() i=1while(i<=n)
do i=i*5
答案: Q(logn)
12、
给定n个整数,n个数的取值范围为[1,k],计数排序的时间复杂度是O (n+k) 。
答案: n+k
13、
给定图G=(V,E), |V|=n, |E|=m, 其邻接矩阵的空间复杂度为( )
答案: θ(n^2)
14、
顺序查找适合的数据结构是()
答案: 顺序存储;
链式存储
15、
f(n)=3n^3+7n^2+4nlogn =()(n^3)
答案: Ο;
Ω;
θ
16、
下面那些算法的时间复杂度为O(n^2)?
答案: 插入排序;
冒泡排序;
折半插入排序
17、
两个n*n的矩阵相加的时间复杂度是( )
答案: θ(n^2);
O(n^2);
W(n^2)
18、
以空间换时间的方法有()
答案: 预处理 ;
预构造;
动态规划
19、
时间复杂度是指算法最坏情况下的运行时间。
答案: 正确
20、
f(n)=O(g(n)) 且 g(n)=O(h(n)),则h(n)=O(f(n))
答案: 错误
21、
f(n)=O(g(n)) 则 f(n)^2=O(g(n)^2)
答案: 正确
22、
f(n)=3n^3+7n^2+4nlogn =O(n^2)
答案: 错误
23、
如果一个算法是多项式时间算法,该算法是有效的,是好算法。
答案: 正确
24、
n!=o(2^n)
答案: 错误
25、
答案: 正确
26、
折半查找的时间复杂度为Q(nlogn)
答案: 错误
27、
f(n)=θ(g(n)) 当且仅当 g(n)=θ(f(n))
答案: 正确
28、
f=O(g)当且仅当 g =Ω (f)
答案: 正确
29、
时间复杂度就是算法运行的时间的度量,衡量算法的效率。
答案: 正确
30、
求解问题的输入量,称为问题的规模 。
答案: 正确
31、
O(f(n))+O(g(n)) = O(min{f(n),g(n)})
答案: 错误
32、
任何多项式时间算法都是好算法,都是有效的。
答案: 错误
33、
任何情况下,复杂性渐近阶低的算法都比复杂性渐近阶高的算法有效。
答案: 错误
34、
对任意 r > 1 和 d > 0, n^d= o(r^n).
答案: 正确
35、
f(n)=O(g(n)) 则 log(f(n)) =O(log(g(n)))
答案: 正确
36、
常数阶算法的运行时间与规模n无关。
答案: 正确
37、
从n个数中查找最大值的时间复杂度为W (n)
答案: 错误
38、
使用合适的数据结构可以同时减少时间和空间
答案: 正确
第三章 枚举算法
3.1 知识梳理
1、
枚举算法的优化方法有()
答案: 减少枚举变量;
减少枚举变量的值域;
优化算法;
优化数学模型
2、
冒泡排序的时间复杂度为O(nlogn)
答案: 错误
3、
0/1背包问题的时间复杂度为O(n2^n)
答案: 正确
4、
在某些问题实例中枚举是唯一的解决方法。
答案: 正确
5、
最好情况下,冒泡排序和选择排序的时间复杂度都是O(n^2)
答案: 错误
3.2 知识梳理
1、
子集生成方法有()
答案: 增量构造法;
二进制法;
位向量法
2、
位向量法生成子集,不直接构造子集本身。
答案: 正确
3、
二进制法生成子集,子集与运算可以生成并集
答案: 错误
4、
增量构造法生成子集前需要定序
答案: 正确
第三章 测验
1、
便于实现集合操作的子集生成算法是()
答案: 二进制法
2、
logn^2=( )(logn+5)
答案: θ
3、
0-1背包问题的枚举算法,如果在百万次每秒的计算机上运行,1年可以计算的问题规模估计是?
答案: 40
4、
A公司处理器速度是B公司的100倍。对于复杂度为n^2的算法,B公司的计算机可以在1小时内处理规模为n的问题,A公司的计算机在1小时能处理的问题规模是()
答案: 10n
5、
直接插入排序的时间复杂度是()。
答案: O(n^2)
6、
选择排序的时间复杂度是O(____)
答案: n^2
7、
分数拆分问题的枚举算法通过()方法进行了优化。
答案: 减少枚举变量 ;
减少枚举变量的值域 ;
优化数学模型
8、
子集生成方法有()
答案: 增量构造法 ;
二进制法;
位向量法
9、
枚举算法的优化方法有()
答案: 减少枚举变量 ;
减少枚举变量的值域 ;
优化算法;
优化数学模型
10、
冒泡排序的时间复杂度为W(n^2)
答案: 错误
11、
0-1背包问题的枚举算法的时间复杂度为O(2^n)
答案: 错误
12、
增量构造法生成子集前需要对集合中元素从小到大排列。
答案: 正确
13、
二进制法生成子集,子集与运算可以生成并集
答案: 错误
14、
枚举法适用于问题的小规模实例。
答案: 正确
15、
减少枚举变量可以减少枚举算法的时间复杂度
答案: 正确
16、
位向量法生成子集,子集或运算可以生成差集
答案: 错误
17、
分块查找一般设分块的长度是n/2.
答案: 错误
18、
旅行商问题的枚举算法的时间复杂度为O(n!)
答案: 正确
19、
在某些问题实例中枚举是唯一的解决方法。
答案: 正确
20、
蛮力法适用于问题的小规模实例。
答案: 正确
第四章 贪心算法
4.1 知识梳理
1、
部分背包问题的时间复杂度是O( )
答案: nlogn
2、
贪心算法的思想是依据贪婪准则作出决策,逐步构造解值。
答案: 正确
3、
贪心算法的思想是寻求局部最优解,逐步达到全局最优解
答案: 正确
4、
贪心算法总能找到可行解,并且是最优解。
答案: 错误
5、
部分背包问题的证明方法是领先的方法
答案: 正确
4.2 知识梳理
1、
原问题的最优解包含其子问题的最优解是最优子结构的性质。
答案: 正确
2、
通过一系列局部最优的选择(贪心选择)达到全局最优是贪心选择的性质
答案: 正确
3、
问题的全过程可以分为若干个阶段,而且在任何一个阶段x后的行为都只仅仅依赖于x的状态,而与x之前如何达到这种状态的方式无关。这是无后效性的性质
答案: 正确
4、
负权的最短路问题可以使用Dijkstra算法计算。
答案: 错误
5、
贪心法处理问题的核心是贪婪准则的选取
答案: 正确
6、
贪心算法一般在开始贪心策略前会进行预处理,预处理后再进行最优化选择。
答案: 正确
4.3 知识梳理
1、
区间调度问题贪心算法的时间复杂度是()
答案: O(nlogn)
2、
交换论证方法把任意一个解逐渐变为贪心算法的解,不会影响其最优性。
答案: 正确
3、
区间划分问题的证明方法是界的方法
答案: 正确
4、
区间选点问题的预处理方法是按照区间的终点递增排序
答案: 正确
5、
区间调度问题可以变换为最大独立集问题
答案: 正确
4.4 知识梳理
1、
Kruskal算法的时间复杂度是(),更适用于稀疏图。
答案: mlogn
2、
最小生成树问题可以使用的算法有( )
答案: Kruskal ;
Prim;
Solim
3、
MST是最小连通子图包含n 个顶点和n-1条边
答案: 正确
4、
Prim算法的贪婪准则是选取割集中的最小边
答案: 正确
5、
Kruskal算法的预处理是边权非递减排序。
答案: 正确
6、
设S是顶点子集,e是正好一个端点在S中的边中的最小边,那么最小生成树中肯定包含e.
答案: 正确
4.5 知识梳理
1、
最优前缀码数属于( )
答案: 变长码;
前缀码 ;
哈夫曼编码
2、
前缀码中任一字符的0-1编码都不是其他字符的前缀
答案: 正确
3、
哈夫曼编码给出现频率高的字符较短的编码,出现频率较低的字符以较长的编码,可以大大缩短总码长。
答案: 正确
4、
哈夫曼编码的预处理是根据频率大小,构造优先队列。
答案: 正确
第四章 测验
1、
贪心算法基本要素有( )和最优子结构性质。
答案: 贪心选择性质
2、
下面不是证明贪心算法证明方法的有()。
答案: 优化
3、
未来与过去无关指的是( )的性质
答案: 无后效性
4、
使目标函数最大(小)的解是问题的()
答案: 最优解
5、
对于稠密图,使用()算法计算MST更适合
答案: Prim
6、
把任意一个解逐渐变为贪心算法的解,不会影响其最优性。这种证明方法是_()
答案: 交换论证
7、
原问题的最优解包含其子问题的最优解是贪心算法的()性质。
答案: 最优子结构性质
8、
区间调度问题贪心算法的时间复杂度是()
答案: O(nlogn)
9、
最小生成树问题可以使用的算法有( )
答案: Kruskal ;
Prim ;
Solim
10、
区间问题包含()
答案: 区间调度;
区间划分;
区间选点;
区间覆盖
11、
贪心算法的基本要素是()
答案: 贪心选择的性质 ;
无后效性性质;
最优子结构性质
12、
贪心算法的证明方法有()
答案: 领先 ;
交换论证;
界;
反证;
归纳
13、
最小生成树问题可以使用的算法有( )
答案: Kruskal ;
Prim ;
Solim
14、
最优前缀码数属于( )
答案: 变长码 ;
前缀码 ;
哈夫曼编码
15、
贪心算法总能找到可行解,但未必是最优解。
答案: 正确
16、
贪心选择通过一步步选择得到问题的解,每一步的局部最优解都构成全局最优解的一部分。
答案: 正确
17、
问题的最优子结构性质是该问题可用贪心算法或动态规划算法求解的关键特征。
答案: 正确
18、
MST中若在树中任意增加一条边,将出现一个回路;若去掉一条边,将变成非连通图。
答案: 正确
19、
设C是一个环, f 是C中的最大边,那么最小生成树中肯定包含f.
答案: 错误
20、
Kruskal算法的贪婪准则是每一次选取不构成环路的最小边。
答案: 正确
21、
哈夫曼编码的平均码长最小
答案: 正确
22、
负权的单源最短路问题可以使用Dijkstra算法求解。
答案: 错误
23、
如果e是图G中权重最小的边,它至少是G的一颗最小生成树的边。
答案: 正确
24、
如果图G中每条边的权重都是互不相同的,图G必定只有一颗最小生成树。
答案: 正确
25、
问题的可行解是满足约束条件的解
答案: 正确
26、
贪心算法的思想是寻求局部最优解,逐步达到全局最优解
答案: 正确
27、
贪心算法总能找到可行解,并且是最优解。
答案: 错误
28、
负权的最短路问题可以使用Dijkstra算法计算。
答案: 错误
29、
未来不影响过去指的是无后效性的性质。
答案: 错误
30、
贪心法处理问题的核心是贪婪准则的选取
答案: 正确
31、
区间划分问题的预处理方法是按照开始时间递减排序。
答案: 错误
32、
区间选点问题的预处理方法是按照区间的终点递增排序
答案: 正确
33、
设S是顶点子集,e是正好一个端点在S中的边中的最小边,那么最小生成树中肯定包含e.
答案: 正确
34、
Kruskal算法的预处理是边权非递减排序。
答案: 正确
35、
任意变长码的平均码长最小
答案: 错误
36、
哈夫曼编码的贪婪准则是从队列中选择频率最小的两个。
答案: 正确
37、
哈夫曼编码给出现频率高的字符较短的编码,出现频率较低的字符以较长的编码,可以大大缩短总码长。
答案: 正确
第五章 递推算法
5.1 知识梳理
1、
递归函数的要素是递归方程和()
答案: 边界条件
2、
递归一般用于解决的问题有()
答案: 数据的定义是按递归定义的;
问题解法按递归实现;
数据的结构形式是按递归定义的
3、
递推是从小规模的问题推解出大规模间题的一种方法,是选代算法的最基本的表现形式。
答案: 正确
4、
递归与循环都是解决“重复操作”的机制
答案: 正确
5、
递归的效率高于递推
答案: 错误
6、
每个递归算法原则上总可以转换成与它等价的迭代算法;反之不然 。
答案: 错误
5.2 知识梳理
1、
使用递推关系求解问题的常用方法有()
答案: 递归 ;
正推 ;
倒推;
迭代
2、
倒推法是从后向前推解问题的方法.
答案: 正确
3、
不知前提条件的情况下,经常使用倒推求解问题。
答案: 正确
4、
由结果倒过来推解前提条件是倒推方法的一种
答案: 正确
5、
由于存储的要求从后向前进行推算是倒推方法的一种
答案: 正确
5.3 知识梳理
1、
迭代法分为( )
答案: 直接迭代;
差消迭代;
换元迭代
2、
求解递推方程的方法有()
答案: 迭代法 ;
递归树;
归纳法;
主定理
3、
主方法可以求解满足T(n)=aT(n/b) + f (n) 形式的递推方程, 则下列关于方程正确的是?A 对于系数a,必须满足a>=1B对于系数b,必须满足b>1C若对于常数ε>0,f(n)=O(nlogba-ε),则T(n)=Θ(nlogba)D若f(n)=O(nlogba),则T(n)=Θ(nlogbalogn)
答案: 对于系数a,必须满足a>=1;
对于系数b,必须满足b>1;
若对于常数ε>0,, 则
;
若,则
4、
迭代法从原始递推方程出发,反复将对应方程左边的函数用右边等式带入,直至得到初值,然后将所得的结果化简。
答案: 正确
5、
迭代一般用于一阶递推方程,高阶方程需要使用差消法化简为一阶方程求解
答案: 正确
6、
快速排序平均情况下的时间复杂度是O(nlogn)
答案: 正确
第五章 测验
1、
从大规模问题逐步化为小规模问题的算法是()
答案: 递归
2、
求解高阶递推方程一般使用()迭代方法
答案: 差消迭代
3、
下面有关递归与迭代的说法错误的是()
答案: 每个递归算法原则上总可以转换成与它等价的迭代算法
4、
主方法可以求解满足T(n)=aT(n/b) + f (n) 形式的递推方程, 则下列关于方程中的约束中不准确的是?
答案:
5、
T(n) = 2T(n/2) +n^2,T(1)=1,则 T(n) =()
答案: Q(n^2)
6、
从小规模问题推解出大规模问题的算法是()
答案: 递推
7、
递归函数的要素是()
答案: 边界条件 ;
递归方程
8、
递归变为非递归的方法有()
答案: 模拟栈 ;
递推 ;
尾递归
9、
递归一般用于解决问题有():
答案: 数据的定义是按递归定义的。 ;
问题解法按递归实现。;
数据的结构形式是按递归定义的
10、
求解递推方程的迭代法分为( )
答案: 直接迭代 ;
差消迭代;
换元迭代
11、
T(n) = T(n-1) + n ,T(1)=1,则 T(n) =()
答案: W(n^2);
n(n+1)/2;
(n^2);
Q(n^2)
12、
求解快速排序时间复杂度使用的方法有()
答案: 迭代法 ;
递归树;
归纳法 ;
主定理
13、
正推是从小规模的问题推解出大规模间题的一种方法
答案: 正确
14、
循环用于重复性的工作。循环体的特点是:“以不变应万变”。
答案: 正确
15、
递归算法是直接或间接地调用自身的算法。
答案: 正确
16、
尾递归中的递归调用是整个函数体中最后执行的语句且它的返回值不属于表达式的一部分。
答案: 正确
17、
一般来说,递归的效率高于递推。
答案: 错误
18、
递推是从问题的最终目标出发,逐渐将复杂问题化为简单问题,最终求得问题。
答案: 错误
19、
有些问题采用倒推法,容易理解和解决。
答案: 正确
20、
递归是从简单问题出发,一步步的向前发展,最终求得问题,是正向的。
答案: 错误
21、
一般来说,递推的效率高于递归,因此将递归转化为递推
答案: 正确
22、
每个递归算法原则上总可以转换成与它等价的迭代算法,反之不然。
答案: 错误
23、
由结果倒过来推解前提条件是倒推方法的一种。
答案: 正确
24、
迭代法从原始递推方程出发,反复将对应方程左边的函数用右边等式带入,直至得到初值,然后将所得的结果化简。
答案: 正确
25、
快速排序和插入排序最好情况下的时间复杂度是O(nlogn)
答案: 错误
第六章 分治算法
6.1 知识梳理
1、
合并排序的时间复杂度是O()
答案: nlogn
2、
分治法的适用条件是( )。
答案: 问题可以分解为规模较小的子问题;
小规模子问题可解;
子问题可合并为问题的解 ;
子问题相互独立
3、
分治法的设计思想是大事化小,各个击破,分而治之。
答案: 正确
4、
每次都将问题分解为原问题规模的一半进行求解,称为二分法
答案: 正确
5、
分治法一般在每一层递归上有分解、解决、合并三个步骤
答案: 正确
6、
减治法是把一个问题转化成一个子问题来解决,从子问题的解得到原问题的解。
答案: 正确
7、
分治法将原问题分解为若干个规模较小、相互独立、完全相同的子问题。
答案: 错误
6.2 知识梳理
1、
减治法常见的形式有()
答案: 减一个常量 ;
减一个常量因子;
减可变规模
2、
二分法子问题独立而不相似的情况可以转化为相似子问题求解
答案: 正确
3、
二分法子问题不独立的情况可以计算,但计算量大,一般使用动态规划计算。
答案: 正确
4、
N个元素排序的时间复杂度不可能是线性时间。
答案: 错误
5、
任何基于元素比较的排序算法的时间复杂度>=élogn!ù= Q(nlogn)
答案: 正确
6.3 知识梳理
1、
二分搜索算法将分治的2个子问题减少为1个,时间复杂度由n降低为logn
答案: 正确
2、
大整数乘法将分治的四个子问题减少为2个,时间复杂度由n2降低为n
答案: 错误
3、
Strassen矩阵乘法将分治的8个子问题减少为7个,时间复杂度由n3降低为n^log7
答案: 正确
4、
减少子问题的个数,可以降低分治算法的时间复杂度。
答案: 正确
5、
存在O(n2.376 )时间的矩阵乘法分治算法
答案: 正确
6.4 知识梳理
1、
改进分治的均衡度,就是减少时间复杂度函数T(n)=aT(n/b)+f(n) 中的()值。
答案: b
2、
随机快速排序的时间是O(n^2)
答案: 错误
3、
给定n个元素,找其中位数的时间是O(n)
答案: 正确
4、
给定n个元素,使用分治算法找k小元素,如果保证分治的两个子数组中最小的数组是原数组的ε倍,时间复杂度可以由nlogn降低为n. 0<ε<1.
答案: 正确
6.5 知识梳理
1、
减少合并时间,就是减少时间复杂度函数T(n)=aT(n/b)+f(n) 中的()值。
答案: f(n)
2、
最接近点对问题的时间复杂度为()
答案: nlogn
3、
最接近点对问题将合并的时间从n^2减少为n,从而将算法的时间复杂度由n^减少为nlogn。
答案: 正确
4、
计数逆序问题将合并计数逆序的时间由n^2减少为n,从而将算法的时间复杂度由n^2减少为nlogn。
答案: 正确
第六章 测验
1、
设有5000个无序的元素,希望用最快的速度挑选出其中前10个最大的元素,最好选用( )法。
答案: 冒泡排序
2、
堆排序的时间复杂度是O()。
答案: O(nlogn)
3、
使用分治法求解不需要满足的条件是( )。
答案: 子问题必须是一样的
4、
找n个元素的中位数的分治算法的时间复杂度为O(___).
答案: n
5、
合并排序的时间复杂度是()
答案: nlogn
6、
军事上迂回包围、穿插分割、各个歼灭是()思想。
答案: 分治
7、
堆排序的时间复杂度是()
答案: nlogn
8、
大整数乘法分治算法的时间为O()
答案: n^log3
9、
对线性表进行折半查找最方便的数据结构是()
答案: 有序顺序表
10、
减少子问题个数,就是减少时间复杂度函数T(n)=aT(n/b)+f(n) 中的()值。
答案: a
11、
分治法在每一层递归上有三个步骤()
答案: 分解;
解决 ;
合并
12、
通过减少子问题个数,降低分治算法时间复杂度的有()
答案: 大整数乘法;
Strassen矩阵乘法
13、
分治法所能解决的问题一般具有( )特征.
答案: 问题可以分解为规模较小的子问题;
小规模子问题可解 ;
子问题可合并为问题的解 ;
子问题相互独立
14、
减治法常见的形式有()
答案: 减一个常量;
减一个常量因子;
减可变规模
15、
改进分治算法的方法有()
答案: 减少子问题的个数 ;
改进分治的均衡度;
减少合并的时间
16、
分治法分解的子问题与原问题形式相同。
答案: 正确
17、
N个元素排序的时间复杂度不可能是线性时间。
答案: 错误
18、
分治法分解的子问题与原问题形式相同。
答案: 正确
19、
三分法的判定树是三叉树
答案: 正确
20、
减治法减一个常量就是每次迭代减去一个相同的常数因子(一般为2)
答案: 错误
21、
最小堆中每个元素调整的次数不超过树高 Q(logn)。
答案: 正确
22、
分治算法的思想是将难以直接解决的大问题,分割成一些规模较小的子问题,以便各个击破,分而治之。
答案: 正确
23、
任何排序算法至少需要O(nlog n)次比较。
答案: 错误
24、
改进子问题合并的时间复杂度可以减少分治算法的时间。
答案: 正确
25、
分治与递归都是从大规模问题逐步化为小规模问题,因此分治算法经常使用递归实现。
答案: 正确
26、
分治法将原问题分解为若干个规模较小、相互独立、完全相同的子问题。
答案: 错误
27、
减治法是把一个问题转化成一个子问题来解决,从子问题的解得到原问题的解。
答案: 正确
28、
任何基于元素比较的排序算法的时间复杂度>=élogn!ù= Q(nlogn)
答案: 正确
29、
建立n个元素的最大堆的时间为O(n)
答案: 正确
30、
存在O(n2.376 )时间的矩阵乘法分治算法
答案: 正确
31、
随机快速排序的时间是O(n^2)
答案: 错误
32、
给定n个元素,找其中位数的时间是O(n)
答案: 正确
33、
给定n个元素,使用分治算法找k小元素,如果保证分治的两个子数组中最小的数组是原数组的ε倍,时间复杂度可以由nlogn降低为n
答案: 正确
34、
两个有序数组合并的时间不会超过两个数组的长度和。
答案: 正确
第七章 动态规划
7.1 知识梳理
1、
下面不是动态规划算法特点的是()
答案: 从大到小计算
2、
备忘录与递归算法的相同点是()
答案: 递推关系;
最优子结构
3、
动态规划算法本质上是空间换时间的算法,每一个子问题只解一次,存储子问题结果,避免重复计算。
答案: 正确
4、
备忘录方法为每一子问题建立记录项,初始化时,存入特殊值。求解时遇到特殊值时计算并保存在相应记录项中,下次遇到时直接查表即可。
答案: 正确
5、
最优子结构是问题能用动态规划算法求解的前提。
答案: 正确
6、
通常不同的子问题个数随问题规模呈多项式增长。动态规划算法对于每个子问题求解一次,并保存子问题结果,因此只需要多项式时间。
答案: 正确
7.2 知识梳理
1、
确定第 i 阶段的收益函数和从第1阶段出发到第i 阶段末所获得收益的最优值,建立动态规划基本方程。这种方法是()
答案: 正推
2、
动态规划定义递推关系的方法有()
答案: 正推;
反推
3、
动态规划是“带决策的多阶段、多方位的递推算法”
答案: 正确
4、
给定n层数字三角形,动态规划计算的时间为O(n^3)
答案: 错误
5、
状态转移方程是状态间的递推关系,也是子问题间的递推关系。状态变量取值不同对应不同问题状态,也对应不同子问题。
答案: 正确
7.3 知识梳理
1、
OPT[i][w]=max{OPT[i-1][w],OPT[i][w-w[i]]+v[i]},这是()问题的递推关系。
答案: 完全0-1背包
2、
OPT[i][w]=max{OPT[i-1][w],OPT[i-1][w-k*w[i]] +k*v[i],0<=k<=n[i]}。这是()问题的递推关系。
答案: 多重0/1背包
3、
0-1背包问题的动态规划算法的时间复杂度是Q(n W),是多项式时间算法.
答案: 错误
4、
恰好装满的0-1背包问题,初始化时除了M[0]为0,其它M[1..C]均设为-∞,可以保证最终得到的M[C]是一种恰好装满背包的最优解。
答案: 正确
7.4 知识梳理
1、
动态规划算法的计算矩阵连乘问题的时间为O()
答案: n^3
2、
区间动态规划的计算次序是()
答案: 先小区间后大区间;
先小规模后大规模
3、
区间动归使用链长,先计算小区间,再递增计算大区间。
答案: 正确
4、
矩阵连乘的计算次序可以用完全加括号的方式来确定。
答案: 正确
5、
矩阵连乘问题的不同子问题个数为 O(n^2)
答案: 正确
7.5 知识梳理
1、
拓扑排序的时间复杂度是O( )
答案: m+n
2、
动态规划计算最长不降子序列的时间是O()
答案: n^2
3、
拓扑排序的结果是一个顶点序列,顶点间存在先序关系。
答案: 正确
4、
嵌套矩形问题本质上求DAG上的最长路径,但没有给出起点和终点。
答案: 正确
5、
反推求解嵌套矩形问题,很难打印字典序最小的方案。
答案: 错误
6、
硬币问题本质上是DAG上的最长路径和最短路,且给出起点和终点。
答案: 正确
7、
DAG图最长路的正推关系是 L(j) = 1 + max {L(i) : (i, j) 为边}
答案: 正确
7.7 知识梳理
1、
Floyd算法的复杂度为O()
答案: n^3
2、
如果图中存在负环,那么从s到t没有最短路。
答案: 正确
3、
Bellman算法的计算时间为Q(mn), 空间为 Q(n^2),可以求最短路,也可求最长路。
答案: 正确
4、
SPFA是Bellman-Ford算法的一种队列实现,减少了不必要的冗余计算。
答案: 正确
5、
Floyd算法可以构造无向或有向加权图(包含长度为负的回路)的完全最短路径
答案: 错误
6、
SPFA算法计算时,如果一个顶点入队列的次数超过n,则存在负权回路。
答案: 正确
7、
动态规划计算树上的最大独立集时,从叶子开始,先计算子树,逐步计算到根节点。
答案: 正确
7.8 知识梳理
1、
LCS问题的不同子问题个数为 O()
答案: mn
2、
序列 . 设LCS(X, Y)=
。若
则
,且
是
和
的最长公共子序列。
答案: 正确
3、
给定串 , 一个比对M是有序对
的集合,每一项至多参与一个配对,并且允许交叉。
答案: 错误
4、
动态规划方程中子问题个数为n^t,依赖的子问题个数为n^e, 则算法的时间复杂度为n^(t+e)
答案: 正确
5、
序列的编辑距离是间隔的惩罚值和错配的惩罚值之和。
答案: 正确
6、
动态规划方程M[i,j]=min(M[k]+wk), 1≤i≤k≤j≤n, 则算法的时间复杂度为n^2
答案: 错误
上方为免费预览版答案,如需购买完整答案,请点击下方红字
为了方便下次阅读,建议在浏览器添加书签收藏本网页
添加书签方法:
1.电脑按键盘的Ctrl键+D键即可收藏本网页
2.手机浏览器可以添加书签收藏本网页
我们的公众号
打开手机微信,扫一扫下方二维码,关注微信公众号:萌面人APP
本公众号可查看各种网课答案,还可免费查看大学教材答案
济桥熄浩存沧蔑入苟抹梗妥窝