中科大算法设计与分析分布式算法部分作业部分答案
1. 分析在同步和异步模型下汇集算法的复杂性。 分析在同步和异步模型下பைடு நூலகம்集算法的复杂性。
解:与广播算法分析时间复杂性的步骤一致,一两句的说明 与广播算法分析时间复杂性的步骤一致, 不是分析。 不是分析。 <1> 同步模型 引理:在汇集算法的每个容许执行里, 引理:在汇集算法的每个容许执行里,树中每个高为 t 轮里收到所有孩子的msg。 子树根结点在第 t 轮里收到所有孩子的msg。 归纳证明。。。 归纳证明。。。 定理:当生成树高为 d 时,存在一个时间复杂度为O(d)的 定理: 存在一个时间复杂度为O(d)的 同步汇集算法。 同步汇集算法。 <2> 异步模型 引理:在汇集算法的每个容许的执行里, 引理:在汇集算法的每个容许的执行里,树中每个高为 t 收到所有孩子的msg。 的子树根结点在时刻 t 收到所有孩子的msg。 归纳证明。。。 归纳证明。。。 定理: 存在一个时间复杂度为O(d)的 定理:当生成树高为 d 时,存在一个时间复杂度为O(d)的 异步汇集算法。 异步汇集算法。
6.
证明同步环上不存在匿名的、 证明同步环上不存在匿名的、一致性的 Leader选举算法 Leader选举算法。 选举算法。
解:由Lemma3.1可得。 解:由Lemma3.1可得。 假设R是大小为n>1的环(非均匀),A 假设R是大小为n>1的环(非均匀),A是其上的一 个匿名算法,它选中某处理器为leader。因为环是 个匿名算法,它选中某处理器为leader。因为环是 同步的且只有一种初始配置,故在R 同步的且只有一种初始配置,故在R上A只有唯一的 合法执行。 Lemma3.1: 在环R上算法A Lemma3.1: 在环R上算法A的容许执行里,对于每 轮k,所有处理器的状态在第k轮结束时是相同的。 ,所有处理器的状态在第k Note:每个处理器同时宣布自己是Leader! Note:每个处理器同时宣布自己是Leader!
3. 证明Alg2.3构造一颗以Pr为根的DFS树。 证明Alg2.3构造一颗以 为根的 构造一颗以Pr为根的DFS树
解:类似引理2.6的证明过程。先证连通,再证无环(反 解:类似引理2.6的证明过程。先证连通,再证无环(反 证),再证DFS树。依据是算法2.3与DFS的定义。 证),再证DFS树。依据是算法2.3与DFS的定义。 可以证明:在有子结点与兄弟结点未访问时,子结点总是先 加入树中。根据alg2.3 xxx步证明这一点。 加入树中。根据alg2.3 的xxx步证明这一点。
5. 修改Alg2.3,使其时间复杂度为O(n)。 修改Alg2.3,使其时间复杂度为O(n)。 解:两种考虑方式: <1> 在每个处理器中维护一本地变量,同时添加一 消息类型,在处理器Pi转发M时,发送消息N 消息类型,在处理器Pi转发M时,发送消息N通知 其余的未访问过的邻居,这样其邻居在转发M 其余的未访问过的邻居,这样其邻居在转发M时 便不会向Pi转发。 便不会向Pi转发。 <2> 在消息M和<parent>中维护一发送数组,记录 在消息M <parent>中维护一发送数组,记录 已经转发过M 已经转发过M的处理器名称。 两种方式都是避免向已转发过M 两种方式都是避免向已转发过M的处理器发送消息 M,这样DFS树外的边不再耗时,时间复杂度也降 ,这样DFS树外的边不再耗时,时间复杂度也降 为O(n)。 O(n)。
祝大家考试顺利
谢谢!
4. 证明Alg2.3时间复杂度为O(m)。 证明Alg2.3时间复杂度为 时间复杂度为O(m)。
解: <1>同步模型:每一轮中,根据算法,有且只有一个消息( <1>同步模型:每一轮中,根据算法,有且只有一个消息(M or Parent or Reject)在传输,从算法的第6、14、16、20、 Reject)在传输,从算法的第6 14、16、20、 25行发送消息的语句中可以发现:消息只发往一个处理器 25行发送消息的语句中可以发现:消息只发往一个处理器 结点,除根结点外,所有的处理器都是收到消息后才被激 活,所以,不存在多个处理器在同一轮发送消息的情况, 所以时间复杂度与消息复杂度一致。 <2> 异步模型:在一个时刻内至多有一个消息在传输,因 此,时间复杂度也与消息复杂度一致。消息复杂度:对任 一边,可能传输的消息最多有4个,即2 一边,可能传输的消息最多有4个,即2个M,2个相应M 个相应M 的消息(Parent Reject),所以消息复杂度为O(m)。 的消息(Parent or Reject),所以消息复杂度为O(m)。 综上,该算法的时间复杂度为O(m)。 综上,该算法的时间复杂度为O(m)。
Note:考虑时间复杂度,任一节点可以在O(d)时间 Note:考虑时间复杂度,任一节点可以在O(d)时间 内将询问包发送到网络上的其它节点,但却可能需 要O(N)的时间接收其它节点发来的响应包。 O(N)的时间接收其它节点发来的响应包。
附2:算法3.2(同步Leader选举算法) :算法3.2(同步Leader选举算法) 为何非唤醒msg要延迟2^i 为何非唤醒msg要延迟2^i -1轮? 如何修改算法3.2来改善时间复杂性? 如何修改算法3.2来改善时间复杂性? 解: <1> 降低消息复杂度(Id最小的节点被选举为 降低消息复杂度(Id最小的节点被选举为 Leader,Leader节点消息的转发速度最快)。 Leader,Leader节点消息的转发速度最快)。 <2> 方案1:添加Relay变量,保证消息在转发节点 方案1:添加Relay变量,保证消息在转发节点 不延迟,时间复杂度由O(n*2^i)降为O(N*2^i+n-N), 不延迟,时间复杂度由O(n*2^i)降为O(N*2^i+n-N), N为自发唤醒的节点数。 方案2:原算法延迟函数为f(id)=2^id,时间复杂度 方案2:原算法延迟函数为f(id)=2^id,时间复杂度 为O(n*2^i)。通过重新定义延迟函数来降低时 n*2^i)。通过重新定义延迟函数来降低时 间复杂度,如f(id)=c*id等。消息复杂度提高? 间复杂度,如f(id)=c*id等。消息复杂度提高? Note:思考方案2 Note:思考方案2中消息复杂度和时间复杂度的关 系!!!
例如:echo协议,即应答协议,主要用于调 例如:echo协议,即应答协议,主要用于调 试和检测中,是路由也是网络中最常用的数 据包,可以通过发送echo包知道当前的连接 据包,可以通过发送echo包知道当前的连接 节点有哪些些路径,并且通过往返时间能得 出路径长度。echo算法的实现,如果转发消 出路径长度。echo算法的实现,如果转发消 息同步进行,则对应1 time时间复杂性,为 息同步进行,则对应1-time时间复杂性,为 O(D);如果不同步转发消息,网络路径可 O(D);如果不同步转发消息,网络路径可 能呈链状结构,即对应时间复杂度O(N)。 能呈链状结构,即对应时间复杂度O(N)。
2. 证明在引理2.6中,一个处理器在图G中是从Pr 证明在引理2.6中 一个处理器在图G中是从Pr 可达的,当且仅当它的parent变量曾被赋过值 变量曾被赋过值。 可达的,当且仅当它的parent变量曾被赋过值。
解: 引理2.6:在异步模型的每个容许执行中,算法2.2构造一棵 引理2.6:在异步模型的每个容许执行中,算法2.2构造一棵 以pr为根的生成树。 pr为根的生成树。 两个方向证明题目:依据是算法2.2和题目条件(异步模型的 两个方向证明题目:依据是算法2.2和题目条件(异步模型的 每个容许执行中),不是空口讨论。方法不一,原则是有理 有据,逻辑清楚。 <1> => pr可达,(因为图G是由parent与children确定的静 pr可达,(因为图G是由parent与children确定的静 止图)收到m才会加入图中,所以可达结点收到过m 止图)收到m才会加入图中,所以可达结点收到过m,执行 了alg2.2第5行。由于是容许执行,第7行,即parent:=j也 alg2.2第 行。由于是容许执行,第7行,即parent:=j也 会执行。也就是被赋值。 <2> <=当第7行执行过,由于是容许执行,第5行也执行过, <=当第7行执行过,由于是容许执行,第5 即收到过m,而m是由pr发出的,所以可达。 即收到过m,而m是由pr发出的,所以可达。
8.
若将环Rrev划分为长度为 若将环Rrev划分为长度为j(j为2的幂)的连 划分为长度为j 的幂) 续片段,则所有这些片段是次序等价的。 续片段,则所有这些片段是次序等价的。
解:。。。。
附1:“表面上,1-time复杂性至少等于时间复杂性, :“表面上,1 time复杂性至少等于时间复杂性, 因为T2假定下的最坏时间不会高于O2假定下的时间。 因为T2假定下的最坏时间不会高于O2假定下的时间。 但事实并非如此,而往往O1和O2假定之下的 但事实并非如此,而往往O1和O2假定之下的 1-time复杂性是前一种时间复杂性的一个下界。”为 time复杂性是前一种时间复杂性的一个下界。”为 什么one-time复杂性是时间复杂性的下界呢? 什么one-time复杂性是时间复杂性的下界呢?
7. 证明异步环系统中不存在匿名的Leader选举 证明异步环系统中不存在匿名的Leader选举 算法。 算法。 解: 每个处理器的初始状态相同,状态机相同,接收的消 息序列也相同(只有接收消息的时间可能不同),故 最终处理器的状态一致。由于处理一条消息的至多需 要1时间单位,若某时刻某个处理器宣布自己是Leader 时间单位,若某时刻某个处理器宣布自己是Leader (接收到m条消息),则在有限时间内(m (接收到m条消息),则在有限时间内(m时间单位) 其他处理器也会宣布自己是Leader。 其他处理器也会宣布自己是Leader。 所以。。。 Note:每个处理器陆续宣布自己是Leader! Note:每个处理器陆续宣布自己是Leader!
算法分析与设计习题集答案
算法分析与设计习题集基础篇1、算法有哪些特点?它有哪些特征?它和程序的主要区别是什么?特点:就是一组有穷的规则,它规定了解决某一特定类型问题的一系列运算〔书上定义〕特征:输入、输出、有穷性、明确性、有效性区别:算法是完成特定任务的有限指令集。
程序是用电脑语言编写的写成特定任务的指令序列。
2、算法的时间复杂度指的是什么?如何表示?算法的时间复杂度是一个函数,它定量描述了该算法的运行时间。
这是一个关于代表算法输入值的字符串的长度的函数。
时间复杂度常用大O符号表述,不包括这个函数的低阶项和首项系数。
〔百度百科〕3、算法的空间复杂度指的是什么?如何表示?一个程序的空间复杂度是指运行完一个程序所需内存的大小。
利用程序的空间复杂度,可以对程序的运行所需要的内存多少有个预先估计。
一个程序执行时除了需要存储空间和存储本身所使用的指令、常数、变量和输入数据外,还需要一些对数据进行操作的工作单元和存储一些为现实计算所需信息的辅助空间。
程序执行时所需存储空间包括以下两部分。
〔1〕固定部分。
这部分空间的大小与输入/输出的数据的个数多少、数值无关。
主要包括指令空间〔即代码空间〕、数据空间〔常量、简单变量〕等所占的空间。
这部分属于静态空间。
〔2〕可变空间,这部分空间的主要包括动态分配的空间,以及递归栈所需的空间等。
这部分的空间大小与算法有关。
一个算法所需的存储空间用f(n)表示。
S(n)=O(f(n))其中n为问题的规模,S(n)表示空间复杂度。
答:最坏情况时间复杂性:最好情况时间复杂性::I*是DN中使T(N, I*)到达Tmax(N)的合法输入;P(I)是在算法的应用中出现输入I的概率10、限界函数的功能是什么?答:用限界函数剪去得不到最优解的子树11、设某一函数定义如下:编写一个递归函数计算给定x的M〔x〕的值。
本函数是一个递归函数,其递归出口是:M〔x〕= x-10x>100递归体是:M〔M〔x+11〕〕x ≤100实现此题功能的递归函数如下:intm ( intx ){ int y;if ( x>100 )return(x-10 );else {y =m(x+11) ;return (m (y ));}procedure M(x)if x>100 thenreturn(x-10)elsereturn M(M(x+11))endifend M12、已知一个顺序表中的元素按元素值非递减有序排列,编写一个函数删除表中多余的值相同的元素。
《算法设计与分析》考试题目及答案(DOC)
6. 能采用贪心算法求最优解的问题,一般具有的重要性质为:(A) A. 最优子结构性质与贪心选择性质 B.重叠子问题性质与贪心选择性质
3. 所谓贪心选择性质是指(所求问题的整体最优解可以通过一系列局部最 优的选择,即贪心选择来达到)。
4. 所谓最优子结构性质是指(问题的最优解包含了其子问题的最优解)。 5. 回溯法是指(具有限界函数的深度优先生成法)。 6. 用回溯法解题的一个显著特征是在搜索过程中动态产生问题的解空间。在任 何时刻,算法只保存从根结点到当前扩展结点的路径。如果解空间树 中 从根结点到叶结点的最长路径的长度为 h(n),则回溯法所需的计算空间通 常为(O(h(n)))。 7. 回溯法的算法框架按照问题的解空间一般分为(子集树)算法框架与
12. 用回溯法解图} 的 m 着色问题时,使用下面的函数 OK 检查当前扩展结点的
每一个儿子所相应的颜色的可用性,则需耗时(渐进时间上限)(O(mn))。
Bool Color::OK(int k) {//
for(int j=1;j<=n;j++) if((a[k][j]= =1)&&(x[j]= =x[k])) return false;
f(n)个单位时间。用 T(n)表示该分治法解规模为|P|=n 的问题所需的计算时
间,则有:T (n)
kT (n
O(1) / m)
f
(n)
n 1 n 1
算法设计与分析习题解答
算法设计与分析习题解答第一章作业1.证明下列Ο、Ω和Θ的性质1)f=Ο(g)当且仅当g=Ω(f)证明:充分性。
若f=Ο(g),则必然存在常数c1>0和n0,使得?n≥n0,有f≤c1*g(n)。
由于c1≠0,故g(n) ≥ 1/ c1 *f(n),故g=Ω(f)。
必要性。
同理,若g=Ω(f),则必然存在c2>0和n0,使得?n≥n0,有g(n) ≥ c2 *f(n).由于c2≠0,故f(n) ≤ 1/ c2*f(n),故f=Ο(g)。
2)若f=Θ(g)则g=Θ(f)证明:若f=Θ(g),则必然存在常数c1>0,c2>0和n0,使得?n≥n0,有c1*g(n) ≤f(n) ≤ c2*g(n)。
由于c1≠0,c2≠0,f(n) ≥c1*g(n)可得g(n) ≤ 1/c1*f(n),同时,f(n) ≤c2*g(n),有g(n) ≥ 1/c2*f(n),即1/c2*f(n) ≤g(n) ≤ 1/c1*f(n),故g=Θ(f)。
3)Ο(f+g)= Ο(max(f,g)),对于Ω和Θ同样成立。
证明:设F(n)= Ο(f+g),则存在c1>0,和n1,使得?n≥n1,有F(n) ≤ c1 (f(n)+g(n))= c1 f(n) + c1g(n)≤ c1*max{f,g}+ c1*max{f,g}=2 c1*max{f,g}所以,F(n)=Ο(max(f,g)),即Ο(f+g)= Ο(max(f,g))对于Ω和Θ同理证明可以成立。
4)log(n!)= Θ(nlogn)证明:由于log(n!)=∑=ni i 1log ≤∑=ni n 1log =nlogn ,所以可得log(n!)= Ο(nlogn)。
由于对所有的偶数n 有,log(n!)= ∑=ni i 1log ≥∑=nn i i 2/log ≥∑=nn i n 2/2/log ≥(n/2)log(n/2)=(nlogn)/2-n/2。
《算法设计与分析基础(第3版)》部分习题答案
作业一学号:______ 姓名:________P1352.a.为一个分治算法编写伪代码,该算法同时求出一个n元素数组的最大元素和最小元素的值。
解:算法:EXTREMUM(A[m..n],EXTREMUM_MAX, EXTREMUM_MIN)//递归调用EXTREMUM函数来找出数组A[m..n]的最大元素和最小元素。
//输入:数值数组A[m..n]//输出:最大值EXTREMUM_MAX和最小值EXTREMUM_MINif(m=n) //只有一个元素EXTREMUM_MAX←A[m];EXTREMUM_MIN←A[n];elseif n−m=1 //有两个元素if A[m]≤A[n]EXTREMUM_MAX←A[n]; EXTREMUM_MIN←A[m]; elseEXTREMUM_MAX←A[m]; EXTREMUM_MIN←A[n]; elseEXTREMUM(A[m..(m+n)/2],EXTREMUM_MAX_01,EXTREMUM_MIN_01);EXTREMUM(A[(m+n)/2..n],EXTREMUM_MAX_02,EXTREMUM_MIN_02);if EXTREMUM_MAX_01< EXTREMUM_MAX_02EXTREMUM_MAX = EXTREMUM_MAX_02;If EXTREMUM_MIN_02< EXTREMUM_MIN_01EXTREMUM_MIN = EXTREMUM_MIN_02;b. 假设n=2k,为该算法的键值比较次数建立递推关系式并求解。
解:C(n)=C(2k)=2C(2k−1)+2=2[2C(2k−2)+2]+2=22[2C(2k−3)+2]+22+2=2k−1C(2)+2k−1+2k−2+...+2=3n2−2c.将该算法与解决同样问题的蛮力法做一个比较蛮力法时间时间复杂度为2n-2,分治算法的为3n/2-2,虽然都属于Θ(n)级别,但是分治算法速度要比蛮力算法快。
算法设计第四章部分作业
cout<<"请输入两个乘数:";
cin>>n>>m;
sum=fun(n,m);
cout<<"计算结果为:";
cout<<sum<<endl;
return 0;
}
第8题:
想法:
对于火柴游戏,如果起初所有火柴的数量是5的倍数,那么第一个人是不能赢的,如果要第一个人赢得游戏,那么,要在火柴数量不是5的倍数的情况下进行,不管第二个人拿几根火柴,只要第一个人拿的数量是n%5的模值即可赢得游戏!
int main()
{
int a, b, r,s;//r表示a,b两个数的最大公约数,s表示a,b的最大公倍数
cout<<"请输入两个自然数:";
cin>>a>>b;
r = CommFactor2(a, b);//调用函数求最大公约数
cout<<a<<"和"<<b<<"的最大公约数是:"<<r<<endl;
n = r;
r = m % n;
}
return n;
}
第6题:
想法:
首先要建立一个大根堆,然后实现删除操作,关键是如何实现删除操作,我的想法是将要删除的元素和建立的大根堆的最后一个元素交换,然后再调用建立大根堆的函数将前n-1个函数进行大根堆操作
算法:
输入:要删除的元素的下标
输出:删除后排序好的大根堆
if(a%2==0)//若a为偶数
{
a=a/2;
算法设计与分析考试题及答案
1.一个算法就是一个有穷规则的集合,其中之规则规定了解决某一特殊类型问题的一系列运算,此外,算法还应具有以下五个重要特性:_________,________,________,__________,__________。
2.算法的复杂性有_____________和___________之分,衡量一个算法好坏的标准是______________________。
3.某一问题可用动态规划算法求解的显著特征是____________________________________。
4.若序列X={B,C,A,D,B,C,D},Y={A,C,B,A,B,D,C,D},请给出序列X 和Y的一个最长公共子序列_____________________________。
5.用回溯法解问题时,应明确定义问题的解空间,问题的解空间至少应包含___________。
6.动态规划算法的基本思想是将待求解问题分解成若干____________,先求解___________,然后从这些____________的解得到原问题的解。
7.以深度优先方式系统搜索问题解的算法称为_____________。
8.0-1背包问题的回溯算法所需的计算时间为_____________,用动态规划算法所需的计算时间为____________。
9.动态规划算法的两个基本要素是___________和___________。
10.二分搜索算法是利用_______________实现的算法。
二、综合题(50分)1.写出设计动态规划算法的主要步骤。
2.流水作业调度问题的johnson算法的思想。
3.若n=4,在机器M1和M2上加工作业i所需的时间分别为a i和b i,且(a1,a2,a3,a4)=(4,5,12,10),(b1,b2,b3,b4)=(8,2,15,9)求4个作业的最优调度方案,并计算最优值。
4.使用回溯法解0/1背包问题:n=3,C=9,V={6,10,3},W={3,4,4},其解空间有长度为3的0-1向量组成,要求用一棵完全二叉树表示其解空间(从根出发,左1右0),并画出其解空间树,计算其最优值及最优解。
算法设计与分析(王多强)作业参考答案.docx
第二章递归习题导论4.1-17(/?) = 27(b / 2)+ 1=> M = 2T5 /2) + 1%)习题导论4.1-6Tin) = 2T(0) + 1做代换:m=log2n另 S(m)=T(2m )则有: S(/z?) = 2S(zz? / 2) + 1 化简有:S(m)=O(m) 所以 T(n)=O(logn)习题4.2-27(/7)= T(n / 3) + 7(2/7 / 3) + 劲 注意最长分支 2n/3-*(2n/3)2 -*(2n/3)3...-*(2n^)log3/2n 习题4.3-1a) T(n) = 4T(n/2) + nb) T(n) = 4T(n/2) + n 2c 取大于1/2小于1的数即可,如珈习题4.3-4f(n )/nlogba = n 2log n/n'°g"二 log nvn所以不满足规则3直接化简即可,T(n)=O(n 2log 2n)c) T(n) = 4T(n/2) + n 3情况 3, ◎ (r?). 验证 4f(n/2)=4(n/2)3=n 3/2^cn 3,这里7X2")27(2"/彳)+情况4 0(n 2)情况 2, © (n 2logn)第三章习题4.5注意三分Z—和三分Z二分割点的计算ml = (2low+high)^m2 = (low+2high)/3习题4.20主要是验证T(n/r) + T(0)>|« n/r+O的数量级是否小于n的1次方(线性) 利用关系式:\n / r」n (/7 - r - 1) / /进行化简r=3:\r / 2~|~|_/2 / /_] / 2~| > 2 z? / r / 2 = n / r」> (/? 一2) / 3则,刀一卜/2北刀 / 厂」/ 2] < /? - (/? - 2) / 3 = 2/7 / 3 + 2 / 3 则,n〃 +羊n +厉超线性了r=7:\r / 2]\n / r\/ 2〕>/ 7」/2 = 2山 / 7」> 2(刀一6) / 7则,n - \r / i\\n / /」/ 2〕v 刀一2(刀一6) / 7 = 5刀 / 7 + 12 / 7可证,当n>48的时候,上式小于3伙则,n/7+3nA = 25n/28 <n 成立r=9:\r / 2][n / 厂」/ 2〕> 5[刀 / 9」/ 2 = (5 / 2)^/9」> 5(刀-8)/18n一\r / 2\[n / /」/ 2〕< 13/?/18 + 40/18可证,当n>20的时候,上式小于7n/8 则,n/9+7n/8 = 71n/72 <n 成立r=ll习题4.25肓接带入验证即可棋盘覆盖问题角上用一个骨牌覆盖,认为构造有特殊方格的区域,然后在四个区域上递归求解即可第四章中位数中位数习题导论9-2A)比较明显。
算法设计与分析答案参考
算法设计与分析答案参考1、⽤Floyd 算法求下图每⼀对顶点之间的最短路径长度,计算矩阵D 0,D 1,D 2和D 3,其中D k [i, j]表⽰从顶点i 到顶点j 的不经过编号⼤于k 的顶点的最短路径长度。
解在每条边的矩阵⾏中依次加⼊顶点1,2,3,判断有⽆最短路径 2、设有n=2k 个运动员要进⾏循环赛,现设计⼀个满⾜以下要求的⽐赛⽇程表:①每个选⼿必须与其他n-1名选⼿⽐赛各⼀次;②每个选⼿⼀天⾄多只能赛⼀次;③循环赛要在最短时间内完成。
(1)如果n=2k ,循环赛最少需要进⾏⼏天;(2)当n=23=8时,请画出循环赛⽇程表。
解:(1)⾄少要进⾏n 天(2)如右图:3、对于下图使⽤Dijkstra 算法求由顶点a 到顶点h 的最短路径。
1 2 3 4 5 67 82 1 43 6 58 7解:⽤V 1表⽰已经找到最短路径的顶点,V 2表⽰与V 1中某个顶点相邻接且不在V 1中的顶点;E 1表⽰加⼊到最短路径中的边,E 2为与V 1中的顶点相邻接且距离最短的路径。
步骤 V 1 V 2 E 1E 2 1. {a}{b} {}{ab}2. {a,b} {d} {ab}{bd}3. {a,b,d}{c,f} {ab,bd}{dc,df} 4. {a,b,d,c} {f} {ab,bd}{df} 5. {a,b,c,d,f} {e} {ab,bd,dc,df}{fe}6. {a,b,c,d,e,f}{g} {ab,bd,dc,df,fe} {eg}7. {a,b,c,d,e,f,g} {h}{ab,bd,dc,df,fe,eg}{gh}8. {a,b,c,d,e,f,g,h} {} {ab,bd,de,df,fe,eg,gh} {} 结果:从a 到h 的最短路径为a b d fe g h →→→→→→,权值为18。
求所有顶点对之间的最短路径可以使⽤Dijkstra 算法,使其起始节点从a 循环到h ,每次求起始节点到其他节点的最短路径,最终可以求得所有顶点对之间的最短路径。
算法设计与分析第二版课后习题解答
算法设计与分析基础课后练习答案算法设计与分析基础课后练习答案习题1.1 4.设计一个计算的算法,n 是任意正整数。
除了赋值和比较运算,该算法只能用到基本的四则运算操作。
能用到基本的四则运算操作。
算法求//输入:一个正整数n 2 //输出:。
step1:a=1;step2:若a*a<n 转step 3,否则输出a ; step3:a=a+1转step 2; 5. a .用欧几里德算法求gcd (31415,14142)。
b. 用欧几里德算法求gcd (31415,14142),比检查min {m ,n }和gcd (m ,n )间连续整数的算法快多少倍?请估算一下。
a. gcd(31415, 14142) = gcd(14142, 3131) = gcd(3131, 1618) =gcd(1618, 1513) = gcd(1513, 105) = gcd(1513, 105) = gcd(105, 43) =gcd(43, 19) = gcd(19, 5) = gcd(5, 4) = gcd(4, 1) = gcd(1, 0) = 1. b.有a 可知计算gcd (31415,14142)欧几里德算法做了11次除法。
次除法。
连续整数检测算法在14142每次迭代过程中或者做了一次除法,或者两次除法,因此这个算法做除法的次数鉴于1·14142 和 2·14142之间,之间,所以欧几里德算法所以欧几里德算法比此算法快1·14142/11 ≈ 1300 与 2·14142/11 ≈ 2600 倍之间。
倍之间。
6.证明等式gcd(m,n)=gcd(n,m mod n)对每一对正整数对每一对正整数m,n 都成立. Hint: 根据除法的定义不难证明: l 如果d 整除u 和v, 那么d 一定能整除u ±v;l 如果d 整除u,那么d 也能够整除u 的任何整数倍ku. 对于任意一对正整数m,n,m,n,若若d 能整除m 和n,n,那么那么d 一定能整除n 和r=m mod n=m-qn n=m-qn;显然,若;显然,若d 能整除n 和r ,也一定能整除m=r+qn 和n 。
算法设计与分析复习题目及答案详解
算法设计与分析复习题目及答案详解分治法 1、二分搜索算法是利用(分治策略)实现的算法。
9.实现循环赛日程表利用的算法是(分治策略)27、Strassen矩阵乘法是利用(分治策略)实现的算法。
34.实现合并排序利用的算法是(分治策略)。
实现大整数的乘法是利用的算法(分治策略)。
17.实现棋盘覆盖算法利用的算法是(分治法)。
29、使用分治法求解不需要满足的条件是(子问题必须是一样的)。
不可以使用分治法求解的是(0/1背包问题)。
动态规划下列不是动态规划算法基本步骤的是(构造最优解)下列是动态规划算法基本要素的是(子问题重叠性质)。
下列算法中通常以自底向上的方式求解最优解的是(动态规划法)备忘录方法是那种算法的变形。
(动态规划法)最长公共子序列算法利用的算法是(动态规划法)。
矩阵连乘问题的算法可由(动态规划算法B)设计实现。
实现最大子段和利用的算法是(动态规划法)。
贪心算法能解决的问题:单源最短路径问题,最小花费生成树问题,背包问题,活动安排问题,不能解决的问题:N皇后问题,0/1背包问题是贪心算法的基本要素的是(贪心选择性质和最优子结构性质)。
回溯法回溯法解旅行售货员问题时的解空间树是(排列树)。
剪枝函数是回溯法中为避免无效搜索采取的策略回溯法的效率不依赖于下列哪些因素(确定解空间的时间)分支限界法最大效益优先是(分支界限法)的一搜索方式。
分支限界法解最大团问题时,活结点表的组织形式是(最大堆)。
分支限界法解旅行售货员问题时,活结点表的组织形式是(最小堆)优先队列式分支限界法选取扩展结点的原则是(结点的优先级)在对问题的解空间树进行搜索的方法中,一个活结点最多有一次机会成为活结点的是(分支限界法).从活结点表中选择下一个扩展结点的不同方式将导致不同的分支限界法,以下除(栈式分支限界法)之外都是最常见的方式.(1)队列式(FIFO)分支限界法:按照队列先进先出(FIFO)原则选取下一个节点为扩展节点。
