计算机算法设计与分析期末考试复习题剖析Word文档格式.docx
《计算机算法设计与分析期末考试复习题剖析Word文档格式.docx》由会员分享,可在线阅读,更多相关《计算机算法设计与分析期末考试复习题剖析Word文档格式.docx(16页珍藏版)》请在冰豆网上搜索。
12.下列算法中通常以深度优先方式系统搜索问题解的是(
A、备忘录法B、动态规划法C、贪心法D、回溯法
13.备忘录方法是那种算法的变形。
(B)
A、分治法B、动态规划法C、贪心法D、回溯法
14.哈弗曼编码的贪心算法所需的计算时间为(
A、O(n2n)B、O(nlogn)C、O(2n)D、O(n)
15.分支限界法解最大团问题时,活结点表的组织形式是(
A、最小堆B、最大堆C、栈D、数组
16.最长公共子序列算法利用的算法是(
A、分支界限法B、动态规划法C、贪心法D、回溯法
17.实现棋盘覆盖算法利用的算法是(
A、分治法B、动态规划法C、贪心法D、回溯法
18.下面是贪心算法的基本要素的是(
C
A、重叠子问题B、构造最优解C、贪心选择性质D、定义最优解
19.回溯法的效率不依赖于下列哪些因素(D)
A.满足显约束的值的个数B.计算约束函数的时间
C.计算限界函数的时间D.确定解空间的时间
20.下面哪种函数是回溯法中为避免无效搜索采取的策略(
)
A.递归函数B.剪枝函数C。
随机数函数D.搜索函数
21、下面关于NP问题说法正确的是(B)
ANP问题都是不可能解决的问题BP类问题包含在NP类问题中
CNP完全问题是P类问题的子集DNP类问题包含在P类问题中
22、蒙特卡罗算法是(
)的一种。
A、分支界限算法
B、概率算法
C、贪心算法
D、回溯算法
23.下列哪一种算法不是随机化算法(
A.蒙特卡罗算法B.拉斯维加斯算法C.动态规划算法D.舍伍德算法
24.(
)是贪心算法与动态规划算法的共同点。
A、重叠子问题B、构造最优解C、贪心选择性质D、最优子结构性质
25.矩阵连乘问题的算法可由(
B)设计实现。
B、动态规划算法
26.分支限界法解旅行售货员问题时,活结点表的组织形式是(
A、最小堆B、最大堆C、栈D、数组
27、Strassen矩阵乘法是利用(
29、使用分治法求解不需要满足的条件是(A)。
A子问题必须是一样的B子问题不能够重复C子问题的解可以合并D原问题和子问题使用相同的方法解
30、下面问题(B)不能使用贪心法解决。
A单源最短路径问题BN皇后问题C最小花费生成树问题D背包问题
31、下列算法中不能解决0/1背包问题的是(A)
A贪心法B动态规划C回溯法D分支限界法
32、回溯法搜索状态空间树是按照(C)的顺序。
A中序遍历B广度优先遍历C深度优先遍历D层次优先遍历
33、下列随机算法中运行时有时候成功有时候失败的是(C)
34.实现合并排序利用的算法是(
35.下列是动态规划算法基本要素的是(
A、定义最优解B、构造最优解C、算出最优解D、子问题重叠性质
36.下列算法中通常以自底向下的方式求解最优解的是(
A、分治法B、动态规划法C、贪心法D、回溯法
37.采用广度优先策略搜索的算法是(
A、分支界限法B、动态规划法C、贪心法D、回溯法
38、合并排序算法是利用(
39、在下列算法中得到的解未必正确的是(
40、背包问题的贪心算法所需的计算时间为(
A、O(n2n)
B、O(nlogn)
C、O(2n)
D、O(n)
41.实现大整数的乘法是利用的算法(
A、贪心法B、动态规划法C、分治策略D、回溯法
42.0-1背包问题的回溯算法所需的计算时间为(
A、O(n2n)B、O(nlogn)C、O(2n)D、O(n)
43.采用最大效益优先搜索方式的算法是(
44.贪心算法与动态规划算法的主要区别是(
A、最优子结构B、贪心选择性质C、构造最优解D、定义最优解
45.实现最大子段和利用的算法是(
46.优先队列式分支限界法选取扩展结点的原则是(
A、先进先出B、后进先出C、结点的优先级D、随机
47.背包问题的贪心算法所需的计算时间为(
A、O(n2n)B、O(nlogn)C、O(2n)D、O(n)
48、广度优先是(
49、舍伍德算法是(
50、在下列算法中有时找不到问题解的是(
51下列哪一种算法是随机化算法(
A.贪心算法B.回溯法C.动态规划算法D.舍伍德算法
52.一个问题可用动态规划算法或贪心算法求解的关键特征是问题的(
A、重叠子问题B、最优子结构性质C、贪心选择性质D、定义最优解
53.采用贪心算法的最优装载问题的主要计算量在于将集装箱依其重量从小到大排序,故算法的时间复杂度为(B)。
54.以深度优先方式系统搜索问题解的算法称为(D)。
55.实现最长公共子序列利用的算法是(
二、填空题
1.算法的复杂性有时间复杂性和空间复杂性之分。
2、程序是算法
用某种程序设计语言的具体实现。
3、算法的“确定性”指的是组成算法的每条指令是清晰的,无歧义的。
4.矩阵连乘问题的算法可由动态规划设计实现。
5、拉斯维加斯算法找到的解一定是正确解。
6、算法是指解决问题的一种方法或一个过程。
7、从分治法的一般设计模式可以看出,用它设计出的程序一般是递归算法。
8、问题的最优子结构性质是该问题可用动态规划算法或贪心算法求解的关键特征。
9、以深度优先方式系统搜索问题解的算法称为回溯法。
10、数值概率算法常用于数值问题的求解。
11、计算一个算法时间复杂度通常可以计算循环次数、基本操作的频率或计算步。
12、利用概率的性质计算近似值的随机算法是数值概率算法,运行时以一定的概率得到正确解的随机算法是__蒙特卡罗算法_____________________。
14、解决0/1背包问题可以使用动态规划、回溯法和分支限界法,其中不需要排序的是动态规划,需要排序的是回溯法,分支限界法。
15、使用回溯法进行状态空间树裁剪分支时一般有两个标准:
约束条件和目标函数的界,N皇后问题和0/1背包问题正好是两种不同的类型,其中同时使用约束条件和目标函数的界进行裁剪的是0/1背包问题,只使用约束条件进行裁剪的是N皇后问题。
17、矩阵连乘问题的算法可由动态规划设计实现。
18、拉斯维加斯算法找到的解一定是正确解。
19.贪心算法的基本要素是贪心选择质和最优子结构性质。
21.动态规划算法的基本思想是将待求解问题分解成若干子问题,先求解子问题,然后从这些子问题的解得到原问题的解。
算法是由若干条指令组成的有穷序列,且要满足输入,输出、确定性和有限性四条性质。
23、大整数乘积算法是用分治法来设计的。
24、以广度优先或以最小耗费方式搜索问题解的算法称为分支限界法。
25、舍伍德算法总能求得问题的一个解。
贪心选择性质是贪心算法可行的第一个基本要素,也是贪心算法与动态规划算法主要区别。
27.快速排序算法是基于分治策略的一种排序算法。
28.动态规划算法的两个基本要素是.最优子结构性质和重叠子问题性质。
30.回溯法是一种既带有系统性又带有跳跃性的搜索算法。
31.分支限界法主要有队列式(FIFO)分支限界法和优先队列式分支限界法。
32.分支限界法是一种既带有系统性又带有跳跃性的搜索算法。
33.回溯法搜索解空间树时,常用的两种剪枝函数为约束函数和限界函数。
34.任何可用计算机求解的问题所需的时间都与其规模有关。
35.快速排序算法的性能取决于划分的对称性。
1.背包问题的贪心算法2.最大子段和:
动态规划算法3.贪心算法求装载问题
4.贪心算法求活动安排问题5.快速排序6.排列问题
1分治法的基本思想时将一个规模为n的问题分解为k个规模较小的子问题,这些子问题互相独立且与原问题相同。
递归地解这些子问题,然后将各个子问题的解合并得到原问题的解。
2设计动态规划算法的主要步骤为:
(1)找出最优解的性质,并刻划其结构特征
(2)递归地定义最优值(3)以自底向上的方式计算出最优值(4)根据计算最优值时得到的信息,构造最优解。
3.分治法与动态规划法的相同点是:
将待求解的问题分解成若干个子问题,先求解子问题,然后从这些子问题的解得到原问题的解。
两者的不同点是:
适合于用动态规划法求解的问题,经分解得到的子问题往往不是互相独立的。
而用分治法求解的问题,经分解得到的子问题往往是互相独立的。
4.分支限界法与回溯法的相同点是:
都是一种在问题的解空间树T中搜索问题解的算法。
不同点:
(1)求解目标不同;
(2)搜索方式不同;
(3)对扩展结点的扩展方式不同;
(4)存储空间的要求不同。
5用回溯法搜索子集树的算法为:
6.分治法所能解决的问题一般具有的几个特征是:
(1)该问题的规模缩小到一定的程度就可以容易地解决;
(2)该问题可以分解为若干个规模较小的相同问题,即该问题具有最优子结构性质;
(3)利用该问题分解出的子问题的解可以合并为该问题的解;
(4)原问题所分解出的各个子问题是相互独立的,即子问题之间不包含公共的子问题。
7.用分支限界法设计算法的步骤是:
(1)针对所给问题,定义问题的解空间(对解进行编码);
分
(2)确定易于搜索的解空间结构(按树或图组织解);
(3)以广度优先或以最小耗费(最大收益)优先的方式搜索解空间,并在搜索过程中用剪枝函数避免无效搜索。
8.常见的两种分支限界法的算法框架
(1)队列式(FIFO)分支限界法:
按照队列先进先出(FIFO)原则选取下一个节点为扩展节点。
(2)优先队列式分支限界法:
按照优先队列中规定的优先级选取优先级最高的节点成为当前扩展节点。
9.回溯法中常见的两类典型的解空间树是子集树和排列树。
当所给的问题是从n个元素的集合S中找出满足某种性质的子集时,相应的解空间树称为子集树。
这类子集树通常有2n个叶结点,遍历子集树需O(2n)计算时间。
当所给的问题是确定n个元素满足某种性质的排列时,相应的解空间树称为排列树。
这类排列树通常有n!
个叶结点。
遍历排列树需要O(n!
)计算时间。
10.分支限界法的搜索策略是:
在扩展结点处,先生成其所有的儿子结点(分支),然后再从当前的活结点表中选择下一个扩展结点。
为了有效地选择下一扩展结点,加速搜索的进程,在每一个活结点处,计算一个函数值(限界),并根据函数值,从当前活结点表中选择一个最有利的结点作为扩展结点,使搜索朝着解空间上有最优解的分支推进,以便尽快地找出一个最优解。
五)掌握分治算法实例:
二分查找、合并排序、冒泡排序、矩阵乘法
1、二分查找:
例4二分搜索问题
给定排好序的线性表a[0:
n-1]
二分搜索递归算法
Binarysearch(a,n1,n2,x)
{if(n1>
n2)return(-1);
m=(n1+n2)/2;
if(x=a[m])return(m);
elseif(x<
a[m])Binarysearch(a,n1,m-1,x);
elseBinarysearch(a,m+1,n2,x);
}
复杂度O(logn)
2、合并排序:
例6合并排序问题
设线性表a[1:
n],将其按从小到大排序。
基本思路:
1将a[1:
n]分为a[1:
n/2]和a[n/2+1:
n]两个表
2各自单独排序,
3再将排好序的两个表合并为一个表
合并排序算法
Mergesort(a,left,right)
{if(left<
right)
{i=(left+right)/2;
Mergesort(a,left,i);
Mergesort(a,i+1,right);
Merge(a,b,left,i,right);
copy(a,b,left,right);
}
合并排序算法中合并算法
Merge(a,b,left,I,right)
{k=left;
k1=left;
k2=i+1;
while(k1<
=Iandk2<
=right)
{if(a[k1]<
a[k2])
{b[k]=a[k1];
k1++;
k++;
else{b[k]=a[k2];
k2++;
if(k1=i)
for(l=k2;
l<
=right;
l++){b[k]=a[l];
}
else
for(l=k1;
=i;
合并排序算法分析
Merge()函数最多3n次赋值,3n次比较
O
(1)n=1
T(n)=
2T(n/2)+6nn>
1
解方程得:
T(n)=n+6nlog2n=O(nlog2n)
3、矩阵乘法:
C11=A11B11+A12B21C12=A11B12+A12B22
C21=A21B11+A22B21C22=A21B12+A22B22
成为8个n/2阶矩阵乘积,4个n/2阶矩阵加法。
如果以数的乘法作为基本运算,则可得到分块矩阵乘法的递归方程
8(O
(1))n=2
T(n)=
8T(n/2)n>
2
代入递归方程得T(n)=n3
20世纪60年代末期。
Strassen给出了以下算法:
M1=A11(B12-B22)
M2=(A11+A12)B22
M3=(A21+A22)B11
M4=A22(B21-B11)
M5=(A11+A22)(B11+B22)
M6=(A12-A22)(B21+B22)
M7=(A11-A21)(B11+B12)
C11=M5+M4-M2+M6
C12=M1+M2
C12=M3+M4
C11=M5+M1-M3–M7
使用了7个n/2阶矩阵乘积,18个n/2阶矩阵加法,其算法复杂度为O(n2.81)
2.81=log27
算法
procedureSTRASSEN(n,A,B,C);
begin
ifn=2thenMATRIX-MULTIPLY(A,B,C)
elsebegin
将矩阵A和B依
(1)式分块;
STRASSEN(n/2,A11,B12-B22,M1);
STRASSEN(n/2,A11+A12,B22,M2);
STRASSEN(n/2,A21+A22,B11,M3);
STRASSEN(n/2,A22,B21-B11,M4);
STRASSEN(n/2,A11+A22,B11+B22,M5);
STRASSEN(n/2,A12-A22,B21+B22,M6);
STRASSEN(n/2,A11-A21,B11+B12,M7);
;
end;
3、快速排序:
例7快速排序
对输入的数组a[p:
r]按以下三个步骤进行:
(1)分解(Divide),以a[p]为基准元素将a[p:
r]划分为三部分:
a[p:
q-1],a[q],a[q+1:
r],使得a[p:
q-1]中的元素小于a[q],a[q+1:
r]中的元素大于a[q].
(2)递归求解(Conquer),通过递归调用快速排序算法分别对a[p:
q-1],a[q+1:
r]排序。
(3)合并(merge),由于已排好序,合并不需作什么.
快速排序递归算法:
Quicksort(a,p,r)
{if(p<
r)
{q=partition(a,p,r);
Quicksort(a,p,q-1);
快速排序算法分析
Partition(a,p,r)计算时间为O(r-p+1),即f(n)=n
最好情况,每次q=(p+r)/2
T(n)=2T(n/2)+nn>
T(n)=n+nlog2n=O(nlog2n)
最坏情况,每次q=p或q=r
T(n)=T(n-1)+nn>
T(n)=O(n2)
第三章
(六)、掌握贪心策略基本思想及基本性质,并能证明贪心选择性质
1、贪心策略基本思想:
和动态规划类似,贪心法用于多阶段的决策过程,每个阶段都有可供选择的多种决策,各个阶段的决策构成一个决策序列.贪心法的目标是选取一个最优的决策序列.
2、基本性质:
贪心法选择决策的原则是局部最优,而不是全局最优。
如果一个问题的整体最优解可以通过一系列局部最优选择来实现,称该问题具有贪心选择性质.贪心选择性质是贪心法可行的一个基本要素.它是保证贪心法的求解结果为最优解的条件.
最优子结构性质
3、证明:
(七)、掌握贪心策略实例:
最小生成树、背包问题、作业调度问题
1、背包问题:
给定n个重量为(w1,w2,…,wn),价值为(v1,v2,…vn)的物品和一个容量为C的背包,要求选择部分物品装进背包,使得背包内物品价值总和最大.
1)问题的解(x1,x2,…xn)0≤xi≤1
2)约束条件∑xiwi≤C
3)目标函数∑xivi达到最大
解题思路:
1)尽可能多选择价值大的物品.
2)尽可能多选择重量轻的物品.
3)尽可能多选择价值/重量比大的物品.
贪心法的一般过程
1)根据题意选取一种度量标准或贪心策略.
2)按度量标准对n个输入排序.
3)按序做出贪心选择.
4)检查该选择是否与前面的选择构成可行解.
5)如果可行,则将该选择加入解中,否则不加入.
6)继续做下一步选择.
Greedy-knapsack()
{将物品按v/w从大到小排序
for(i=1;
i<
=n;
i++)x[i]=0;
i++)
if(w[i]<
c)
{x[i]=1;
c=c-w[i]}
else{x[i]=cu/w[i];
break;
outputx[1]…x[n]
第四章
(八)掌握动态规划的基本思想及解题步骤
1、动态规划的基本思想:
动态规划是和过程最优化概念紧密联系的.在过程进行中,在客观条件允许范围内选择最好的措施控制过程的发展,以期最好的完成任务.动态规划用于多阶段的决策过程,每个阶段都有可供选择的多种决策,各个阶段的决策构成一个决策序列.动态规划的目标是选取一个最优的决策序列
2、解题步骤:
动态规划法设计步骤
①找出最优解的性质,并刻画其结构(最优子结构)特征.
②递归地定义最优值,导出递推公式.
③以自底向上的方式计算最优值.
④根据计算最优值时得到的信息,构造最优解.
形式:
如:
1)问题的解:
边的序列,每一步决策选择一条边
{<
AC>
<
CF>
FI>
IJ>
<
JL>
2)约束条件:
两个顶点之间有边存在
3)可行解:
满足约束条件的解
4)目标函数:
解中边的权值和达到最小