算法复习题.docx
《算法复习题.docx》由会员分享,可在线阅读,更多相关《算法复习题.docx(15页珍藏版)》请在冰豆网上搜索。
![算法复习题.docx](https://file1.bdocx.com/fileroot1/2023-2/4/2b436d0b-4c49-438a-96e0-44e23d86dda9/2b436d0b-4c49-438a-96e0-44e23d86dda91.gif)
算法复习题
填空题
动态规划算法的基本要素为:
最优子结构性质与重叠子问题性质
1)
2)
3)
算法分析中,记号0表示渐进上界,记号表示渐进下界,记号表示紧渐进界。
回溯法在问题的解空间树中,按深度优先策略,从根结点出发搜索解空间树。
分支限界法在问题的解空间树中,按广度优先策略,从根结点出发搜索解空间树。
所谓贪心选择性质是指(所求问题的整体最优解可以通过一系列局部最优的选择,
即贪
心选择来达到)。
所谓最优子结构性质是指(问题的最优解包含了其子问题的最优解
回溯法是指(具有限界函数的深度优先生成法
回溯法的算法框架按照问题的解空间一般分为(子集树)算法框架与(排列树)算法框
架。
二分搜索算法是利用分治策略实现的算法。
衡量一个算法好坏的标准是时间复杂度低最长公共子序列算法利用的算法是动态规划法Strassen矩阵乘法是利用分治策略实现的算法回溯法搜索状态空间树是按照深度优先遍历的顺序。
算法中通常以自底向下的方式求解最优解的是动态规划法背包问题的贪心算法所需的计算时间为O(nlogn)
0-1背包问题的回溯算法所需的计算时间为O(n2n)
用动态规划算法解决最大字段和问题,其时间复杂性为n
一个算法就是一个有穷规则的集合,其中之规则规定了解决某一特殊类型问
题的一系列运算,此外,算法还应具有以下五个重要特性:
_有穷性,确定性,可行性,输入,输出。
1.算法的复杂性有时间
4)
5)
6)
7)
8)
9)
10)
11)
12)
13)
复杂性和空间
复杂性之分。
2、程序是算法
用某种程序设计语言的具体实现。
3、算法的“确定性”指的是组成算法的每条
指令是清晰的,无歧义的。
4.矩阵连乘问题的算法可由动态规划设计实现。
问题的最优子结构性质是该问题可用动态规划算法或贪心算法求解的关键特征。
10、数值概率算法常用于数值问题的求解。
15、使用回溯法进行状态空间树裁剪分支时一般有两个标准:
约束条件和目标函数的界,
皇后问题和0/1背包问题正好是两种不同的类型,其中同时使用约束条件和目标函数的界进
行裁剪的是0/1背包问题,只使用约束条件进行裁剪的是N皇后问题
16、
贪心选择性质是贪心算法可行的第一个基本要素,也是贪心算法与动态规划算法的主要区别。
26、
贪心选择性质是贪心算法可行的第一个基本要素,也是贪心算法与动态规划算法的
主要区别。
35.快速排序算法的性能取决于划分的对称性
mn,解空间
37.图的m着色问题可用回溯法求解,其解空间树中叶子结点个数是
树中每个内结点的孩子数是m
简答题
1.用计算机求解问题的步骤:
1、问题分析2、数学模型建立3、算法设计与选择4、算法指标5、算法分析
&算法实现7、程序调试8、结果整理文档编制
2.最优二叉搜索树问题的动态规划算法
voidbinarysearchtree(inta[],intb[],intn,int**m,int**s,int**w){
inti,j,k,t,l;
for(i=1;i<=n+1;i++)
{
w[i][i-1]=a[i-1];
m[i][i-1]=0;
}
算法定义:
for(l=0;l<=n-1;l++)
算法是指在解决问题时,按照某种机械步骤一定可以得到问题结果的处理过
3.算法的三要素
1、操作2、控制结构3、数据结构
4.算法具有以下5个属性:
有穷性:
一个算法必须总是在执行有穷步之后结束,且每一步都在有穷时间内完成。
确定性:
算法中每一条指令必须有确切的含义。
不存在二义性。
只有一个入口和一个出口
可行性:
一个算法是可行的就是算法描述的操作是可以通过已经实现的基本
运算执行有限次来实现的。
限界法
8.分治法的基本思想是:
将一个规模为n的问题分解为k个规模较小的子问题,这些子问题互相独立且与原问题相同。
递归地解这些子问题,然后将各个子问题的解合并得到原问题的解。
9.分治法所能解决的问题一般具有以下几个特征:
1)该问题的规模缩小到一定的程度就可以容易地解决;2)该问题可以分解为若干个规模较小的相同问题,即该问题具有
最优子结构性质;
3)利用该问题分解出的子问题的解可以合并为该问题的解;4)该问题所分解出的各个子问题是相互独立的,即子问题之间不
包含公共的子子问题。
10、分治法的基本步骤
分治法在每一层递归上都有三个步骤:
(1)分解:
将原问题分解为若干个规模较小,相互独立,与原问题
形式相同的子问题;
2)解决:
若子问题规模较小而容易被解决则直接解,否则递归地
解各个子问题;
3)合并:
将各个子问题的解合并为原问题的解。
11.动态规划的基本思想
动态规划的实质是分治思想和解决冗余,因此,动态规划是一种将问题实例分解为更小的、相似的子问题,并存储子问题的解而避免计算重复的子问题,解决最优化问题的算法策略。
13.分治法与动态规划法的相同点是:
将待求解的问题分解成若干个子问题,先求解子问题,然后从这些子问题的解得到原问题的解。
两者的不同点是:
适合于用动态规划法求解的问题,经分解得到的子问题往往不是互相独立的。
而用分治法求解的问题,经分解得到的子问题往往是互相独立的。
14.回溯法
回溯法也称为试探法,该方法首先暂时放弃关于问题规模大小的限
制,并将问题的候选解按某种顺序逐一枚举和检验。
当发现当前候选解不可能是解时,就选择下一个候选解;倘若当前候选解除了还不满足问题规模要求外,满足所有其他要求时,继续扩大当前候选解的规模,并继续试探。
如果当前候选解满足包括问题规模在内的所有要求时,该候选解就是问题的一个解。
在回溯法中,放弃当前候选解,寻找下一个候选解的过程称为回溯。
扩大当前候选解的规模,以继续试探的过程称为向前试探。
20.回溯法中常见的两类典型的解空间树是子集树和排列树。
当所给的问题是从n个元素的集合S中找出满足某种性质的子集时,相应
的解空间树称为子集树。
这类子集树通常有2n个叶结点,遍历子集树需0(2n)
计算时间。
当所给的问题是确定n个元素满足某种性质的排列时,相应的解空间树称
为排列树。
这类排列树通常有n!
个叶结点。
遍历排列树需要0(n!
)计算时间。
22.请叙述动态规划算法与贪心算法的异同。
共同点:
都需要最优子结构性质,都用来求有优化问题。
不同点:
动态规划:
每一步作一个选择一依赖于子问题的解。
贪心方法:
每一步作一个选择一不依赖于子问题的解。
动态规划方法的条件:
子问题的重叠性质。
可用贪心方法的条件:
最优子结构性质;贪心选择性质。
动态规划:
自底向上求解;
贪心方法:
自顶向下求解。
可用贪心法时,动态规划方法可能不适用;
可用动态规划方法时,贪心法可能不适用。
23.请说明动态规划方法为什么需要最优子结构性质。
答:
最优子结构性质是指大问题的最优解包含子问题的最优解。
动态规划方法是自底向上计算各个子问题的最优解,即先计算子问题的最优
解,然后再利用子问题的最优解构造大问题的最优解,因此需要最优子结构.
26.在算法复杂性分析中,OQ、©这三个记号的意义是什么在忽略常数因
子的情况
下,OQ、©分别提供了算法运行时间的什么界答:
如果存在两个正常数c和N0,对于所有的N》N),有|f(NIf(N)=qg(N))。
这时我们说f(N)的阶不高于g(N)的阶。
若存在两个正常数C和自然数NO,使得当N>N0时有|f(N)|>qg(N)I,记为f(N)=?
(g(N))。
这时我们说f(N)的阶不低于g(N)的阶。
如果存在正常数c1,c2和n0,对于所有的n》nO,有c1|g(N)|<|f(N)|<
c2|g(N)|
则记作f(N)=(g,(N)
OQ、©分别提供了算法运行时间的上界、下界、平均
1.用动态规划策略求解最长公共子序列问题:
给定两个序列X={B,C,D,A},Y={A,B,C,B},请采用动态规划策略求出
其最长公共子序列,要求给出过程。
答:
0
01\
012〒
0122丄
2.对下列各组函数f
最长公共子序列:
{BC}
(n)和g(n),确定f(n)=O(g(n))或f(n)=Q(g(n))
或f(n)=0(g(n))
,并简要说明理由。
(1)f(n)=2n
g(n)=n!
(2)f(n)=亦;
g(n)=logn
⑶f(n)=100;
3
⑷f(n)=n;
g(n)=log100
n
g(n)=3
⑸f(n)=3
g(n)=2
答:
(1)f(n)=O(g(n))
因为g(n)的阶比f(n)的阶高。
(2)f(n)=Q(g(n))
因为g(n)的阶比f(n)的阶低。
(4)f(n)=O(g(n))
因为g(n)的阶比f(n)的阶高。
因为g(n)的阶比f(n)的阶低。
用克鲁斯卡尔(Kruskal)算法求G的最小生成树T,
请写出在算法执行过程中,依次加入T的边集TE中的边。
说明该算法的贪心策
略和算法的基本思想,并简要分析算法的时间复杂度。
答:
TE={(3,4),(2,3),(1,5),
(4,6)(4,5)}
贪心策略是每次都在连接两个不同连通分量的边中选权值最小的边。
基本思想:
首先将图中所有顶点都放到生成树中,然后每次都在连接两个不
同连通分量的边中选权值最小的边,将其放入生成树中,直到生成树中有n-1
条边。
时间复杂度为:
O(eloge)
4.请用分治策略设计递归的归并排序算法,并分析其时间复杂性(要求:
分别
给出divide、conquer、combine这三个阶段所花的时间,并在此基础上列出递
归方程,最后用套用公式法求出其解的渐进阶)。
答:
TempiatevoidMergeSort(Typea[],intleft,intright)
{if(leftMerge(a,b,left,right);
Copy(a,b,left,right);
Divide
阶段的时间复杂性:
O
(1)
Conquer
阶段的时间复杂性:
2T(n)
Combine
阶段的时间复杂性:
©(n)
T(n)
0
(1)
2T(n/2)0(n)
当n1
当n1
用套用公式法:
a=2,b=2,n
loga
T(n)=©(niogn)
7.考虑在序列A[1..n]中找最大最小元素的问题。
一个分治算法描述如下:
如果n
<2就直接求解。
否则,将序列等分成两个子序列A[1..n/2]和A[n/2+1..n],分
别找出这两子序列的最大最小元素x1,y1和x2,y2;然后据此求出A[1..n]的最大
元素x=max{x1,x2}及最小元素y=min{y1,y2}。
请给出该算法计算时间T(n)满足的递归方程,并解方程来确定算法的时间复杂度。
假定n=2k(k为正整数)。
答:
算法时间复杂度满足如下递归方程:
T(n)=2T(n/2)+2(n>2);T
(2)=1o
因为n=2k(k为正整数),所以,
T(n)=T(2k)=2T(2k-1)+2=22T(2k-2)+22+2=2k-1T
(2)+2k-2+?
+23+22+2
=2k-1+?
+23+22+2o因此,T(n)=(n)。
8.考虑使用动态规划方法求解下列问题:
01背包数据如下表,求:
能够放入背包的最有价值的物品集合。
V
j=0
1
2
3
4
5
i=0
0
0
0
0
0
0
1
0
0
12
12
12
12
2
0
10
12
22
22
22
3
0
10
12
22
30
32
4
0
10
15
25
30
37
在最优子集中i不在最优子集中
自底向上:
按行或列填写下表。
V
j=0
1
2
3
4
5
i=0
0
0
0
0
0
0
1
0
2
0
3
0
4
0
答:
V(0,j)=0(0个物品),V(i,0)=0(承重量0)
(不超重)
9.请画出用回溯法解4皇后问题的解空间树和搜索空间树:
解空间树:
11,请画出用回溯法解n=3的0-1背包问题的解空间树和当三个物品的重量为{20,15,10},
价值为{20,30,25},背包容量为25时搜索空间树。
答:
解空间树: