《算法分析与设计》期末考试复习题纲完整版doc.docx
- 文档编号:27575469
- 上传时间:2023-07-03
- 格式:DOCX
- 页数:85
- 大小:655.11KB
《算法分析与设计》期末考试复习题纲完整版doc.docx
《《算法分析与设计》期末考试复习题纲完整版doc.docx》由会员分享,可在线阅读,更多相关《《算法分析与设计》期末考试复习题纲完整版doc.docx(85页珍藏版)》请在冰豆网上搜索。
《算法分析与设计》期末考试复习题纲完整版doc
WORD格式
《算法分析与设计》期末复习题
一、选择题
1.
算法必须具备输入、输出和(
D
)等4个特性。
A.可行性和安全
B
性
.确定性和易读性
C.有穷性和安全
D
性
.有穷性和确定性
2.
算法分析中,记号
O表示(
B
),记号Ω表示(A
)
A.渐进下界
B.
渐进上界
C.非紧上界
D.
紧渐进界
3.假设某算法在输入规模为n时的计算时间为T(n)=3*2^n。
在某台计算机上实现并
完成概算法的时间为t秒。
现有另一台计算机,其运行速度为第一台
64倍,那
的
么在这台新机器上用同一算法在
t秒内能解输入规模为多大的问题?
(B
)解
题方法:
3*2^n*64=3*2^x
.
n+8
B
.
n+6
A
D
.
.
n+7
n+5
C
4.
设问题规模为
N时,某递归算法的时间复杂度记为
T(N),已知
T
(1)=1,
T(N)=2T(N/2)+N/2,用O表示的时间复杂度为(
C
)。
.
O(logN)
B
.
O(N)
A
C.O(NlogN)
D
.O(N2logN)
5.
直接或间接调用自身的算法称为
B
(
)。
A.贪心算法
B
.递归算法
.迭代算法
D
.回溯法
C
6.
Fibonacci数列中,第4个和第11个数分别是(
D
)。
A.5,89
B
.3,89
C.5,144
D
.3,144
7.
在有8个顶点的凸多边形的三角剖分中,恰有(
B
)。
.
条弦和
7
个三角形
B
.
5
条弦和
6
个三角形
A
6
C.6条弦和
6个三角形
D
.5条弦和
5个三角形
8.
一个问题可用动态规划算法或贪心算法求解的关键特征是问题
B)。
的(
A.重叠子问题
B
.最优子结构性质
.贪心选择性质
D
.定义最优解
C
9.
下列哪个问题不用贪心法求解
C
(
)。
.哈夫曼编码问题
B
.单源最短路径问
题
A
.最大团问题
D
.最小生成树问题
C
10.
下列算法中通常以自底向上的方式求解最优解的是(
B)。
A.备忘录法
B
.动态规划法
C.贪心法
D
.回溯法
11.下列算法中不能解决0/1背包问题的是(A)。
A.贪心法B.动态规划
C.回溯法D.分支限界法
专业资料整理
WORD格式
12.下列哪个问题可以用贪心算法求解(D)。
1
专业资料整理
WORD格式
A.LCS问题
B
.批处理作业问题
C.0-1背包问题
D
.哈夫曼编码问题
13.
用回溯法求解最优装载问题时,若待选物品
m种,则该问题的解空间树的结
为
点
个数为(
)。
A.m!
B.2m+1
C.2m+1-1
D.2m
14.
二分搜索算法是利用(
A)实现的算法。
.分治策略
B
.动态规划法
A
C.贪心法
D
.回溯法
15.
下列不是动态规划算法基本步骤的是(
B
)。
P44
A.找出最优解的性质
B
.构造最优解
C.算出最优解(应该是最优值)
D.定义最优解
16.
下面问题(B
)不能使用贪心法解
决。
A.单源最短路径问题
B
.N皇后问题
C.最小花费生成树问题
D
.背包问题
17.使用二分搜索算法在n个有序元素表中搜索一个特定元素,在最好情况和最坏情况
下搜索的时间复杂性分别为(
A
)。
P17
A.O
(1),O(logn)
B
.O(n),O(logn)
C.O
(1),O(nlogn)
D
.O(n),O(nlogn)
18.
优先队列式分支限界法选取扩展结点的原则
C
)。
P162
是(
A.先进先出
B
.后进先
出
C.结点的优先级
D
.随机
19.
下面不是分支界限法搜索方式的是(
D
)。
P161
.广度优先
B
.最小耗费优先
A
.深度优
C.最大效益优先
D
先
20.
分支限界法解最大团问题时,活结点表的组织形式是(
B)。
.最小堆
B
.最大堆
A
C.栈
D
.数组
21.
下列关于计算机算法的描述不正确的是
)。
(
CP1
A.算法是指解决问题的一种方法或一个过程
B.算法是若干指令的有穷序列
C.算法必须要有输入和输出
D.算法是编程的思想
22.
下列关于凸多边形最优三角剖分问题描述不正确的
A)。
是(
A.n+1个矩阵连乘的完全加括号和
n个点的凸多边形的三角剖分对
应
B.在有n个顶点的凸多边形的三角剖分中,恰
n-3条弦
有
C.该问题可以用动态规划法来求解
D.在有n个顶点的凸多边形的三角剖分中,恰
n-2个三角形
有
23.
动态规划法求解问题的基本步骤不包括(
C
)。
P44
A.递归地定义最优值
B.分析最优解的性质,并刻画其结构特征
C.根据计算最优值时得到的信息,构造最优解(可以省去的)
D.以自底向上的方式计算出最优值
专业资料整理
WORD格式
24.分治法所能解决的问题应具有的关键特征是(C)。
P16
2
专业资料整理
WORD格式
A.该问题的规模缩小到一定的程度就可以容易地解决
B.该问题可以分解为若干个规模较小的相同问题
C.利用该问题分解出的子问题的解可以合并为该问题的解
D.该问题所分解出的各个子问题是相互独立的
下列关于回溯法的描述不正确的是
25.(D)。
P114
A.回溯法也称为试探法
B.回溯法有“通用解题法”之称
C.回溯法是一种能避免不必要搜索的穷举式搜索法
D.用回溯法对解空间作深度优先搜索时只能用递归方法实现
26.常见的两种分支限界法为(D
)。
P161
A.广度优先分支限界法与深度优先分支限界法;
B.队列式(FIFO)分支限界法与堆栈式分支限界法;
C.排列树法与子集树法;
D.队列式(FIFO)分支限界法与优先队列式分支限界法;
二、填空题
f(n)=3
n2)
1.
n
2+10的渐近性态f(n)=O(
,
g(n)=10log3n的渐近性态g(n)=O(
n
)。
2.
一个“好”的算法应具有正确性、
可读性
、
健壮性
和高效率和
低存储量需求等特性。
3.
算法的时间复杂性函数表示
C=F(N,I,A)
为
,分析算法复杂性的目的在于比较
求解同意问题的两个不同算法的效
率
的效率。
4.
构成递归式的两个基本要素
是
递归的边界条件
和递归的定义
。
5.
单源最短路径问题可用
分支限界法和
贪心算法
求解。
6.
用分治法实现快速排序算法时,最好情况下的时间复杂性为
O(nlogn)
,最坏情况下
的时间复杂性为O(n^2)
,该算法所需的时间与
运行时间
和
划分
两方面因素有关。
P26
7.
0-1背包问题的解空间树为
完全二叉树;n后问题的解空间树为
排列树;
8.
常见的分支限界法有队列式
FIFO)分支限界法和优先队列式分支限界
(
法。
9.
回溯法搜索解空间树时常用的两种剪枝函
数为
约束函数
和剪枝函数。
10.
分支限界法解最大团问题时,活结点表的组织形式
是
最大堆
;分支限界法
解单源最短路径问题时,活结点表的组织形式是
最小堆。
三、算法填空题
1.递归求解Hanoi塔问题/阶乘问题。
例1:
阶乘函数n!
P12
阶乘的非递归方式定义:
n!
n
(n
1)
(n2)
21
试写出阶乖的递归式及算法。
递归式为:
1
n0
边界条件
n!
n(n
1)!
n
0
专业资料整理
WORD格式
3
专业资料整理
WORD格式
递归方程
递归算法:
intfactorial(intn)
{if(n==0)return1;递归出口
returnn*factorial(n-1);递归调用
}
例2:
用递归技术求解Hanoi塔问题,Hanoi塔的递归算法。
P15
其中Hanoi(intn,inta,intc,intb)表示将塔座A上的n个盘子移至塔座C,以塔座B为辅助。
Move(a,c)表示将塔座a上编号为n的圆盘移至塔座c上。
voidhanoi(intn,inta,intc,intb)
{
if(n>0)
{
hanoi(n-1,a,b,c);
move(a,c);
hanoi(n-1,b,c,a);
}
}
2.用分治法求解快速排序问题。
快速排序算法P25、作业、课件第2章
(2)42页-50页
template
voidQuickSort(Typea[],intp,intr)
{
if(p intq=Partition(a,p,r); QuickSort(a,p,q-1); QuickSort(a,q+1,r); } } 专业资料整理 WORD格式 4 专业资料整理 WORD格式 Partition函数的具体实现 template intPartition(Typea[],intp,intr) { inti=p,j=r+1; Typex=a[p]; //将 //将>x的元素交换到右边区域 while(true){ while(a[++i] while(a[--j]>x); if(i>=j)break; Swap(a[i],a[j]); } a[p]=a[j]; a[j]=x; returnj; } 3.用贪心算法求解最优装载问题。 最优装载问题P95课件第4章 (2)第3-8页 template voidLoading(intx[],Typew[],Typec,intn) { int*t=newint[n+1]; Sort(w,t,n); for(inti=1;i<=n;i++)x[i]=0; for(intj=1;j<=n&&w[t[j]]<=c;j++) {x[t[i]]=1;c-=w[t[j]];} 专业资料整理 WORD格式 } 5 专业资料整理 WORD格式 4.用回溯法求解0-1背包/批处理作业调度/最大团问题,要会画解空间树。 例1: 用回溯法求解0-1背包P133课件第5章 (2)第24-38页 template classKnap { private: TypepBound(inti);//计算上界 voidBacktrack(inti); Typewc;//背包容量 intn;//物品数 Typew*w;//物品重量数组 Typep*p;//物品价值数组 Typewcw;//当前重量 Typepcp;//当前价值 Typepbestp;//当前最优价值 }; voidKnap : Backtrack(inti) {if(i>n){bestp=cp;return;} if(cw+w[i]<=c)//进入左子树 {cw+=w[i]; cp+=p[i]; Backtrack(i+1); cw-=w[i]; cp-=p[i];} if(Bound(i+1)>bestp)//进入右子树 Backtrack(i+1); } TypepKnap : Bound(inti) { Typewcleft=c-cw;//剩余的背包容量 Typepb=cp;//b为当前价值 //依次装入单位重量价值高的整个物品 专业资料整理 WORD格式 6 专业资料整理 WORD格式 while(i<=n&&w[i]<=cleft) {cleft-=w[i];b+=p[i];i++;} if(i<=n)//装入物品的一部分 b+=p[i]*cleft/w[i]; returnb;//返回上界 } classObject//物品类 { friendintKnapsack(int*,int*,int,int); public: intoperator<(Objecta)const { return(d>=a.d); } intID;//物品编号 floatd;//单位重量价值 }; TypepKnapsack(Typepp[],Typeww[],Typewc,intn) {//为TypepKnapsack初始化 TypewW=0;//总重量 TypepP=0;//总价值 Object*Q=newObject[n];//创建物品数组,下标从0开始 for(inti=1;i<=n;i++)//初始物品数组数据 {Q[i-1].ID=i; Q[i-1].d=1.0*p[i]/w[i]; P+=p[i];W+=w[i]; } if(W<=c)//能装入所有物品 returnP; if(W<=c)//能装入所有物品 returnP; QuickSort(Q,0,n-1);//依物品单位重量价值非增排序 专业资料整理 WORD格式 7 专业资料整理 WORD格式 Knap K.p=newTypep[n+1]; K.w=newTypew[n+1]; for(inti=1;i<=n;i++) {K.p[i]=p[Q[i-1].ID];K.w[i]=w[Q[i-1].ID];} K.cp=0;K.cw=0;K.c=c; K.n=n;K.bestp=0;K.Backtrack (1); delete[]Q;delete[]K.w; delete[]K.p;returnK.bestp; } 例2: 批处理作业调度课件第5章 (2)P2-5问题描述,课本P125-127 解空间: 排列树 算法描述: classFlowshop { staticint[][]m,//各作业所需的处理时间 []x,//当前作业调度 []bestx,//当前最优作业调度 []f2,//机器2完成处理时间 f1,//机器1完成处理时间 f,//完成时间和 bestf,//当前最优的完成时间和 n;//作业数 staticvoidBacktrack(inti) { if(i>n) {for(intj=1;j<=n;j++)bestx[j]=x[j];bestf=f;} else for(intj=i;j<=n;j++){ f1+=m[x[j]][1];//第j个作业在第一台机器上所需时间 f2[i]=((f2[i-1]>f1)? f2[i-1]: f1)+m[x[j]][2]; f+=f2[i]; if(f {Swap(x[i],x[j]);Backtrack(i+1);Swap(x[i],x[j]);} f1-=m[x[j]][1]; f-=f2[i]; } } 专业资料整理 WORD格式 8 专业资料整理 WORD格式 例3: 最大团问题,要会画解空间树。 classClique { friendintMaxClique(int**,int[],int); public: voidPrint();//输出最优解 private: voidBacktrack(inti); int**a;//图G的邻接矩阵,下标从1开始 intn;//图G的顶点数 int*x;//当前解 int*bestx;//当前最优解 intcn;//当前团的顶点数 intbestn;//当前最大团的顶点数 }; voidClique: : Backtrack(inti) {if(i>n) {for(intj=1;j<=n;j++)bestx[j]=x[j];bestn=c n;return;}//判断第i个顶点是否与已选顶点都有 边相连 intOK=1; for(intj=1;j i-1],已入选的顶点集 if(x[j]&&a[i][j]==0)//i与当前团中的顶点无边相连 {OK=0;break;}//只要与当前团中一个顶点无边相连,则中止 if(OK)//进入左子树 专业资料整理 WORD格式 9 专业资料整理 WORD格式 {x[i]=1;cn++;Backtrack(i+1);x[i]=0;cn--;} if(cn+n-i>bestn)//如有可能在右子树中找到更大的团,则进入右子树 {x[i]=0;Backtrack(i+1);} } 计算时间: O(n2n) 四、 简答题 1. 请简述使用动态规划算法解题的基本步骤。 P44 动态规划的设计分为以下 4个步骤: (1)找出最优解的性质,并刻划其结构特征。 (2)递归地定义最优值。 (3)以自底向上的方式计算出最优值。 (4)根据计算最优值时得到的信息,构造最优解。 2.简述动态规划方法与分治法的异同。 P44 相同点: 动态规划算法与分治法类似,其基本思想也是将待求解问题分解成若干个子问题, 然后从这些子问题的解得到原问题的解。 不同点: 分治法的子问题互相独立且与原问题相同。 与分治法不同的是,适合于动态规划 求解的问题,经分解得到的子问题往往不是互相独立的。 也就是各个子问题包含公共的子 子问题。 3.试比较Prim算法与Kruskal算法的异同。 105-P107 相同点: Prim(普里姆)算法和Kruskal(克鲁斯卡尔)算法都可以看作是应用贪心算法构造最小生成树的例子。 利用了最小生成树性质。 不同点: 10 专业资料整理 WORD格式 Prim(普里姆)算法: 在这个过程中选取到的所有边恰好构成G的一棵最小生成树T,T中包 含G的n-1条边,且不形成回路。 Kruskal(克鲁斯卡尔)算法: 是构造最小
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 算法分析与设计 算法 分析 设计 期末考试 复习题 完整版 doc
![提示](https://static.bdocx.com/images/bang_tan.gif)