算法习题——选择题

Posted zhai1997

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了算法习题——选择题相关的知识,希望对你有一定的参考价值。

1、关于算法的说法中正确的有(C)。

Ⅰ.求解某一类问题的算法是唯一的(如:冒泡排序可以用:穷举法、递归)

Ⅱ.算法必须在有限步操作之后停止

Ⅲ.算法的每一步操作必须是明确的,不能有歧义或含义模糊

Ⅳ.算法执行后一定产生确定的结果

A.1个           B.2个           C.3个           D.4个

算法设计的目标:

(1)正确性:正确地执行预先规定的功能和性能要求。

(2)可使用性(用户友好性):可以很方便地使用。

(3)可读性:易于理解。

(4)健壮性:提供异常处理,能够对不合理的数据进行检查。

(5)高效率与低存储:执行时间短的算法效率高,所需的最大存储容量低的算法好。

算法的重要特性:

(1)有限性:执行有限步之后结束。

(2)确定性:每一条指令无二义性。

(3)可行性:每一条运算都能精确地执行。

(4)输入性:一个算法有零个或多个输入。

(5)输出性:一个算法有一个或多个输出。

 

2、T(n)表示当输入规模为n时的算法效率,以下算法效率最优的是(C)。

A.T(n)= T(n-1)+1,T(1)=1                B.T(n)= 2n2

C.T(n)= T(n/2)+1,T(1)=1                D.T(n)=3nlog2n

技术图片

 

 

3、以下关于渐近记号的性质是正确的是(A)

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))⇒h(n)=O(f(n))         (不满足传递性)

C.O(f(n))+O(g(n))=O(min(f(n),g(n)))      (max)

D.f(n)=O(g(n))⇔g(n)=O(f(n))     (上限不满足反身性)

技术图片

 

 

4.Hanoi塔问题如下图所示,现要求将塔座A上的所有圆盘移到塔座B上,并仍按同样顺序叠置,移动圆盘时遵守Hanoi塔问题的移动规则,由此设计出解Hanoi塔问题的递归算法正确的是(B)

汉诺塔:https://www.cnblogs.com/zhai1997/p/11773077.html

 

A、

void Hanoi(int n, int A,int C,int B){ 

if(n>0) {Hanoi (n-1,A,C,B); Move(n,a,b); Hanoi(n-1,C,B,A); } }

B、

void Hanoi(int n, int A,int B,int C){

if(n>0){
Hanoi (n
-1,A,C,B); Move(n,a,b); Hanoi(n-1,C,B,A); } }

C、

