算法期末复习题final.docx
《算法期末复习题final.docx》由会员分享,可在线阅读,更多相关《算法期末复习题final.docx(12页珍藏版)》请在冰豆网上搜索。
算法期末复习题final
算法分析与设计期末复习题目
一、选择题
1.下列算法中通常以自底向上的方式求解最优解的是( B )。
A、备忘录法B、动态规划法C、贪心法D、回溯法
2、衡量一个算法好坏的标准是(C)。
A运行速度快B占用空间少C时间复杂度低D代码短
3、以下不可以使用分治法求解的是(D)。
A棋盘覆盖问题B选择问题C归并排序D0/1背包问题
4.下列是动态规划算法基本要素的是( D )。
A、定义最优解B、构造最优解C、算出最优解D、子问题重叠性质
5.采用广度优先策略搜索的算法是( A )。
A、分支界限法B、动态规划法C、贪心法D、回溯法
6、合并排序算法是利用( A )实现的算法。
A、分治策略 B、动态规划法 C、贪心法 D、回溯法
7、下列不属于影响程序执行时间的因素有哪些?
(C)
A.算法设计的策略B.问题的规模
C.编译程序产生的机器代码质量D.计算机执行指令的速度
8、使用分治法求解不需要满足的条件是(A)。
A子问题必须是一样的
B子问题不能够重复
C子问题的解可以合并
D原问题和子问题使用相同的方法解
9、下面问题(B)不能使用贪心法解决。
A单源最短路径问题BN皇后问题
C最小花费生成树问题D背包问题
10.一个问题可用动态规划算法或贪心算法求解的关键特征是问题的( B )。
A、重叠子问题B、最优子结构性质C、贪心选择性质D、定义最优解
11.以深度优先方式系统搜索问题解的算法称为(D)。
A、分支界限算法 B、概率算法 C、贪心算法 D、回溯算法
12.实现最长公共子序列利用的算法是( B )。
A、分治策略B、动态规划法C、贪心法D、回溯法
13.下列算法具有最优子结构的算法是(D)
A.概率算法B.回溯法C.分支限界法D.动态规划法
14.算法分析是(C)
A.将算法用某种程序设计语言恰当地表示出来
B.在抽象数据集合上执行程序,以确定是否会产生错误的结果
C.对算法需要多少计算时间和存储空间作定量分析
D.证明算法对所有可能的合法输入都能算出正确的答案
15衡量一个算法好坏的标准是(C)
A.运行速度快B.占用空间少C.时间复杂度低D.代码短
16.二分搜索算法是利用(A)实现的算法。
A.分治法B.动态规划法 C.贪心法 D.回溯法
17.用贪心法设计算法的关键是(B)。
A.将问题分解为多个子问题来分别处理
B.选好最优量度标准
C.获取各阶段间的递推关系式
D.满足最优性原理
18.找最小生成树的算法Kruskal的时间复杂度为(D)(其中n为无向图的结点数,m为边数)
A.O(n2)B.O(mlogn)C.O(nlogm)D.O(mlogm)
19.回溯法搜索状态空间树是按照(C)的顺序。
A.中序遍历B.广度优先遍历
C.深度优先遍历D.层次优先遍历
20.采用广度优先策略搜索的算法是(A)。
A.分支界限法B.动态规划法
C.贪心法D.回溯法
21.函数32n+10nlogn的渐进表达式是(B).
A.O(2n)B.O(32n)C.O(nlogn)D.O(10nlogn)
22.二分搜索算法的时间复杂性为(C)。
A.O()B.O()C.O()D.O()
23、快速排序算法的时间复杂性为(D)。
A.O()B.O()C.O()D.O()
24、算法是由若干条指令组成的有穷序列,而且满足以下性质(D)
A.输入:
有0个或多个输入B.输出:
至少有一个输出
C.确定性:
指令清晰,无歧义D.有限性:
指令执行次数有限,而且执行时间有限
A.
(1)
(2)(3)B.
(1)
(2)(4)C.
(1)(3)(4)D.
(1)
(2)(3)(4)
25、背包问题的贪心算法所需的计算时间为(B)
A.O(n2n)B.O(nlogn)C.O(2n)D.O(n)
26.下列算法中不能解决0/1背包问题的是(A)
A贪心法B动态规划C回溯法D分支限界法
27.在寻找n个元素中第k小元素问题中,若使用快速排序算法思想,运用分治算法对n个元素进行划分,应如何选择划分基准?
下面(D)答案解释最合理。
A.随机选择一个元素作为划分基准
B.取子序列的第一个元素作为划分基准
C.用中位数的中位数方法寻找划分基准
D.以上皆可行。
但不同方法,算法复杂度上界可能不同
28.分治法的设计思想是将一个难以直接解决的大问题分割成规模较小的子问题,分别解决子问题,最后将子问题的解组合起来形成原问题的解。
这要求原问题和子问题(C)。
A.问题规模相同,问题性质相同B.问题规模相同,问题性质不同
C.问题规模不同,问题性质相同D.问题规模不同,问题性质不同
29、下面是贪心算法的基本要素的是( C )。
A、重叠子问题B、构造最优解C、贪心选择性质D、定义最优解
30.函数的渐进表达式是(D)。
A.O()B.O()C.O()D.O()
二、填空题
1、解决0/1背包问题可以使用动态规划、回溯法和分支限界法,其中不需要排序的是动态规划,需要排序的是回溯法,分支限界法。
2、使用回溯法进行状态空间树裁剪分支时一般有两个标准:
约束条件和目标函数的界,N皇后问题和0/1背包问题正好是两种不同的类型,其中同时使用约束条件和目标函数的界进行裁剪的是0/1背包问题,只使用约束条件进行裁剪的是N皇后问题。
3.贪心算法基本要素有最优度量标准和最优子结构。
4.回溯法解旅行售货员问题时的解空间树是排列树。
5.二分搜索算法是利用分治策略实现的算法。
6.算法的复杂性有时间复杂性和空间复杂性之分。
7、程序是算法 用某种程序设计语言的具体实现。
8、算法的“确定性”指的是组成算法的每条指令是清晰的,无歧义的。
9.矩阵连乘问题的算法可由动态规划设计实现。
10.回溯法搜索解空间树时,常用的两种剪枝函数为约束函数和限界函数。
11.任何可用计算机求解的问题所需的时间都与其规模有关。
12.快速排序算法的性能取决于划分的对称性。
13.背包问题的贪心算法
voidKnapsack(intn,floatM,floatv[],floatw[],floatx[])
{
Sort(n,v,w);
inti;
for(i=1;i<=n;i++)x[i]=0;
floatc=M;
for(i=1;i<=n;i++){
if(w[i]>c)break;
x[i]=1;
c-=w[i];
}
if(i<=n)x[i]=c/w[i];
}
14.下面算法的基本运算是加法(或:
赋值)运算,该算法中第4步执行了2n-1次。
算法COUNT
输入:
正整数n(n=)。
输出:
count的值。
1.count=0
2.whilen>=1
3.forj=1ton
4.count=count+1
5.endfor
6.n=n/2
7.endwhile
endCOUNT
15.算法是由若干条指令组成的有穷序列,且要满足输入、输出、确定性和有限性四条性质。
16.快速排序、插入排序和选择排序算法中,快速排序算法是分治算法。
17.下面算法的基本语句是__S=S+i*j;____,算法的时间复杂度是___O()_____
intfun(intn)
{
intS=0;
for(inti=1;i<=n;i++)
for(intj=1;jS=S+i*j;
returnS;
}
18.最小生成树的prim算法应用的是贪心算法思想。
19.分治算法的基本步骤包括分解子问题,递归求解子问题,合并解
20.归并排序和快速排序在平均情况下的时间复杂度都是O(nlogn),但是最坏情况下两种算法有区别,其中归并排序为O(nlogn),快速排序为_O()
二、算法设计
1.下面是用回溯法求解图的m着色问题的算法(求出所有解)。
图的m着色问题:
给定一个无向连通图G和m种颜色,给图G的所有顶点着色,使得任何两相邻顶点的颜色不同。
已有函数color(k)用于在前k-1个顶点已着色的情况下,判断第k个顶点是否可着颜色x[k];是则返回true,否则返回false。
输入:
正整数m,n和含n个顶点的无向连通图G的邻接矩阵graph。
输出:
图G的m着色问题的所有解, 若无解,则输出nosolution。
flag=false
k=1;x[1]=0
whilek>=1
while
(1)
x[k]=x[k]+1
ifcolor(k)then
if
(2)then
flag=true;outputx[1..n]
else
k=(3)
(4)
endif
endif
endwhile
(5)
endwhile
ifnotflagthenoutput“nosolution”
endm-COLORING
(1)x[k](2)k=n(3)k+1
(4)x[k]=0(5)k=k-1
2.下面是求解矩阵链乘问题的动态规划算法。
矩阵链乘问题:
给出n个矩阵M1,M2,…,Mn,Mi为riri+1阶矩阵,i=1,2,…,n,求计算M1M2…Mn所需的最少数量乘法次数。
记Mi,j=MiMi+1…Mj,i<=j。
设C[i,j],1<=i<=j<=n,表示计算Mi,j的所需的最少数量乘法次数,则
算法MATCHAIN
输入:
矩阵链长度n,n个矩阵的阶r[1..n+1],其中r[1..n]为n个矩阵的行数,r[n+1]为第n个矩阵的列数。
输出:
n个矩阵链乘所需的数量乘法的最少次数。
fori=1tonC[i,i]=
(1)
ford=1ton-1
fori=1ton-d
j=
(2)
C[i,j]=∞
fork=i+1toj
x=(3)
ifx(4)=x
endif
endfor
endfor
endfor
return(5)
endMATCHAIN
(1)0
(2)i+d(3)C[i,k-1]+C[k,j]+r[i]*r[k]*r[j+1]
(4)C[i,j](5)C[1,n]
3.下面是用回溯法解n皇后问题的算法(求出所有解)。
n皇后问题:
在nxn棋盘上放置n个皇后使得任何两个皇后不能互相攻击。
(如果两个皇后处在同一行,或同一列,或同一斜线上,则她们能互相攻击。
)
算法NQUEENS
输入:
正整数n。
输出:
n皇后问题的所有解x[1..