【算法分析与设计】【期中(末)复习题】【2022秋】

一. 单选题

1.按照渐近阶从低到高的顺序排列下列表达式:

30n,2logn,4,n!

A. 4<30n<2logn<n!
B. 30n<4<2logn<n!
C. n!<4<2logn<30n
D. `4<2logn<30n<n!

O(1) < O(logn) < O(n) < O(nlogn) < O(n2) < O(n3) < O(nk) < O(2n) < O(n!) < O(nn)
(常数阶 < 对数阶 < 线性阶 < 线性对数阶 < 平方阶 < 立方阶 < K次方阶 < 指数阶 < 阶乘阶 < n的n次方)

2.二维空间中有n个点,采用蛮力法法求其中距离最近的两个点,对应的算法时间复杂度是( )。
A. O(n2)
B. O(n)
C. O(n3)
D. O(nlogn)

3.计算时间复杂度T(n)
T ( n ) = { 4 n=1 T ( n − 1 ) + 4 其它 T(n)= \begin{cases} 4& \text{n=1}\\ T(n-1)+4& \text{其它} \end{cases} T(n)={4T(n1)+4n=1其它

A. T(n)=4n
B. T(n)=2n
C. T(n)=8n
D. T(n)=n
解析:三种方法求递归算法的时间复杂度(递推,master定理,递归树)/CSDN@毕业势必进大厂

4.快速排序算法的效率取决于()
A. 序列是否有序排列
B. 划分的对称性
C. 原始序列是否逆序排列
D. 原始序列是否是正序排列

5.按照渐近阶从低到高的顺序排列下列表达式:

5n2,2logn,n1/3,4n

A. 4n<5n2<2logn<n1/3
B. n1/3<2logn<5n2<4n
C. 2logn<n1/3< 5n2<4n
D. 5n2<2logn<n1/3<4n

6.二分搜索算法是利用( )实现的算法。
A. 回溯法
B. 蛮力法
C. 分治策略
D. 动态规划

7.贪心算法能求得下面( )问题的整体最优解。
A. 活动安排问题
B. 多机调度问题
C. 0/1背包问题
D. n皇后问题

8.记号O的定义正确的是( )。
A. O(g(n)) = { f(n) | 存在正常数c和n0使得对所有n≥n0有:0≤ cg(n) ≤f(n) };
B. O(g(n)) = { f(n) | 对于任何正常数c>0,存在正数和n0>0使得对所有n≥n0有:0≤cg(n) < f(n) };
C. O(g(n)) = { f(n) | 对于任何正常数c>0,存在正数和n0>0使得对所有n≥n0有:0 ≤f(n)≤cg(n) };
D. O(g(n)) = { f(n) | 存在正常数c和n0使得对所有n≥n0有:0≤ f(n) ≤ cg(n) };
解析:算法导论学习 之 渐进符号/博客园@BlackStorm

9.下列算法中通常以自底向上的方式求解最优解的是( )。
A. 备忘录法
B. 回溯法
C. 贪心法
D. 动态规划法

10.一个问题可以用动态规划法或贪心法求解的关键特征是问题的( )
A. 重叠子问题性质
B. 定义最优解
C. 贪心选择性质
D. 最优子结构性质

11.函数f(n)=2n,g(n)=3n,则:()
A. 2n=O(3n)
B. 2n=Ω(3n)
C. 2n=o(3n)
D. 2n=θ(3n)

12.算法分析中,记号Ω表示()
A. 非紧上界
B. 渐近上届
C. 渐近紧界
D. 渐近下届

13.算法要对异常情况进行适当的处理,就是算法的()。
A. 可行性
B. 健壮性
C. 正确性
D. 有穷性

14.用枚举法求解0/1背包问题,算法的效率是( )
A. 多项式阶
B. 常数阶
C. 指数阶
D. 对数阶

15.动态规划算法与分治法类似,其基本思想也是将待求解问题分解成若干个子问题,他们的主要差别是 ()。
A. 子问题是否容易计算
B. 是自顶向下解决还是自底向上解决
C. 问题能否递归解决
D. 子问题是否相互独立

16.设S是一组n条直线,其中没有两条是平行的,也没有三条在同一点相交。可以证明S中的直线确定了( )个交点。
A. Θ(n)
B. Θ(n2)
C. Θ(n(n-1))
D. Θ(n3)

17.Hanoi塔问题如下图所示。现要求将塔座A上的的所有圆盘移到塔座B上,并仍按同样顺序叠置。移动圆盘时遵守Hanoi塔问题的移动规则。由此设计出解Hanoi塔问题的递归算法正确的为:( )
在这里插入图片描述

A.

void hanoi(int n,int A,int C,int B)
{  
    if (n>0)
        { 
          hanoi(n-1,A,B,C); //将A座上的n-1个盘子借助B座移向C座
          move(n,A,B);       //将A座上最后一个盘子移向B座
          hanoi(n-1,C,A,B);//将C座上的n-1个盘子借助A座移向B座
        }
}

B.

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);
        }
}

C.

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);
        }
}

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);
        }
}

解析:汉诺塔——经典递归问题(c语言实现)/CSDN@小钟hhh

18.函数 f(n)=10,g(n)=log10,则:( )
A. 10=Ω(log10)
B. 10=o(log10)
C. 10=O(log10)
D. 10=θ(log10)

19.给出下面算法的时间复杂性

p = 0for( i =0;i<= 2n;i++) 
     p = p*i;

A. O(n)
B. O(n4)
C. Ο(2n)
D. O(n2)

20.函数 f(n)=log2n,g(n)=logn,则 :()
A. log2n=O(logn)
B. log2n=o(logn)
C. log2n=θ(logn)
D. log2n=Ω(logn)

二. 填空题

1.下面算法的时间复杂度为()

void main()
{  
    int m,i,s;
    for(m=2;m<=1000;m++)
    {
        s=0;
        for (i=1;i<=m/2;i++)
            if (m%i==0) 
                s+=i; //i是m的一个因子
            if (m==s)
                printf("%d ",m);
    }
}

1或O(1)

2.蛮力法是一种简单直接地解决问题的方法,也是最低效的方法。典型的()时间算法一般都是采用蛮力法。

指数

3.利用快速排序算法对下面10个整数进行一次划分,基准为第一个数字2,划分结果为(数字之间以逗号分隔):
在这里插入图片描述

1,2,5,7,10,6,9,4,3,8

1,2,5,7,10,6,9,4,3,8

4.Cook论题以多项式时间复杂性为分界线,将可以在多项式时间内解决的问题称为( ),将在指数时间 解决的问题称为( )

(1) 易解问题
(2) 难解问题

5.分治和()就像孪生兄弟,总是同时应用于算法设计之中。

递归

6.在函数的定义过程中出现了调用此函数的语句,这种函数称为()函数。

递归

7.算法中描述的操作都可以通过已经实现的基本操作运算有限次实现。这指的是算法的( )

可行性

8.蛮力法也称( ),它的基本思想是采用一定的策略依次处理待求解问题的所有元素,从而找出问题的解。

穷举法

枚举法

9.算法的( )性质指的是一个算法的执行必须结束。也就是说一个算法它所包含的计算步骤和每个步骤都能在有限时间内完成。

有穷性

10.主程序中调用下面算法f(3),写出程序的输出。

void f(int n)
{  
    if (n<1) 
        return;
    else
    { 
        printf("n=%d\n",n);
        f(n-1);
        printf("n=%d\n",n);
  }
}

n=3
n=2
n=1
n=1
n=2
n=3

11.函数嵌套调用和返回时 ,函数之间的信息传递和控制转移必须通过()来实现。

12.一个算法的存储量包括形参所占空间和临时变量所占空间。在对算法进行存储空间分析时,只考察( )所占空间。

临时变量

三. 判断题

1.实现分治策略的算法时,只能采用递归函数。
A. 对
B. 错

2.O(1)=O(8),O(1)和O(8)表示同一个函数时,差别仅在于其中的常数因子。
A. 对
B. 错

3.一个算法的效率用O符号表示时,总是采用最有价值的g(n)表示,称之为“紧凑下界”或“紧确下界”。
A. 对
B. 错

4.Θ符号比O符号和Ω符号都精确,f(n)=Θ(g(n)),只要g(n)既是f(n)的上界又是f(n)的下界。
A. 对
B. 错

答案解析:当且仅当

5.分治策略将求出的小规模的问题的解合并为一个更大规模的问题的解,自顶向下逐步求解原来问题。
A. 对
B. 错

答案解析:自底向上

6.算法分析是分析算法占用计算机资源的情况,即分析算法的时间复杂度。
A. 对
B. 错

7.如果一个算法对其每一个输入实例,都能输出正确的结果并停止,则称它是可靠的。
A. 对
B. 错

8.算法A的运行时间至少是O(),这种说法没有意义
A. 对
B. 错

四. 多选题

1.设n为算法中的问题规模,通常用()渐进符号表示算法的执行时间与n之间的一种增长关系。
A. Ω
B. Σ
C. O
D. Θ

2.对算法与数据结构关系的描述,正确包括()。
A. 数据结构是算法设计的基础
B. 算法设计就是在选定的存储结构上设计一个满足要求的好算法
C. 一种数据结构只支持一种算法
D. 算法是编程思想,数据结构是这些思想的逻辑基础

3.分治策略所能解决的问题一般具有以下几个特征()。
A. 问题的规模缩小到一定程度就可以容易求解
B. 子问题之间相互重叠
C. 子问题的解可以合并出原问题的解
D. 问题可以分解为若干个规模较小的相同问题

  • 11
    点赞
  • 105
    收藏
    觉得还不错? 一键收藏
  • 6
    评论
基础篇 1、 算法有哪些特点?它有哪些特征?它和程序的主要区别是什么? 2、 算法的时间复杂度指的是什么?如何表示? 3、 算法的空间复杂度指的是什么?如何表示? 4、 什么是最坏时间复杂性?什么是最好时间复杂性? 5、 什么是递归算法?什么是递归函数? 6、 分治法的设计思想是什么? 7、 动态规划基本步骤是什么? 8、 回溯法与分枝限界法之间的相同点是什么?不同之处在哪些方面? 9、 分枝限界法的基本思想是什么? 10、 限界函数的功能是什么? 11、 设某一函数定义如下: 编写一个递归函数计算给定x的M(x)的值。 12、 已知一个顺序表中的元素按元素值非递减有序排列,编写一个函数删除表中多余的值相同的元素。 13、 分别写出求二叉树结点总数及叶子总数的算法。 分治术 14、 有金币15枚,已知其中有一枚是假的,而且它的重量比真币轻。要求用一个天平将假的金币找出来,试设计一种算法(方案),使在最坏情况下用天平的次数最少。 15、 利用分治策略,在n个不同元素中找出第k个最小元素。 16、 设有n个运动员要进行网球循环赛。设计一个满足以下要求的比赛日程表。 (1)每个选手必须与其它n-1选手各赛一次; (2)每个选手一天只能赛一次。 17、 已知序列{503,87,512,61,908,170,897,275,652,462},写一个自底向上的归并分类算法对该序列作升序排序,写出算法中每一次归并执行的结果。 贪心法 18、 设有n个文件f1,f2,…,fn要求存放在一个磁盘上,每个文件占磁盘上1个磁道。这n个文件的检索概率分别是p1,p2,…,pn,且 =1。磁头从当前磁道移到被检索信息磁道所需的时间可用这两个磁道之间的径向距离来度量。如果文件fi存放在第i道上,1≤i≤n则检索这n个文件的期望时间是 。其中d(i,j)是第i道与第j道之间的径向距离。磁盘文件的最优存储问题要求确定这n个文件在磁盘上的存储位置,使期望检索时间达到最小。试设计一个解此问题的算法,并分析算法的正确性与计算复杂性。 19、 设有n个正整数,编写一个算法将他们连接成一排,组成一个最大的多位整数。用贪心法求解本题。 20、 键盘输入一个高精度的正整数N(此整数中没有‘0’),去掉其中任意S个数字后剩下的数字按原左右次序将组成一个新的正整数。编程对给定的N和S,寻找一种方案使得剩下的数字组成的新数最小(输出应包括所去掉的数字的位置和组成的新的正整数,N不超过240位)。 21、 对于下图给出的有向网,写出用Dijkstra方法求从顶点A到图中其它顶点的最短路径的算法,并写出执行算法过程中顶点的求解次序及从顶点A到各顶点路径的长度。 22、 对于上图给出的有向图,写出最小成本生成树,给出求解算法。 动态规划 23、 求出上图中每对结点间的最短距离的算法,并给出计算结果。 24、 下图中给出了一个地图,地图中每个顶点代表一个城市,两个城市间的连线代表道路,连线上的数值代表道路的长度。现在,想从城市A到达城市E,怎样走路程最短,最短路程的长度是多少? 25、 已知序列a1,a2,…,an,试设计算法,从中找出一子序列 ai1 < ai2 < … E。试用动态规划的最优化原理求出A->E的最省费用。 29、 已知如下图,写出用动态规划求最短路径的递推关系式,并写出求从源点A0到终点A3 的最短路径过程。给出求解算法。 6 A1 A2 5 5 2 A0 A3 3 4 4 B1 B2 5 搜索与遍历问题 30、 已知有向图G=,试设计算法以判断对于任意两点u和v,是否存在一条从u到v的路径,并分析其复杂度。 31、 对于给定的一个二叉树T(如下图) a) 设计一个算法,统计二叉树中结点总数; b) 设计一个算法,求二叉树最大宽度及最大宽度所在深度。 32、 判近亲问题。给定一个家族族谱,为简化问题起见,假设家族中的夫妻关系只表示男性成员。设用线性表存储家族成员,用成员的父指针指向其生父。编写一个在此种族谱表示方式下的算法,判断给定的二个家族成员是否是五代内的近亲。(提示:家族成员的表示方式应与搜索方式相适应。) 33、 完全二叉树定义为:深度为K,具有N个结点的二叉树的每个结点都与深度为K的满二叉树中编号从1至N的结点一一对应。(1)写一个建立二叉树的算法。(2)写一个判别给定的二叉树是否是完全二叉树的算法。 34、 编写计算整个二叉树高度的算法(二叉树的高度也叫二叉树的深度)。 35、 编写计算二叉树最大宽度的算法(二叉树的最大宽度是指二叉树所有层中结点个数的最大值)。 回溯法 36、 (组合问题)求出从自然数1,2,…,n中任取r个数的所有组合。 37、 传教士与野人渡河问题。有M个传教士和M个野人准备渡河,船一次最多载2人,任何时刻野人数不能多于传教士数,但允许全部为野人。编写算法给出合理的渡河计划。 38、 某乡有n个村庄,有一个售货员,他要到各个村庄去售货,各村庄之间的路程s是已知的,且A村到B村与B村到A村的路大多不同。为了提高效率,他从商店出发到每个村庄一次,然后返回商店所在的村,假设商店所在的村庄为1。试设计一个算法,帮他选择一条最短的路。 39、 设某一机器由n个部件组成,每一种部件都可以从m个不同的供应商处购得。设wi,j是从供应商j处购得的部件i的重量,ci,j是相应的价格。试设计一个算法,给出总价格不超过c的最小重量机器设计。 40、 设有n件工作分配给n个人。为第i个人分配工作j所需的费用为ci,j 。试设计一个算法,计算最佳工作分配方案,为每一个人都分配1 件不同的工作,并使总费用达到最小。 41、 编写程序求解骑士巡游问题:在n行n列的棋盘上(如n=8),假设一位骑士(按象棋中“马走日”的行走法)从初始坐标位置(x1,y1)出发,要遍访(巡游)棋盘中的每一个位置一次。请编一个程序,为骑士求解巡游“路线图”(或告诉骑士,从某位置出发时,无法遍访整个棋盘 — 问题无解骑士巡游)。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值