void Hanoi(int n,int C,int B,int A){

if(n>0)

{

Hanoi(n-1,A,C,B);

Move(n,a,b);

Hanoi(n-1,C,B,A);

}

D、

void Hanoi(int n, int C,int A,int B)

{

if(n>0)
{
Hanoi(n-1,A,C,B);

Move(n,a,b);

Hanoi(n-1,C,B,A)

}

 

5.分治法的设计思想是将一个难以直接解决的大问题分割成规模较小的子问题,分别解决子问题,最后将子问题的解组合起来形成原问题的解。这要求原问题和子问题(C)。

A.问题规模相同,问题性质相同

B.问题规模相同,问题性质不同

C.问题规模不同,问题性质相同

D.问题规模不同,问题性质不同

分治法是采用递归的思想,将大问题转化为小问题,然后由小问题(子问题之间相互独立且与原问题的形式相同)构造出大问题的解。

分治法的特性:

(1)问题的规模缩小到一定程度可以很容易的解决;

(2)可以分解为若干个规模较小的相同问题;

(3)子问题的解可以合并为该问题的解;

(4)该问题分解出的各个子问题是相互独立的,即子问题之间不包含公共的子问题

 

6、在寻找n个元素中第k小元素问题中,如快速排序算法思想,运用分治算法对n个元素进行划分,如何选择划分基准?下面(D)答案解释最合理。

A.随机选择一个元素作为划分基准

B.取子序列的第一个元素作为划分基准

C.用中位数的中位数方法寻找划分基准

D.以上皆可行,但不同方法,算法复杂度上界可能不同

取第一个元素的话时间复杂度为(Onlog2n),P81。

 

7、二分搜索算法是利用( A )实现的算法。

A、分治策略 B、动态规划法 C、贪心法 D、回溯法

二分搜索(二分查找):搜索过程从数组的中间元素开始,如果中间元素正好是要查找的元素,则搜索过程结束;如果某一特定元素大于或者小于中间元素,则在数组大于或小于中间元素的那一半中查找,而且跟开始一样从中间元素开始比较。如果在某一步骤数组为空,则代表找不到。但是前提是搜索的数组是有序的。

 

8、Strassen矩阵乘法是利用( A )实现的算法。

A、分治策略 B、动态规划法 C、贪心法 D、回溯法

 

9、使用分治法求解不需要满足的条件是( A )。

A、子问题必须是一样的       B、子问题不能够重复

C、子问题的解可以合并       D、原问题和子问题使用相同的方法解

规模改变,问题性质不变

 

10、实现合并排序利用的算法是( A )

A、分治策略 B、动态规划法 C、贪心法 D、回溯法

先分解:将序列分解为length长度的若干子问题

求解子问题:将相邻的两个子问题合并为一个有序的子序列

合并:合并不需要执行任何操作

 

11、实现大整数的乘法是利用的算法( C )

A、贪心法 B、动态规划法 C、分治策略 D、回溯法

 

12.(C)是贪心算法的基本要素。

A.重叠子问题            B.构造最优解       

C.贪心选择性质          D.定义最优解

贪心算法基本要素:

(1)贪心选择性质:每一步所做的贪心选择最终导致问题的整体最优解。

(2)最优子结构性质:一个问题的最优解包含其子问题的最优解。

 

13.采用贪心算法的最优装载问题的主要计算量在于将集装箱依其重量从小到大排序,故算法的时间复杂度为(D)。

A.O(n)          B.O(log2n)          C.O(n3)         D.O(nlog2n)

有一批集装箱要装上一艘载重量为C的轮船,其中集装箱i的重量为Wi。要求在装载体积不受限制的情况下,将尽可能多的集装箱装上轮船。

 

14.一棵哈夫曼树共有215个结点,对其进行哈夫曼编码,共能得到(B )个不同的码字。

A.107               B.108           C.214           D.215

哈夫曼树中只有度为零和度为二的节点,没有度为一的结点,且n0=n2+1(非空二叉树的性质),n=n0+n2

只有叶子结点能够产生码字,也就是计算度为零的结点。

 

15、哈弗曼编码的贪心算法所需的计算时间为(B)。

A、O(n2n)         B、O(nlog2n)  C、O(2n)      D、O(n)

Onlog2n

 

16、背包问题的贪心算法所需的计算时间为(B)

A、O(n2n)         B、O(nlog2n)  C、O(2n)      D、O(n)

问题描述:与0 / 1背包问题不同的是,完全背包问题可以装入一部分物品进入背包,也就是说背包一定可以装满。

方案:将物品以单位价值从大到小排序,除最后一个物品只取一部分之外,其他物品要么全拿,要么不拿

时间复杂度:快速排序(Onlog2n)

                      while循环(n)

                      所以时间复杂度为(Onlog2n)

 

17、以下不属于贪心算法的是( D)

A.Prim算法          B.Kruskal算法       C.Dijkstra算法      D.深度优先遍历

(1)Prim算法 :按照顶点规定

技术图片

 

 

Kruskal算法:按照边规定

技术图片

 

 

Dijkstra算法:单源最短路径

深度优先遍历:回溯,走不通的时候回溯

 

18、下面问题( B )不能使用贪心法解决。

A、单源最短路径问题             B、N皇后问题

C、最小生成树问题               D、背包问题

N皇后为递归。

 

19、关于0/1背包问题,以下描述正确的是(D)。

A.可以使用贪心算法找到最优解

B.能找到多项式时间的有效算法

C.使用教材介绍的动态规划方法可求解任意0-1背包问题

D.对于同一背包与相同的物品,背包问题取得的总价值一定大于等于做0/1背包问题

A:穷举法(结合求解幂集的方法)

C:动态规划可以求解完全背包问题:  每种物品可以挑选任意多件。

D:背包问题中背包一定能够装满,但是0/1背包不能(https://www.cnblogs.com/zhai1997/p/12121834.html)。

 

20.一个问题可用动态规划算法或贪心算法求解的关键特征是问题的( C)。

A.贪心选择性质      B.重叠子问题        C.最优子结构性质        D.定义最优解

最优子结构性质:一个问题的最优解包含其子问题的最优解。

 

21.能采用贪心算法求最优解的问题,一般具有的重要性质为:( A )

A、最优子结构性质与贪心选择性质 B、重叠子问题性质与贪心选择性质

C、最优子结构性质与重叠子问题性质 D、预排序与递归调用

贪心算法基本要素:

(1)贪心选择性质:每一步所做的贪心选择最终导致问题的整体最优解。

(2)最优子结构性质:一个问题的最优解包含其子问题的最优解。

 

22. ( D )是贪心算法与动态规划算法的共同点。

A.重叠子问题 B、构造最优解 C、贪心选择性质 D、最优子结构性质

最优子结构性质:一个问题的最优解包含其子问题的最优解。

 

23.下列算法中不能解决0/1背包问题的是(A)

A、贪心法B、动态规划C、回溯法D、分支限界法

(1)贪心算法在某些情况下会出错。

(2)0-1背包问题可以用动态规划、回溯法和分支限界法这三种任意一种算法策略来求解。

 

24.下列算法中通常以自底向上的方式求解最优解的是( B )。

A.分去限界法 B、动态规划法 C、贪心法 D、回溯法

 

 25.贪心算法与动态规划算法的主要区别是( B )。

A、最优子结构 B、贪心选择性质 C、构造最优解 D、定义最优解

贪心算法基本要素:

(1)贪心选择性质:每一步所做的贪心选择最终导致问题的整体最优解。

(2)最优子结构性质:一个问题的最优解包含其子问题的最优解。

而动态规划也具有最优子结构性质。

 

26.动态规划算法的基本要素为( C )

A、最优子结构性质与贪心选择性质 B、重叠子问题性质与贪心选择性质

C、最优子结构性质与重叠子问题性质 D、预排序与递归调用

(1)子问题重叠性(要与分治法区别,分治的子问题是相互独立的)

(2)最优子结构性质

 

27.关于回溯法以下叙述中不正确的是(C)。

A.回溯法有“通用解题法”之称,它可以系统地搜索一个问题的所有解或任意解

B.回溯法是一种既带系统性又带有跳跃性的搜索算法

C.回溯算法需要借助队列这种结构来保存从根结点到当前扩展结点的路径

D.回溯算法在生成解空间的任一结点时,先判断该结点是否可能包含问题的解,如果肯定不包含,则跳过对该结点为根的子树的搜索,逐层向祖先结点回溯

 C:借助于树结构

 

28、下列算法中通常以深度优先方式系统搜索问题解的是( D )。

     A、备忘录法 B、动态规划法 C、贪心法 D、回溯法

回溯法:深度优先

分支限界法:广度优先

 

29.下面哪种函数是回溯法中为避免无效搜索采取的策略( B )

    A、递归函数 B、剪枝函数 C、随机数函数 D、搜索函数

避免无效搜索的方法:

(1)约束函数:减去不满足约束的子树

(2)限界函数:剪去得不到解或最优解的子树

 

30、0-1背包问题的回溯算法所需的计算时间为( C )

A、O(n2)  B、O(nlogn)  C、O(2n)  D、O(n)

 

31.以深度优先方式系统搜索问题解的算法称为 ( D ) 。

A、分支界限算法 B、概率算法 C、贪心算法 D、回溯算法 

回溯法:深度优先

分支限界法:广度优先

 

32.回溯法在问题的解空间树中,按( D )策略,从根结点出发搜索解空间树。

A、广度优先 B、活结点优先 C、扩展结点优先 D、深度优先

回溯法:深度优先

分支限界法:广度优先

 

33.分支限界法在问题的解空间树中,按( A )策略,从根结点出发搜索解空间树。

A.广度优先 B. 活结点优先 C.扩展结点优先 D. 深度优先

回溯法:深度优先

分支限界法:广度优先

 

34.采用广度优先策略搜索的算法是( A )。

A、分支界限法 B、动态规划法 C、贪心法 D、回溯法

回溯法:深度优先

分支限界法:广度优先

 

35.常见的两种分枝限界法为(D )。

A.广度优先分枝限界法与深度优先分枝限界法

B.队列式(FIFO)分枝限界法与堆栈式分枝限界法

C.排列树法与子集树法

D.队列式(FIFO)分枝限界法与优先队列式分枝限界法

P185

 

36.最大效益优先是( A )的一搜索方式。

A、分支界限法 B、动态规划法 C、贪心法 D、回溯法

 

37.下面不是分支界限法搜索方式的是( D )。

A、广度优先 B、最小耗费优先 C、最大效益优先 D、深度优先

回溯法:深度优先

分支限界法:广度优先

 

38.分支限界法解0/1背包问题时,优先级队列的组织形式是( B )。

   A、小根堆   B、大根堆     C、栈        D、循环链表

最大优先队列:大根堆

最小优先队列:小根堆

队列式分支限界法:队列

 

39、优先队列式分支限界法选取扩展结点的原则是( C )。

A、先进先出 B、后进先出 C、结点的优先级 D、随机

选取优先级最高的结点作为当前的扩展结点。

以上是关于算法习题——选择题的主要内容,如果未能解决你的问题,请参考以下文章

算法导论习题—排序最坏情况线性时间选择算法小顺序统计量

期末复习数据结构与算法练习题

概论——习题整理

直通BAT算法精讲附程序源码

算法习题---5.1代码对齐(UVa1593)

数据结构与算法分析(C语言描述)习题1.1