算法分析作业
[学习]算法设计与分析作业第56章v
(单位:s)
22个基站
42个基站
旅行商问题
针对昆明LTE网络,选取部分基站,计算基站间的 距离,在部分基站间引入边,得到
1)图1. n=15个基站顶点组成的图,以图中基站顶点 作为城市
——从n=22的基站图中,去除2组、7个位置相邻的 基站:2, 12, 15; 4, 6, 8,18
——对应地,从22个基站顶点的邻接矩阵(.xls)中, 去除这7个基站对应的行、列, 得到15个基站顶点的邻接矩阵
分析结果
1. 算法运行数据,记录在(前一张)表格中 2. <lgn, lgt(n)>散点图 3. 线性回归表达式lgt(n) = k* lgn + b
不许抄袭!
不同台式机、笔记本电脑的硬件配置不同 ,在2台不同机器上程序运行时间t(n)不可 能完全相同!!!
图的m着色问题
从昆明LTE网络中,选取部分基站,计算基站间的 距离,在部分基站间引入边,得到
方法 根据资料/讲义,算法在一个随机解上的最坏复杂度为O(n3) 假设: t(n)=O(nk),则 lgt(n) ~klgn,
通过对数据<n, lgn, lgt(n)>的线性回归分析,以lgn为自变量x ,以lgt(n)为因变量y,得到回归表达式 y = k*x +b,判断: 1)阶次k的范围( ? ≤ k ≤ ?), 2)t(n) ~ C nk
模,但需要保持10组数据。
例如,如果问题规模n=500,000时,算法运行时间 已经达到4小时左右,可以在5,000至500,000间取 10个不同的n值。考察这10个问题规模n下的算法 运行时间
此时,n可以取值:
5,000
10,000
50,000
算法分析与设计作业参考答案
算法分析与设计作业参考答案《算法分析与设计》作业参考答案作业⼀⼀、名词解释:1.递归算法:直接或间接地调⽤⾃⾝的算法称为递归算法。
2.程序:程序是算法⽤某种程序设计语⾔的具体实现。
⼆、简答题:1.算法需要满⾜哪些性质?简述之。
答:算法是若⼲指令的有穷序列,满⾜性质:(1)输⼊:有零个或多个外部量作为算法的输⼊。
(2)输出:算法产⽣⾄少⼀个量作为输出。
(3)确定性:组成算法的每条指令清晰、⽆歧义。
(4)有限性:算法中每条指令的执⾏次数有限,执⾏每条指令的时间也有限。
2.简要分析分治法能解决的问题具有的特征。
答:分析分治法能解决的问题主要具有如下特征:(1)该问题的规模缩⼩到⼀定的程度就可以容易地解决;(2)该问题可以分解为若⼲个规模较⼩的相同问题,即该问题具有最优⼦结构性质;(3)利⽤该问题分解出的⼦问题的解可以合并为该问题的解;(4)该问题所分解出的各个⼦问题是相互独⽴的,即⼦问题之间不包含公共的⼦问题。
3.简要分析在递归算法中消除递归调⽤,将递归算法转化为⾮递归算法的⽅法。
答:将递归算法转化为⾮递归算法的⽅法主要有:(1)采⽤⼀个⽤户定义的栈来模拟系统的递归调⽤⼯作栈。
该⽅法通⽤性强,但本质上还是递归,只不过⼈⼯做了本来由编译器做的事情,优化效果不明显。
(2)⽤递推来实现递归函数。
(3)通过Cooper 变换、反演变换能将⼀些递归转化为尾递归,从⽽迭代求出结果。
后两种⽅法在时空复杂度上均有较⼤改善,但其适⽤范围有限。
三、算法编写及算法应⽤分析题: 1.冒泡排序算法的基本运算如下: for i ←1 to n-1 dofor j ←1 to n-i do if a[j]交换a[j]、a[j+1];分析该算法的时间复杂性。
答:排序算法的基本运算步为元素⽐较,冒泡排序算法的时间复杂性就是求⽐较次数与n 的关系。
(1)设⽐较⼀次花时间1;(2)内循环次数为:n-i 次,(i=1,…n ),花时间为:∑-=-=in j i n 1)(1(3)外循环次数为:n-1,花时间为:2.设计⼀个分治算法计算⼀棵⼆叉树的⾼度。
东师21秋学期《算法分析与设计》在线作业1(答案)
东师21秋学期《算法分析与设计》在线作业1(答案)一、单选题1. 字符串”China Beijing”的长度是()A.12B. 13C. 14D. 15正确答案. B2. 一棵二叉树中共有70个叶子结点与80个度为1的结点,则该二叉树的总结点数为()。
A.219B. 221C. 229D. 231正确答案. A3. 栈和队列的共同点是()A.都是先进先出B. 都是先进后出C. 只允许在端点处插入和删除元素D. 没有共同点正确答案. C4. 使用简单选择排序法对n个数进行排序要进行()趟比较。
A. NB. n-1C. n+1D. 不一定正确答案. B5. 下面给出的四种排序方法中,排序过程中的比较次数与排序方法无关的是()。
A. 选择排序法B. 插入排序法C. 快速排序法D. 堆积排序法正确答案. A6. 图中有关路径的定义是()。
A. 由顶点和相邻顶点序偶构成的边所形成的序列B. 由不同顶点所形成的序列C. 由不同边所形成的序列D. 上述定义都不是正确答案. A7. 执行memset(s,'a',4)后,s的值为()。
A. "aaaa"B. "a4"C. "4a"D. "eeee"正确答案. A8. 一个算法的评价主要从空间复杂度和()来考虑。
A. 时间复杂度B. 算法有效性C. 算法有穷性D. 算法可读性正确答案. A9. 下面的时间复杂度按数量级递增的顺序排列,正确的是注释从功能上可以分为()。
A. 平方阶O(n2),对数阶O(log2n),指数阶O(2n)B. 线性对数阶O(nlog2n),指数阶O(2n),立方阶O(n3)C. 常数阶O(1),线性阶O(n),指数阶O(2n)D. k次方阶O(nk),指数阶O(2n),对数阶O(log2n)正确答案. C10. ()嵌在源程序体中,用于描述其后的语句或程序段做什么工作,也就是解释下面要做什么,或是执行了下面的语句会怎么样。
算法分析与设计作业及参考答案样本
《算法分析与设计》作业( 一)本课程作业由两部分组成。
第一部分为”客观题部分”, 由15个选择题组成, 每题1分, 共15分。
第二部分为”主观题部分”,由简答题和论述题组成, 共15分。
作业总分30分, 将作为平时成绩记入课程总成绩。
客观题部分:一、选择题( 每题1分, 共15题)1、递归算法: ( C )A、直接调用自身B、间接调用自身C、直接或间接调用自身 D、不调用自身2、分治法的基本思想是将一个规模为n的问题分解为k个规模较小的字问题, 这些子问题: ( D )A、相互独立B、与原问题相同C、相互依赖D、相互独立且与原问题相同3、备忘录方法的递归方式是:( C )A、自顶向下B、自底向上C、和动态规划算法相同D、非递归的4、回溯法的求解目标是找出解空间中满足约束条件的:( A )A、所有解B、一些解C、极大解D、极小解5、贪心算法和动态规划算法共有特点是: ( A )A、最优子结构B、重叠子问题C、贪心选择D、形函数6、哈夫曼编码是: ( B)A、定长编码B、变长编码C、随机编码D、定长或变长编码7、多机调度的贪心策略是: ( A)A、最长处理时间作业优先B、最短处理时间作业优先C、随机调度D、最优调度8、程序能够不满足如下性质: ( D )A、零个或多个外部输入B、至少一个输出C、指令的确定性D、指令的有限性9、用分治法设计出的程序一般是: ( A )A、递归算法B、动态规划算法C、贪心算法D、回溯法10、采用动态规划算法分解得到的子问题:( C )A、相互独立B、与原问题相同C、相互依赖D、相互独立且与原问题相同11、回溯法搜索解空间的方法是: ( A )A、深度优先B、广度优先C、最小耗费优先D、随机搜索12、拉斯维加斯算法的一个显著特征是它所做的随机选性决策有可能导致算法: ( C )A、所需时间变化B、一定找到解C、找不到所需的解D、性能变差13、贪心算法能得到: ( C )A、全局最优解B、 0-1背包问题的解C、背包问题的解 D、无解14、能求解单源最短路径问题的算法是: ( A )A、分支限界法B、动态规划C、线形规划D、蒙特卡罗算法15、快速排序算法和线性时间选择算法的随机化版本是:( A )A、舍伍德算法B、蒙特卡罗算法C、拉斯维加斯算法D、数值随机化算法主观题部分:二、写出下列程序的答案( 每题2.5分, 共2题)1、请写出批处理作业调度的回溯算法。
短作业优先调度算法例题详解
短作业优先调度算法例题详解
(原创实用版)
目录
1.短作业优先调度算法的概述
2.算法的例子
3.算法的详解
4.算法的优点和缺点
正文
一、短作业优先调度算法的概述
短作业优先调度算法(Shortest Job First, SJF)是一种常见的作业调度算法。
这种算法的基本原则是优先执行估计运行时间最短的作业,直到完成。
然后,再从剩下的作业中选择估计运行时间最短的作业执行,以此类推。
这种算法的目的是尽可能减少作业的平均等待时间。
二、算法的例子
假设有一个计算机系统,其中有三个作业需要执行,它们的运行时间分别是:作业 1 需要 20 分钟,作业 2 需要 30 分钟,作业 3 需要 10 分钟。
按照短作业优先调度算法,执行顺序应为:先执行作业 3(10 分钟),然后执行作业 1(20 分钟),最后执行作业 2(30 分钟)。
三、算法的详解
短作业优先调度算法的执行过程可以分为以下几个步骤:
1.首先,将等待执行的作业按照运行时间从短到长进行排序。
2.然后,选择运行时间最短的作业执行,直到完成。
3.完成后,再从剩下的作业中选择运行时间最短的作业执行,以此类推。
四、算法的优点和缺点
短作业优先调度算法的优点是能够使得作业的平均等待时间最短,从而提高了系统的效率。
然而,这种算法也有其缺点,那就是长作业可能会被频繁地打断,导致其执行效率低下。
操作系统中常用作业调度算法的分析
操作系统中常用作业调度算法的分析作业调度是操作系统中的一个重要组成部分,它负责对待执行的作业进行排队和调度,以最大化系统资源的利用效率、满足用户需求、保证系统稳定性等目标。
常见的作业调度算法有先来先服务(FCFS)、最短作业优先(SJF)、优先级调度、时间片轮转(RR)等,接下来我们分别对这几种算法进行分析。
1. FCFS调度算法先来先服务调度算法是操作系统中最简单的一种调度算法,也是最常用的一种调度算法。
它的处理方式是根据提交时间顺序,按照FIFO的顺序进行调度。
该算法的优点是简单易用,而且很容易实现。
同时,对于大多数情况下,该算法的资源分配相对公平。
但是,该算法存在着一些问题。
当一个作业的执行时间较长时,会大大降低系统的吞吐量,严重影响系统的效率。
因此,在实际应用中,该算法往往不能满足对作业的实时响应和高效完成的要求。
最短作业优先调度算法是一种非抢占式调度算法,它将作业按照其需要执行的时间长短大小进行排序,然后从执行时间最短的作业开始调度。
在实际应用中,该算法可以减少平均等待时间和平均周转时间,提高系统的效率和性能。
但是,该算法有个致命的缺点——它无法预测作业的执行时间。
如果一个长作业被排在了等待队列的前面,那么所有后续的短作业都要等待非常长的时间,这可能导致饥饿现象的出现。
3. 优先级调度算法优先调度算法是一种根据作业优先级大小进行调度的算法,可以根据作业的重要程度或紧急程度来设置不同的优先级。
该算法可以提高系统的响应速度和稳定性,满足系统特定的需求。
但是,该算法也存在着一些问题。
如果一个作业的优先级太高,那么其余的作业可能会一直处于等待状态,这种情况也会导致饥饿现象的出现。
此外,该算法的优先级设置需要有一定的经验和技巧,否则可能会对系统的性能产生不良影响。
4. 时间片轮转算法时间片轮转算法是一种循环调度算法,它将CPU的时间分成多个固定大小的时间片,然后在每个时间片内轮流执行等待队列中的作业,以便平均分配CPU资源。
算法分析作业
算法分析作业 IMB standardization office【IMB 5AB- IMBK 08- IMB 2C】算法分析练习题(一)一、选择题1、二分搜索算法是利用(A )实现的算法。
A、分治策略B、动态规划法C、贪心法D、回溯法2、下列不是动态规划算法基本步骤的是(A )。
A、找出最优解的性质B、构造最优解C、算出最优解D、定义最优解3.下列算法中通常以自底向上的方式求解最优解的是(B )。
A、备忘录法B、动态规划法C、贪心法D、回溯法4、衡量一个算法好坏的标准是(C )。
A 运行速度快B 占用空间少C 时间复杂度低D 代码短5、以下不可以使用分治法求解的是(D )。
A 棋盘覆盖问题B 选择问题C 归并排序D 0/1背包问题6. 实现循环赛日程表利用的算法是(A )。
A、分治策略B、动态规划法C、贪心法D、回溯法7.备忘录方法是那种算法的变形。
( B )A、分治法B、动态规划法C、贪心法D、回溯法8.最长公共子序列算法利用的算法是(B )。
A、分支界限法B、动态规划法C、贪心法D、回溯法9.实现棋盘覆盖算法利用的算法是(A )。
A、分治法B、动态规划法C、贪心法D、回溯法10. 矩阵连乘问题的算法可由(B)设计实现。
A、分支界限算法B、动态规划算法C、贪心算法D、回溯算法11、Strassen矩阵乘法是利用(A )实现的算法。
A、分治策略B、动态规划法C、贪心法D、回溯法12、使用分治法求解不需要满足的条件是(A )。
A 子问题必须是一样的B 子问题不能够重复C 子问题的解可以合并D 原问题和子问题使用相同的方法解13、下列算法中不能解决0/1背包问题的是(A )A 贪心法B 动态规划C 回溯法D 分支限界法14.实现合并排序利用的算法是(A )。
A、分治策略B、动态规划法C、贪心法D、回溯法15.下列是动态规划算法基本要素的是(D )。
A、定义最优解B、构造最优解C、算出最优解D、子问题重叠性质16.下列算法中通常以自底向下的方式求解最优解的是(B )。
算法分析与设计作业及参考答案
算法分析与设计作业及参考答案作业题目1、请分析冒泡排序算法的时间复杂度和空间复杂度,并举例说明其在实际中的应用场景。
2、设计一个算法,用于在一个未排序的整数数组中找到第二大的元素,并分析其时间复杂度。
3、比较贪心算法和动态规划算法的异同,并分别举例说明它们在解决问题中的应用。
参考答案1、冒泡排序算法时间复杂度:冒泡排序的基本思想是通过相邻元素的比较和交换,将最大的元素逐步“浮”到数组的末尾。
在最坏情况下,数组完全逆序,需要进行 n 1 轮比较和交换,每一轮比较 n i 次(i 表示当前轮数),所以总的比较次数为 n(n 1) / 2,时间复杂度为 O(n^2)。
在最好情况下,数组已经有序,只需要进行一轮比较,时间复杂度为 O(n)。
平均情况下,时间复杂度也为 O(n^2)。
空间复杂度:冒泡排序只在原数组上进行操作,不需要额外的存储空间,空间复杂度为 O(1)。
应用场景:冒泡排序算法简单易懂,对于规模较小的数组,或者对算法的简单性要求较高而对性能要求不是特别苛刻的场景,如对少量数据进行简单排序时,可以使用冒泡排序。
例如,在一个小型的学生成绩管理系统中,需要对一个班级的少量学生成绩进行排序展示,冒泡排序就可以满足需求。
2、找到第二大元素的算法以下是一种使用遍历的方法来找到未排序整数数组中第二大元素的算法:```pythondef find_second_largest(arr):largest = arr0second_largest = float('inf')for num in arr:if num > largest:second_largest = largestlargest = numelif num > second_largest and num!= largest:second_largest = numreturn second_largest```时间复杂度分析:这个算法需要遍历数组一次,所以时间复杂度为O(n)。
[答案][北京语言大学]2020秋《算法与数据分析》作业3
1.用分支限界法设计算法的第二步是()。
[答案:B]A.针对所给问题,定义问题的解空间(对解进行编码)B.确定易于搜索的解空间结构(按树或图组织解)C.以广度优先或以最小耗费(最大收益)优先的方式搜索解空间D.在搜索过程中用剪枝函数避免无效搜索2.蒙特卡罗算法是以下的哪种?()[答案:B]A.分支界限算法B.概率算法C.贪心算法D.回溯算法3.一个问题可用动态规划算法或贪心算法求解的关键特征是问题的()。
[答案:B]A.重叠子问题B.最优子结构性质C.贪心选择性质D.定义最优解4.实现合并排序利用的算法是()。
[答案:A]A.分治策略B.动态规划法C.贪心法D.回溯法5.实现最大子段和利用的算法是()。
[答案:B]A.分治策略B.动态规划法C.贪心法D.回溯法6.下面哪种函数是回溯法中为避免无效搜索采取的策略?() [答案:B]A.递归函数B.剪枝函数C.随机数函数D.搜索函数7.哈弗曼编码的贪心算法所需的计算时间为()。
[答案:B]A.O(n2n)B.O(nlogn)C.O(2n)D.O(n)8.实现棋盘覆盖算法利用的算法是()。
[答案:A]A.分治法B.动态规划法C.贪心法D.回溯法9.合并排序算法是利用()。
[答案:A]A.分治策略B.动态规划法C.贪心法D.回溯法10.下面是贪心算法的基本要素的是()。
[答案:C]A.重叠子问题B.构造最优解C.贪心选择性质D.定义最优解11.矩阵连乘问题的算法可由动态规划设计实现。
()[答案:B]A.错误B.正确12.分支限界法是一种只带有系统性的搜索算法。
()[答案:A]A.错误B.正确13.矩阵连乘问题的算法可由动态规划设计实现。
()[答案:B]A.错误B.正确14.拉斯维加斯算法找到的解不一定是正确解。
()[答案:A]A.错误B.正确15.动态规划算法的基本思想是将待求解问题分解成若干子问题,先求解子问题,然后从这些子问题的解得到原问题的解。
()[答案:B]A.错误B.正确16.程序是算法用某种程序设计语言的具体实现。
《算法分析与设计》作业答案
《算法分析与设计》作业1、考虑,10≤≤i x 而不是x i ∈{0,1}的连续背包问题。
一种可行的贪婪策略是:按价值密度非递减的顺序检查物品,若剩余容量能容下正在考察的物品,将其装入;否则,往背包内装如此物品的一部分。
(a) 对于n=3,w=[100,10,10],p=[20,15,15],以及c=105,上述装入法获得结果是什么?(b)证明这种贪婪算法总能获得最优解。
(c) 用伪代码描述此算法。
答:(a )利用贪婪算法,按价值密度考察的背包为w2,w3,w1;背包w2和w3重20,还可以容纳85,由于10≤≤i x ,背包w1还可以装入x1=0.85,则背包内物品总价值为15+15+20*0.85=47.(b )假设已按价值密度排好序,考察w1,w2,……,wi ,……,对应的价值为p1,p2,……,pi,……如果装到pi-1再装pi 时,恰好要取xi 个wi 。
(,10≤≤i x ) 因为比它价值密度大的都已装载完,所以此时获得的为最优解。
(c )算法描述如下: template <class T>int ContainerLoading( int x[], T w[], T c, int n ) {int *t = new int[n+1]; IndirectSort(w, t, n); for( int i=1; i<=n; i++) x[i] = 0;for(i=1; i<=n && w[t[i]]<=c; i++){ x[t[i]] = 1; c += w[t[i]]; } delete []t; }2、证明当且仅当二分图没有覆盖时,下述算法找不到覆盖。
m=0; //当前覆盖的大小对于A中的所有i,New[i]=Degree[i]对于B中的所有i,Cov[i]=falsewhile(对于A中的某些i,New[i]>0) {设v是具有最大的New[i]的顶点;C[m++]=v;for(所有邻接于v的顶点j) {If(!Cov[j]) {Cov[j] = true;对于所有邻接于j的顶点,使其New[k]减1}}}if (有些顶点未被覆盖) 失败else 找到一个覆盖2)给出一个具有覆盖的二分图,使得上述算法找不到最小覆盖。
算法设计与分析考试题目及答案
算法设计与分析考试题目及答案Revised at 16:25 am on June 10, 2021I hope tomorrow will definitely be better算法分析与设计期末复习题一、 选择题1.应用Johnson 法则的流水作业调度采用的算法是DA. 贪心算法B. 分支限界法C.分治法D. 动态规划算法塔问题如下图所示;现要求将塔座A 上的的所有圆盘移到塔座B 上,并仍按同样顺序叠置;移动圆盘时遵守Hanoi 塔问题的移动规则;由此设计出解Hanoi 塔问题的递归算法正确的为:B3. 动态规划算法的基本要素为C A. 最优子结构性质与贪心选择性质 B .重叠子问题性质与贪心选择性质 C .最优子结构性质与重叠子问题性质 D. 预排序与递归调用4. 算法分析中,记号O 表示B , 记号Ω表示A , 记号Θ表示D ; A.渐进下界 B.渐进上界 C.非紧上界 D.紧渐进界 E.非紧下界5. 以下关于渐进记号的性质是正确的有:A A.f (n)(g(n)),g(n)(h(n))f (n)(h(n))=Θ=Θ⇒=Θ B. f (n)O(g(n)),g(n)O(h(n))h(n)O(f (n))==⇒= C. Ofn+Ogn = Omin{fn,gn} D. f (n)O(g(n))g(n)O(f (n))=⇔=Hanoi 塔A. void hanoiint n, int A, int C, int B { if n > 0 {hanoin-1,A,C, B; moven,a,b;hanoin-1, C, B, A; } B. void hanoiint n, int A, int B, int C { if n > 0 {hanoin-1, A, C, B; moven,a,b; hanoin-1, C, B, A; }C. void hanoiint n, int C, int B, int A { if n > 0 { hanoin-1, A, C, B; moven,a,b; hanoin-1, C, B, A; }D. void hanoiint n, int C, int A, int B { if n > 0 {hanoin-1, A, C, B; moven,a,b;hanoin-1, C, B, A; }6.能采用贪心算法求最优解的问题,一般具有的重要性质为:AA. 最优子结构性质与贪心选择性质B.重叠子问题性质与贪心选择性质C.最优子结构性质与重叠子问题性质D. 预排序与递归调用7. 回溯法在问题的解空间树中,按D策略,从根结点出发搜索解空间树;广度优先 B. 活结点优先 C.扩展结点优先 D. 深度优先8. 分支限界法在问题的解空间树中,按A策略,从根结点出发搜索解空间树;A.广度优先 B. 活结点优先 C.扩展结点优先 D. 深度优先9. 程序块A是回溯法中遍历排列树的算法框架程序;A.B.C.D.10.xk的个数;11. 常见的两种分支限界法为DA. 广度优先分支限界法与深度优先分支限界法;B. 队列式FIFO分支限界法与堆栈式分支限界法;C. 排列树法与子集树法;D. 队列式FIFO分支限界法与优先队列式分支限界法;12. k带图灵机的空间复杂性Sn是指BA.k带图灵机处理所有长度为n的输入时,在某条带上所使用过的最大方格数;B.k带图灵机处理所有长度为n的输入时,在k条带上所使用过的方格数的总和;C.k带图灵机处理所有长度为n的输入时,在k条带上所使用过的平均方格数;D.k带图灵机处理所有长度为n的输入时,在某条带上所使用过的最小方格数;13. N P类语言在图灵机下的定义为DA.NP={L|L是一个能在非多项式时间内被一台NDTM所接受的语言};B.NP={L|L是一个能在多项式时间内被一台NDTM所接受的语言};C.NP={L|L是一个能在多项式时间内被一台DTM所接受的语言};D.NP={L|L是一个能在多项式时间内被一台NDTM所接受的语言};14. 记号O的定义正确的是A;A.Ogn = { fn | 存在正常数c和n0使得对所有n≥n0有:0≤ fn ≤cgn };B.Ogn = { fn | 存在正常数c和n0使得对所有n≥n0有:0≤ cgn ≤fn };>0使得对所有n≥n0C.Ogn = { fn | 对于任何正常数c>0,存在正数和n有:0 ≤fn<cgn };>0使得对所有n≥n0D.Ogn = { fn | 对于任何正常数c>0,存在正数和n有:0 ≤cgn < fn };15. 记号Ω的定义正确的是B;A.Ogn = { fn | 存在正常数c和n0使得对所有n≥n0有:0≤ fn ≤cgn };B.Ogn = { fn | 存在正常数c和n0使得对所有n≥n0有:0≤ cgn ≤fn };>0使得对所有n≥n0有:C.gn = { fn | 对于任何正常数c>0,存在正数和n0 ≤fn<cgn };D.gn = { fn | 对于任何正常数c>0,存在正数和n0 >0使得对所有n≥n0有:0 ≤cgn < fn };二、 填空题1. 下面程序段的所需要的计算时间为 2O(n ) ;2.3.4. 5.6. 用回溯法解题的一个显着特征是在搜索过程中动态产生问题的解空间;在任何时刻,算法只保存从根结点到当前扩展结点的路径;如果解空间树 中从根结点到叶结点的最长路径的长度为hn,则回溯法所需的计算空间通常为Ohn ;7. 回溯法的算法框架按照问题的解空间一般分为子集树算法框架与排列树算法框架;8. 用回溯法解0/1背包问题时,该问题的解空间结构为子集树结构; 9.用回溯法解批处理作业调度问题时,该问题的解空间结构为排列树结构; 10.用回溯法解0/1背包问题时,计算结点的上界的函数如下所示,请在空格中填入合适的内容:11. n m12. 用回溯法解图的m着色问题时,使用下面的函数OK检查当前扩展结点的每一个儿子所相应的颜色的可用性,则需耗时渐进时间上限Omn;13.;设分分解为k个子问题以及用merge将k个子问题的解合并为原问题的解需用fn个单位时间;用Tn表示该分治法解规模为|P|=n的问题所需的计算时间,则有:(1)1 ()(/)()1O nT nkT n m f n n=⎧=⎨+>⎩通过迭代法求得Tn的显式表达式为:log1log()(/)nmk j jmjT n n k f n m-==+∑试证明Tn的显式表达式的正确性;2. 举反例证明0/1背包问题若使用的算法是按照p i/w i的非递减次序考虑选择的物品,即只要正在被考虑的物品装得进就装入背包,则此方法不一定能得到最优解此题说明0/1背包问题与背包问题的不同;证明:举例如:p={7,4,4},w={3,2,2},c=4时,由于7/3最大,若按题目要求的方法,只能取第一个,收益是7;而此实例的最大的收益应该是8,取第2,3 个;3. 求证:Ofn+Ogn = Omax{fn,gn} ;证明:对于任意f1n∈ Ofn ,存在正常数c1和自然数n1,使得对所有n≥n1,有f1n≤ c1fn ;类似地,对于任意g1n ∈ Ogn ,存在正常数c2和自然数n2,使得对所有n≥n2,有g1n ≤c2gn ;令c3=max{c1, c2}, n3 =max{n1, n2},hn= max{fn,gn} ;则对所有的 n ≥ n3,有f1n +g1n ≤ c1fn + c2gn≤c3fn + c3gn= c3fn + gn≤ c32 max{fn,gn} = 2c3hn = Omax{fn,gn} .4. 求证最优装载问题具有贪心选择性质;最优装载问题:有一批集装箱要装上一艘载重量为c 的轮船;其中集装箱i 的重量为Wi;最优装载问题要求确定在装载体积不受限制的情况下,将尽可能多的集装箱装上轮船; 设集装箱已依其重量从小到大排序,x 1,x 2,…,x n 是最优装载问题的一个最优解;又设1min{|1}i i nk i x ≤≤== ;如果给定的最优装载问题有解,则有1k n ≤≤;证明: 四、 解答题1. 机器调度问题;问题描述:现在有n 件任务和无限多台的机器,任务可以在机器上得到处理;每件任务的开始时间为s i ,完成时间为f i ,s i <f i ;s i ,f i 为处理任务i 的时间范围;两个任务i,j 重叠指两个任务的时间范围区间有重叠,而并非指i,j 的起点或终点重合;例如:区间1,4与区间2,4重叠,而与4,7不重叠;一个可行的任务分配是指在分配中没有两件重叠的任务分配给同一台机器;因此,在可行的分配中每台机器在任何时刻最多只处理一个任务;最优分配是指使用的机器最少的可行分配方案;问题实例:若任务占用的时间范围是{1,4,2,5,4,5,2,6,4,7},则按时完成所有任务最少需要几台机器提示:使用贪心算法画出工作在对应的机器上的分配情况;2. 已知非齐次递归方程:f (n)bf (n 1)g(n)f (0)c =-+⎧⎨=⎩ ,其中,b 、c 是常数,gn 是n 的某一个函数;则fn 的非递归表达式为:nnn i i 1f (n)cb b g(i)-==+∑;现有Hanoi 塔问题的递归方程为:h(n)2h(n 1)1h(1)1=-+⎧⎨=⎩ ,求hn 的非递归表达式;解:利用给出的关系式,此时有:b=2, c=1, gn=1, 从n 递推到1,有: 3. 单源最短路径的求解;问题的描述:给定带权有向图如下图所示G =V,E,其中每条边的权是非负实数;另外,还给定V 中的一个顶点,称为源;现在要计算从源到所有其它各顶点的最短路长度;这里路的长度是指路上各边权之和;这个问题通常称为单源最短路径问题;解法:现采用Dijkstra 算法计算从源顶点1到其它顶点间最短路径;请将此过程填入下表中;4. 请写出用回溯法解装载问题的函数; 装载问题:有一批共n 个集装箱要装上2艘载重量分别为c1和c2的轮船,其中集装箱i 的重量为wi,且121ni i w c c =≤+∑;装载问题要求确定是否有一个合理的装载方案可将这n 个集装箱装上这2艘轮船;如果有,找出一种装载方案;解:void backtrack int i{用分支限界法解装载问题时,对算法进行了一些改进,下面的程序段给出了改进部分;试说明斜线部分完成什么功能,以及这样做的原因,即采用这样的方式,算法在执行上有什么不同;初始时将;也就是说,重量仅在搜索进入左子树是增加,因此,可以在算法每一次进入左子树时更新bestw 的值;43 2 110030maxint10 - {1} 初始 dist5 dist4 dist3 dist2 u S 迭代7. 最长公共子序列问题:给定2个序列X={x 1,x2,…,xm }和Y={y 1,y2,…,yn },找出X 和Y 的最长公共子序列;由最长公共子序列问题的最优子结构性质建立子问题最优值的递归关系;用cij 记录序列Xi 和Yj 的最长公共子序列的长度;其中, Xi={x1,x2,…,xi};Y j={y1,y2,…,yj};当i=0或j=0时,空序列是Xi 和Yj 的最长公共子序列;故此时Cij=0;其它情况下,由最优子结构性质可建立递归关系如下:00,0[][][1][1]1,0;max{[][1],[1][]},0;i j i ji j c i j c i j i j x y c i j c i j i j x y ⎧==⎪=--+>=⎨⎪-->≠⎩在程序中,bij 记录Cij 的值是由哪一个子问题的解得到的;8.1.2.3.4.5.用回溯法解问题时,应明确定义问题的解空间,问题的解空间至少应包含___________;6.动态规划算法的基本思想是将待求解问题分解成若干____________,先求解___________,然后从这些____________的解得到原问题的解;7.以深度优先方式系统搜索问题解的算法称为_____________;背包问题的回溯算法所需的计算时间为_____________,用动态规划算法所需的计算时间为____________;9.动态规划算法的两个基本要素是___________和___________;10.二分搜索算法是利用_______________实现的算法;二、综合题50分1.写出设计动态规划算法的主要步骤;2.流水作业调度问题的johnson算法的思想;3.若n=4,在机器M1和M2上加工作业i所需的时间分别为ai 和bi,且a 1,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,并画出其解空间树,计算其最优值及最优解;5.设S={X1,X2,···,Xn}是严格递增的有序集,利用二叉树的结点来存储S中的元素,在表示S的二叉搜索树中搜索一个元素X,返回的结果有两种情形,1在二叉搜索树的内结点中找到X=Xi ,其概率为bi;2在二叉搜索树的叶结点中确定X∈Xi ,Xi+1,其概率为ai;在表示S的二叉搜索树T中,设存储元素Xi的结点深度为C i ;叶结点Xi,Xi+1的结点深度为di,则二叉搜索树T的平均路长p为多少假设二叉搜索树Tij={Xi ,Xi+1,···,Xj}最优值为mij,Wij= ai-1+bi+···+bj+aj,则mij1<=i<=j<=n递归关系表达式为什么6.描述0-1背包问题;三、简答题30分1.流水作业调度中,已知有n个作业,机器M1和M2上加工作业i所需的时间分别为ai 和bi,请写出流水作业调度问题的johnson法则中对ai和bi的排序算法;函数名可写为sorts,n2.最优二叉搜索树问题的动态规划算法设函数名binarysearchtree答案:一、填空1.确定性有穷性可行性 0个或多个输入一个或多个输出2.时间复杂性空间复杂性时间复杂度高低3. 该问题具有最优子结构性质4.{BABCD}或{CABCD}或{CADCD}5.一个最优解6.子问题子问题子问题7.回溯法8. on2n omin{nc,2n}9.最优子结构重叠子问题10.动态规划法二、综合题1.①问题具有最优子结构性质;②构造最优值的递归关系表达式;③最优值的算法描述;④构造最优解;2. ①令N1={i|ai<bi},N2={i|ai>=bi};②将N1中作业按ai的非减序排序得到N1’,将N2中作业按bi的非增序排序得到N2’;③N1’中作业接N2’中作业就构成了满足Johnson法则的最优调度;3.步骤为:N1={1,3},N2={2,4};N 1’={1,3}, N2’={4,2};最优值为:384.解空间为{0,0,0,0,1,0,0,0,1,1,0,0,0,1,1,1,0,1, 1,1,0,1,1,1}; 解空间树为:该问题的最优值为:16 最优解为:1,1,0 5.二叉树T 的平均路长P=∑=+ni 1Ci)(1*bi +∑=nj 0dj *aj{mij=0 i>j6.已知一个背包的容量为C,有n 件物品,物品i 的重量为W i ,价值为V i ,求应如何选择装入背包中的物品,使得装入背包中物品的总价值最大; 三、简答题 1.void sortflowjope s,int n {int i,k,j,l;fori=1;i<=n-1;i++ag=0 k++; ifk>n break;ag==0ifsk.a>sj.a k=j; swapsi.index,sk.index; swapsi.tag,sk.tag;} }l=i;<sj.b k=j;swapsi.index,sk.index; ag,sk.tag; }mij=Wij+min{mik+mk+1j} 1<=i<=j<=n,mii-1=0}2.void binarysearchtreeint a,int b,int n,int m,int s,int w{int i,j,k,t,l;fori=1;i<=n+1;i++{wii-1=ai-1;mii-1=0;}forl=0;l<=n-1;l++Init-single-sourceG,s2. S=Φ3. Q=VGQ<> Φdo u=minQS=S∪{u}for each vertex 3do 4四、算法理解题本题10分根据优先队列式分支限界法,求下图中从v1点到v9点的单源最短路径,请画出求得最优解的解空间树;要求中间被舍弃的结点用×标记,获得中间解的结点用单圆圈○框起,最优解用双圆圈◎框起;五、算法理解题本题5分设有n=2k个运动员要进行循环赛,现设计一个满足以下要求的比赛日程表:①每个选手必须与其他n-1名选手比赛各一次;②每个选手一天至多只能赛一次;③循环赛要在最短时间内完成;1如果n=2k,循环赛最少需要进行几天;2当n=23=8时,请画出循环赛日程表;六、算法设计题本题15分分别用贪心算法、动态规划法、回溯法设计0-1背包问题;要求:说明所使用的算法策略;写出算法实现的主要步骤;分析算法的时间;七、算法设计题本题10分通过键盘输入一个高精度的正整数nn的有效位数≤240,去掉其中任意s个数字后,剩下的数字按原左右次序将组成一个新的正整数;编程对给定的n 和s,寻找一种方案,使得剩下的数字组成的新数最小;样例输入178543S=4样例输出13一、填空题本题15分,每小题1分1.规则一系列运算2. 随机存取机RAMRandom Access Machine;随机存取存储程序机RASPRandom Access Stored Program Machine;图灵机Turing Machine3. 算法效率4. 时间、空间、时间复杂度、空间复杂度5.2n6.最好局部最优选择7. 贪心选择最优子结构二、简答题本题25分,每小题5分1、分治法的基本思想是将一个规模为n的问题分解为k个规模较小的子问题,这些子问题互相独立且与原问题相同;对这k个子问题分别求解;如果子问题的规模仍然不够小,则再划分为k个子问题,如此递归的进行下去,直到问题规模足够小,很容易求出其解为止;将求出的小规模的问题的解合并为一个更大规模的问题的解,自底向上逐步求出原来问题的解;2、“最优化原理”用数学化的语言来描述:假设为了解决某一优化问题,需要依次作出n个决策D1,D2,…,Dn,如若这个决策序列是最优的,对于任何一个整数k,1 < k < n,不论前面k个决策是怎样的,以后的最优决策只取决于由前面决策所确定的当前状态,即以后的决策Dk+1,Dk+2,…,Dn也是最优的;3、某个问题的最优解包含着其子问题的最优解;这种性质称为最优子结构性质;4、回溯法的基本思想是在一棵含有问题全部可能解的状态空间树上进行深度优先搜索,解为叶子结点;搜索过程中,每到达一个结点时,则判断该结点为根的子树是否含有问题的解,如果可以确定该子树中不含有问题的解,则放弃对该子树的搜索,退回到上层父结点,继续下一步深度优先搜索过程;在回溯法中,并不是先构造出整棵状态空间树,再进行搜索,而是在搜索过程,逐步构造出状态空间树,即边搜索,边构造;5、PPolynomial问题:也即是多项式复杂程度的问题;NP就是Non-deterministicPolynomial的问题,也即是多项式复杂程度的非确定性问题;NPCNP Complete问题,这种问题只有把解域里面的所有可能都穷举了之后才能得出答案,这样的问题是NP里面最难的问题,这种问题就是NPC问题;三、算法填空本题20分,每小题5分1、n后问题回溯算法1 Mj&&Li+j&&Ri-j+N2 Mj=Li+j=Ri-j+N=1;3 tryi+1,M,L,R,A4 Aij=05 Mj=Li+j=Ri-j+N=0 2、数塔问题; 1c<=r2trc+=tr+1c 3trc+=tr+1c+1 3、Hanoi 算法 1movea,c2Hanoin-1, a, c , b 3Movea,c 4、1pv=NIL 2pv=u3 v ∈adju 4Relaxu,v,w四、算法理解题本题10分五、18天2分;2当n=23=8时,循环赛日程表3分;六、算法设计题本题15分 1贪心算法 Onlogn ➢ 首先计算每种物品单位重量的价值Vi/Wi,然后,依贪心选择策略,将尽可能多的单位重量价值最高的物品装入背包;若将这种物品全部装入背包后,背包内的物品总重量未超过C,则选择单位重量价值次高的物品并尽可能多地装入背包;依此策略一直地进行下去,直到背包装满为止; ➢ 具体算法可描述如下:void Knapsackint n,float M,float v,float w,float x {Sortn,v,w; int i;for i=1;i<=n;i++ xi=0; float c=M;for i=1;i<=n;i++ {if wi>c break; xi=1; c-=wi; }if i<=n xi=c/wi; }2动态规划法 Oncmi,j 是背包容量为j,可选择物品为i,i+1,…,n 时0-1背包问题的最优值;由0-1背包问题的最优子结构性质,可以建立计算mi,j 的递归式如下;void KnapSackint v,int w,int c,int n,int m11 {int jMax=minwn-1,c;for j=0;j<=jMax;j++ /mn,j=0 0=<j<wn/ mnj=0;1 2 3 4 5 6 7 82 1 43 6 5 8 73 4 1 2 7 8 5 64 3 2 1 8 7 6 55 6 7 8 1 2 3 4 6 5 8 7 2 1 4 37 8 5 6 3 4 1 28 7 6 5 4 3 2 1for j=wn;j<=c;j++ /mn,j=vn j>=wn/mnj=vn;for i=n-1;i>1;i--{ int jMax=minwi-1,c;for j=0;j<=jMax;j++ /mi,j=mi+1,j 0=<j<wi/mij=mi+1j;for j=wi;j<=c;j++/mn,j=vn j>=wn/mij=maxmi+1j,mi+1j-wi+vi;}m1c=m2c;ifc>=w1m1c=maxm1c,m2c-w1+v1;}3回溯法 O2ncw:当前重量 cp:当前价值 bestp:当前最优值voidbacktrack int i//回溯法 i初值1{ifi>n //到达叶结点{ bestp=cp; return; }ifcw+wi<=c //搜索左子树{cw+=wi;cp+=pi;backtracki+1;cw-=wi;cp-=pi;}ifBoundi+1>bestp//搜索右子树backtracki+1;}七、算法设计题本题10分为了尽可能地逼近目标,我们选取的贪心策略为:每一步总是选择一个使剩下的数最小的数字删去,即按高位到低位的顺序搜索,若各位数字递增,则删除最后一个数字,否则删除第一个递减区间的首字符;然后回到串首,按上述规则再删除下一个数字;重复以上过程s次,剩下的数字串便是问题的解了;具体算法如下:输入s, n;while s > 0{ i=1; //从串首开始找while i < lengthn && ni<ni+1{i++;}deleten,i,1; //删除字符串n的第i个字符s--;}while lengthn>1&& n1=‘0’deleten,1,1; //删去串首可能产生的无用零输出n;。
算法分析第三次作业答案(卜东波)
算法第三次作业答案第1题:答:令A 、B 为已给两个数据库的数据集,其中A(i)、B(i)为A 、B 中第i 个最小的值,给出求中值算法如下:Median(n,a,b)If n=1 then return min(A(a+k),B(b+k))12k n ⎡⎤=⎢⎥⎢⎥Query A(a+k)和B(b+k)If A(a+k)<B(b+k)return Median(k,a+k,b)Else return Median(k,a,b+k)要找出A 、B 中值调用Median(n,0,0),令该算法复杂度为Q(n),则: Q(n) ≤ Q(n/2)+2推出Q(n)= O(log n)第2题:答:令序列a 1,a 2,…,a n 排好序后为b 1,b 2,…,b n ,要求重要逆序对的数目,设计算法如下:1) Sort-and-Count (L)If n=1 then 没有逆序对Else k=n/2,将L 分成两个自序列A 和B;(N 1,A) = Sort-and-Count(A);(N 2,B) = Sort-and-Count(B);(N 3,L) = Merge-and-Count(A,B);return N= N 1+ N 2+ N 3和排好序的表L2)Merge-and-Count(A,l,m,r)令A[l…m]为L,A[m+1…r]为Ri = 1,j = 1, InversionCount =0for k = m to r doif L[i] > R[j] thenA[k] = L[i]i++;if L[i] > 3R[j] thenInversionCount = InversionCount + j - kelseA[k] = R[j]j++end for显然Merge-and-Count (A,B)的算法复杂度为cn 令Sort-and-Count (L)的算法复杂度为T(n),则:T(n)≤2T(n/2)+cn可推出T(n)=O(n log n)第3题:(1)算法如下:Find-Local-Min(T)If T has childrenLet L and R be T’s childre nProbe the values of XL , XR, XT;If XL < XTReturn Find-Local-Min(L)Else If XR < XTReturn Find-Local-Min(R)ElseReturn T(2)复杂度分析:因n=2d-1,则完全二叉树的深度可表示为log(n+1),上述算法是沿着树的节点逐层递归的,即算法的最深递归层次为树深(log(n+1)),每层节的要进行三次试探,故总的试探次数为3* log(n+1),即算法的复杂度为O(3* log(n+1))=O(log(n))。
算法分析作业--第5章
按l1≥ l2 ≥ l3 ≥ l4 ≥ l5次序得到 A={10,6,5},B={9,8},最大值是21.
若令A={10,9},B={8,6,5},最大值是19. 这种方式更优。
故命题得证。
① 当n=7,(p1 ,…, p7)=(3,5,20,18,1,6,30) 和(d1,…,d7)=(1,3,4,3,2,1,2)时,算法5.4所生 成的解是什么?
将以上数据情况的背包问题记为I。设FG(I)是 物品按pi的非增次序输入时由GREEDYKNAPSACK所生成的解,FO(I)是一个最优解。 问FO(I)/ FG(I)是多少?
当物品按wi的非降次序输入时,重复②的讨 论。
i 1234 5
p 10 5 15 7 6
w2 3 5 7 1
p/w 5 5/3 3 1 6
③ 证明按fi/li的非增次序来存放程序时ERT取最 小值。
I:
(l1,l2)=(10,12) (f1,f2)=(0.4,0.6)
ERT(I)=10*0.4+(10+12)*0.6=17.2 ERT(I’)=12*0.6+(10+12)*0.4=16
I:
(l1,l2)=(2,1) (f1,f2)=(0.6,0.4)
x 1 2/3 1
1
n=7,m=15
根据贪心(x5,x1,x6,x3,x7,x2,x4)= (1,1,1,1,1,2/3,0)即
(x1,x2,x3,x4,x5,x6,x7)=(1,2/3,1,0,1,1,1 ) FO(I)=166/3。
67 18 3 41 9/2 3 11
i 1234 5
2014年9月份考试算法设计分析第二次作业
2014年9月份考试算法设计分析第二次作业一、单项选择题(本大题共50分,共 20 小题,每小题 2.5 分)1. 优先队列的分支限界法将活结点表组织成一个优先队列,并按优先队列中规定的结点优先级选取优先级最高的下一个结点成为当前扩展结点。
优先队列中规定的结点优先级常用一个与该结点相关的数值p来表示。
结点优先级的高低与p值大小相关,根据问题的不同情况,采用()来描述优先队列。
A. 先进先出队列B. 后进先出的栈C. 最大堆或最小堆D. 随机序列2. 阶乘函数用递归定义 Public static int factorial(int n) { if(n==0) return 1; return () ; }A. n*factorial(n)B. n*factorial(n-1)C. n*factorial(n-2)D. n*factorial(n+1)3. 上界函数bound计算结点所相应价值的上界。
private static double bound (int i) { //计算结点所相应价值的上界 double cleft = c-cw; //剩余容量 double b = cp; //价值上界 // 以物品单位重量价值递减序装填剩余容量 while (i<=n && w[i]<=cleft) { cleft -= w[i]; b += p[i]; i++; } //装填剩余容量装满背包 if (i<=n) () ; return b; }A. b += p[i]B. b = p[i]/w[i]*cleftC. b += p[i]/w[i]*cleftD. b = p[i]4. 在动态规划算法中,问题的最优子结构性质使我们能够以—()的方式递归地从子问题的最优解逐步构造出整个问题的最优解。
A. 自左向右B. 自右向左C. 自上向下D. 自底向上5. ()能够求得问题的解,但却无法有效地判定解的正确性A. 数值概率算法B. 蒙特卡罗算法C. 拉斯维加斯算法D. 舍伍得算法6. 拉斯维加斯算法的一个显著特征是它所做的随机性决策有可能导致算法找不到所需的解。
算法设计分析期末考试试卷
2011 年 12 月考试算法设计分析第一次作业一、单项选择题(本大题共 30 分,共 15 小题,每小题 2 分)1. 算法分析的两个主要方面是()。
A. 空间复杂度和时间复杂度B. 正确性和简单性C. 可读性和文档性D. 数据复杂度和程序复杂度2. 计算机算法指的是()。
A. 计算方法B. 排序方法C. 解决问题的方法和过程D. 调度方法3. 多阶段决策问题就是要在可以选择的那些策略中间选取一个()策略使在预定的标准下达到最好的效果。
A. 最优B. 最差C. 平衡D. 任意4. 根据排序元素所在位置的不同,排序分()。
A. 内排序和外排序B. 首排序和尾排序C. 顺序排序和逆序排序D. 堆排序和栈排序5. 算法必须具备输入、输出和()等 5 个特性。
A. 可执行性、可移植性和可扩充性B. 可行性、确定性和有穷性C. 确定性、有穷性和稳定性D. 易读性、稳定性和安全性6. 与分治法不同的是,适合于用动态规划求解的问题()A. 经分解得到子问题往往不是互相独立的B. 经分解得到子问题往往是互相独立的C. 经分解得到子问题往往是互相交叉的D. 经分解得到子问题往往是任意的7. 二分搜索算法的基本思想是将 n 个元素分成个数大致相同的两半,取 an/2与 x 进行比较:如果(),则只要在数组 a 的左半部继续搜索 x。
A. x<an/2B. xan/2C. xan/2D. xan/28. 活动安排问题就是在所给的活动集合中,选出()的相容活子集。
A. 最小B. 任意C. 最大D. 一个9. 在对问题的解空间树进行搜索的方法中一个活结点最多有一次机会成为活结点的是()A. 回溯法B. 分支限界法C. 回溯法和分支限界法D. 回溯法求解子集树问题10. 适用动态规划的问题必须满足()A. 最优化原理B. 无前效性C. 最优化原理和后效性D. 最优化原理和无后效性11. 算法的每种运算必须要有确切的定义不能有二义性以下符合算法确定性运算的是()A. 5/0B. 将 6 或 7 与 x 相加C. 未赋值变量参与运算D. fnfn-12F110n 为自然数12.直接或间接的调用自身的算法称为()。
北航研究生 算法设计与分析大作业一
一、请安排投资计划,使总的利润最大。
写出你所设的状态变量、决策变量、状态转移方程与递推关系式,和手工求解的详细步 骤及结果。
解:设k 表示前k 个项目;状态变量为k x ,表示能投资到前k 个项目中的金额为k x ;决策变量为}0|{ , k k k k k k x u u D D u ≤≤=∈,表示将k u 的金额投入到第k 个项目中;状态转移方程为k k k u x x +=+1,表示能投资到前k+1个项目的金额等于能投资到前k 个项目的金额,加上投资到第k+1个项目的金额;指标函数为)(P k k x ,表示将k x 投入到前k 个项目中所能获得的最大利润;设)(A k k x 为向第k 个项目投资k x 金额所能获得的利润。
则递推关系式为:⎪⎩⎪⎨⎧+-====-∈)}(A )({P max )(P 00 , 0)(P 1k k k k k D u kk k k k u u x x x k x k k 或① 当k=0或0=k x 时,总利润一定为0③ 当k=2时,8万元只投资第一、第二个项目,有若将0万投资第一个项目,8万投资第二个项目,利润为0+75=75若将1万投资第一个项目,7万投资第二个项目,利润为5+74=79 若将2万投资第一个项目,6万投资第二个项目,利润为15+73=88 若将3万投资第一个项目,5万投资第二个项目,利润为40+70=110 若将4万投资第一个项目,4万投资第二个项目,利润为80+60=140 若将5万投资第一个项目,3万投资第二个项目,利润为90+40=130 若将6万投资第一个项目,2万投资第二个项目,利润为95+15=110 若将7万投资第一个项目,1万投资第二个项目,利润为98+5=103 若将8万投资第一个项目,0万投资第二个项目,利润为100+0=100此时将4万元投资第一个项目,将剩余4万元投资第二个项目可获得最大利润140万元 同时计算出将2x 万元投资到前两个项目的获利情况如下表:④ 当k=3时,8万元同时投资第一、第二、第三个项目,有 若将0万投资前两个项目,8万投资第三个项目,利润为0+53=53若将1万投资前两个项目,7万投资第三个项目,利润为5+52=57若将2万投资前两个项目,6万投资第三个项目,利润为15+51=66若将3万投资前两个项目,5万投资第三个项目,利润为40+50=90若将4万投资前两个项目,4万投资第三个项目,利润为80+45=125若将5万投资前两个项目,3万投资第三个项目,利润为90+40=130若将6万投资前两个项目,2万投资第三个项目,利润为95+26=121若将7万投资前两个项目,1万投资第三个项目,利润为120+4=124若将8万投资前两个项目,0万投资第三个项目,利润为140+0=140此时将4万元投资第一个项目,将剩余4万元投资第二个项目,第三个项目投资0元,可获得最大利润140万元。
算法分析期末考试集答案(套)
算法分析期末考试集答案(套)《算法分析与设计》⼀、解答题 1. 机器调度问题。
问题描述:现在有n 件任务和⽆限多台的机器,任务可以在机器上得到处理。
每件任务的开始时间为s i ,完成时间为f i ,s i问题实例:若任务占⽤的时间范围是{[1,4],[2,5],[4,5],[2,6],[4,7]},则按时完成所有任务最少需要⼏台机器?(提⽰:使⽤贪⼼算法)画出⼯作在对应的机器上的分配情况。
2. 已知⾮齐次递归⽅程:f (n)bf (n 1)g(n)f (0)c =-+??=? ,其中,b 、c 是常数,g(n)是n 的某⼀个函数。
则f(n)的⾮递归表达式为:nnn i i 1f (n)cb b g(i)-==+∑。
现有Hanoi 塔问题的递归⽅程为:h(n)2h(n 1)1h(1)1=-+??=? ,求h(n)的⾮递归表达式。
解:利⽤给出的关系式,此时有:b=2, c=1, g(n)=1, 从n 递推到1,有:n 1n 1n 1i i 1n 1n 22n h(n)cbb g(i)22 (22121)----=--=+=+++++=-∑3. 单源最短路径的求解。
问题的描述:给定带权有向图(如下图所⽰)G =(V,E),其中每条边的权是⾮负实数。
另外,还给定V 中的⼀个顶点,称为源。
现在要计算从源到所有其它各顶点的最短路长度。
这⾥路的长度是指路上各边权之和。
这个问题通常称为单源最短路径问题。
解法:现采⽤Dijkstra 算法计算从源顶点1到其它顶点间最短路径。
请将此过程填⼊下表中。
4. 请写出⽤回溯法解装载问题的函数。
装载问题:有⼀批共n 个集装箱要装上2艘载重量分别为c1和c2的轮船,其中集装箱i 的重量为wi ,且121nii w c c=≤+∑。
装载问题要求确定是否有⼀个合理的装载⽅案可将这n 个集装箱装上这2艘轮船。
如果有,找出⼀种装载⽅案。
解:void backtrack (int i){// 搜索第i 层结点if (i > n) // 到达叶结点更新最优解bestx,bestw;return; r -= w[i];if (cw + w[i] <= c) {// 搜索左⼦树43 2 1 100 30 maxint10 - {1} 初始 dist[5] dist[4] dist[3] dist[2] u S 迭代x[i] = 1;cw += w[i];backtrack(i + 1);cw -= w[i]; }if (cw + r > bestw) {x[i] = 0; // 搜索右⼦树backtrack(i + 1); }r += w[i];}5. ⽤分⽀限界法解装载问题时,对算法进⾏了⼀些改进,下⾯的程序段给出了改进部分;试说明斜线部分完成什么功能,以及这样做的原因,即采⽤这样的⽅式,算法在执⾏上有什么不同。
中科大算法设计与分析分布式算法部分作业部分答案
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!
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
算法分析练习题(一)一、选择题1、二分搜索算法是利用( A )实现的算法。
A、分治策略B、动态规划法C、贪心法D、回溯法2、下列不是动态规划算法基本步骤的是( A )。
A、找出最优解的性质B、构造最优解C、算出最优解D、定义最优解3.下列算法中通常以自底向上的方式求解最优解的是( B )。
A、备忘录法B、动态规划法C、贪心法D、回溯法4、衡量一个算法好坏的标准是(C )。
A 运行速度快B 占用空间少C 时间复杂度低D 代码短5、以下不可以使用分治法求解的是(D )。
A 棋盘覆盖问题B 选择问题C 归并排序D 0/1背包问题6. 实现循环赛日程表利用的算法是( A )。
A、分治策略B、动态规划法C、贪心法D、回溯法7.备忘录方法是那种算法的变形。
( B )A、分治法B、动态规划法C、贪心法D、回溯法8.最长公共子序列算法利用的算法是( B )。
A、分支界限法B、动态规划法C、贪心法D、回溯法9.实现棋盘覆盖算法利用的算法是( A )。
A、分治法B、动态规划法C、贪心法D、回溯法10. 矩阵连乘问题的算法可由(B)设计实现。
A、分支界限算法B、动态规划算法C、贪心算法D、回溯算法11、Strassen矩阵乘法是利用( A )实现的算法。
A、分治策略B、动态规划法C、贪心法D、回溯法12、使用分治法求解不需要满足的条件是(A )。
A 子问题必须是一样的B 子问题不能够重复C 子问题的解可以合并D 原问题和子问题使用相同的方法解13、下列算法中不能解决0/1背包问题的是(A )A 贪心法B 动态规划C 回溯法D 分支限界法14.实现合并排序利用的算法是( A )。
A、分治策略B、动态规划法C、贪心法D、回溯法15.下列是动态规划算法基本要素的是( D )。
A、定义最优解B、构造最优解C、算出最优解D、子问题重叠性质16.下列算法中通常以自底向下的方式求解最优解的是( B )。
A、分治法B、动态规划法C、贪心法D、回溯法17、合并排序算法是利用( A )实现的算法。
A、分治策略B、动态规划法C、贪心法D、回溯法18.实现大整数的乘法是利用的算法( C )。
A、贪心法B、动态规划法C、分治策略D、回溯法19. 实现最大子段和利用的算法是( B )。
A、分治策略B、动态规划法C、贪心法D、回溯法20. 一个问题可用动态规划算法或贪心算法求解的关键特征是问题的( B )。
A、重叠子问题B、最优子结构性质C、贪心选择性质D、定义最优解21. 实现最长公共子序列利用的算法是( B )。
A、分治策略B、动态规划法C、贪心法D、回溯法二、填空题1.算法的复杂性有时间复杂性和空间复杂性之分。
2、程序是算法用某种程序设计语言的具体实现。
3、算法的“确定性”指的是组成算法的每条指令是清晰的,无歧义的。
4.矩阵连乘问题的算法可由动态规划设计实现。
5、算法是指解决问题的一种方法或一个过程。
6、从分治法的一般设计模式可以看出,用它设计出的程序一般是递归算法。
7、矩阵连乘问题的算法可由动态规划设计实现。
8. 动态规划算法的基本思想是将待求解问题分解成若干子问题,先求解子问题,然后从这些子问题的解得到原问题的解。
9.算法是由若干条指令组成的有穷序列,且要满足输入、输出、确定性和有限性四条性质。
10、大整数乘积算法是用分治法来设计的。
11.快速排序算法是基于分治策略的一种排序算法。
12.动态规划算法的两个基本要素是. 性质和性质。
13.任何可用计算机求解的问题所需的时间都与其规模有关。
14.快速排序算法的性能取决于划分的对称性。
15、出自于“平衡子问题”的思想,通常分治法在分割原问题,形成若干子问题时,这些子问题的规模都大致相同。
16、使用二分搜索算法在n 个有序元素表中搜索一个特定元素,在最佳情况下,搜索的时间复杂性为O (),在最坏情况下,搜索的时间复杂性为O ( logn )。
17、已知一个分治算法耗费的计算时间T(n),T(n)满足如下递归方程:⎩⎨⎧≥+<=22221n n O n T n O n T )()/()()( 解得此递归方可得T(n)= O ( nlogn )。
18、动态规划算法有一个变形方法 备忘录方法 。
这种方法不同于动态规划算法“自底向上”的填充方向,而是“自顶向下”的递归方向,为每个解过的子问题建立了备忘录以备需要时查看,同样也可避免相同子问题的重复求解。
19、递归的二分查找算法在divide 阶段所花的时间是 O(1) ,conquer 阶段所花的时间是 T(n/2) ,算法的时间复杂度是 O( log n) 。
20、用动态规划算法计算矩阵连乘问题的最优值所花的时间是 O(n3) , 子问题空间大小是 O(n2) 。
21、一个算法的优劣可以用(时间复杂度)与(空间复杂度)与来衡量。
22、直接或间接地调用自身的算法称为(递归算法)。
23、q 记号在算法复杂性的表示法中表示(渐进确界或紧致界)。
24、在分治法中,使子问题规模大致相等的做法是出自一种(平衡子问题)的思想。
25、动态规划算法适用于解(具有某种最优性质)问题。
26、最优子结构性质的含义是(问题的最优解包含其子问题的最优解)。
27、按照符号O的定义O(f)+O(g)等于O(max{f(n),g(n)})。
28、二分搜索技术是运用(分治)策略的典型例子。
29、动态规划算法中,通常不同子问题的个数随问题规模呈(多项式)级增长。
30、(最优子结构性质)和(子问题重叠性质)是采用动态规划算法的两个基本要素。
三、算法填空1.最大子段和: 动态规划算法int MaxSum(int n, int a[]){int sum=0, b=0; //sum存储当前最大的b[j], b存储b[j] for(int j=1; j<=n; j++) {if(b>0) b+=a[j] ;else b=a[i] ; //一旦某个区段和为负,则从下一个位置累和if (b>sum) sum=b ;}return sum;}2.快速排序template<class Type>void QuickSort (Type a[], int p, int r){if (p<r) {int q=Partition(a,p,r); QuickSort (a ,p ,q-1) ; //对左半段排序 QuickSort(a,q+1,r) ; //对右半段排序 }}四、简答题1、写出下列复杂性函数的偏序关系(即按照渐进阶从低到高排序):2323log !log 10n n n n n n n n n2、将所给定序列a[1:n]分为长度相等的两段a[1:n/2]和a[n/2+1:n],分别求出这两段的最大子段和,则a[1:n]的最大子段和有哪三种情形?3、请说明动态规划方法为什么需要最优子结构性质。
最优子结构性质是指大问题的最优解包含子问题的最优解。
动态规划方法是自底向上计算各个子问题的最优解,即先计算子问题的最优解,然后再利用子问题的最优解构造大问题的最优解,因此需要最优子结构4、设计动态规划算法的主要步骤是怎么的?请简述。
参考解答:(1)找出最优解的性质,并刻划其结构特征。
(6分) (2)递归地定义最优值。
(3)以自底向上的方式计算出最优值。
(4)根据计算最优值时得到的信息,构造最优解。
5、分治法所能解决的问题一般具有哪几个特征?请简述。
参考解答:(1)该问题的规模缩小到一定的程度就可以容易地解决;(6分) (2)该问题可以分解为若干个规模较小的相同问题,即该问题具有最优子结构性质;(3)利用该问题分解出的子问题的解可以合并为该问题的解;(4)原问题所分解出的各个子问题是相互独立的,即子问题之间不包含公共的子问题。
6、算法的要特性是什么?参考解答:确定性、可实现性、输入、输出、有穷性7、算法分析的目的是什么?参考解答:分析算法占用计算机资源的情况,对算法做出比较和评价,设计出额更好的算法。
8、算法的时间复杂性与问题的什么因素相关?参考解答:算法的时间复杂性与问题的规模相关,是问题大小n的函数。
9、算法的渐进时间复杂性的含义?参考解答:当问题的规模n趋向无穷大时,影响算法效率的重要因素是T(n)的数量级,而其他因素仅是使时间复杂度相差常数倍,因此可以用T(n)的数量级(阶)评价算法。
时间复杂度T(n)的数量级(阶)称为渐进时间复杂性。
10简述渐进时间复杂性上界的定义。
参考解答:T(n)是某算法的时间复杂性函数,f(n)是一简单函数,存在正整数No和C,n〉No,有T(n)<f(n),这种关系记作T(n)=O(f(n))。
11快速排序算法最坏情况下需要多少次比较运算?参考解答:最坏情况下快速排序退化成冒泡排序,需要比较n2次。
12阐述归并排序的分治思路。
参考解答:讲数组一分为二,分别对每个集合单独排序,然后将已排序的两个序列归并成一个含n个元素的分好类的序列。
如果分割后子问题还很大,则继续分治,直到一个元素。
13快速排序的基本思想是什么。
参考解答:快速排序的基本思想是在待排序的N个记录中任意取一个记录,把该记录放在最终位置后,数据序列被此记录分成两部分。
所有关键字比该记录关键字小的放在前一部分,所有比它大的放置在后一部分,并把该记录排在这两部分的中间,这个过程称作一次快速排序。
之后重复上述过程,直到每一部分内只有一个记录为止。
14分治法的基本思想是什么?将一个规模为N的问题分解为K个规模较小的子问题,这些子问题相互独立且与原问题性质相同。
求出子问题的解,就可得到原问题的解。
即一种分目标完成程序算法,简单问题可用二分法完成。
15设计动态规划算法的主要步骤?参考解答:(1)找出最优解的性质,并刻划其结构特征。
(6分) (2)递归地定义最优值。
(3)以自底向上的方式计算出最优值。
(4)根据计算最优值时得到的信息,构造最优解。
16分治法与动态规划法的异同共同点:将待求解的问题分解成若干子问题,先求解子问题,然后再从这些子问题的解得到原问题的解。
不同点:1、适合于用动态规划法求解的问题,分解得到的各子问题往往不是相互独立的;而分治法中子问题相互独立。
2、动态规划法用表保存已求解过的子问题的解,再次碰到同样的子问题时不必重新求解,而只需查询答案,故可获得多项式级时间复杂度,效率较高;而分治法中对于每次出现的子问题均求解,导致同样的子问题被反复求解,故产生指数增长的时间复杂度,效率较低。
17分治法所能解决的问题一般具有的几个特征?参考解答:(1)该问题的规模缩小到一定的程度就可以容易地解决;(6分) (2)该问题可以分解为若干个规模较小的相同问题,即该问题具有最优子结构性质;(3) 利用该问题分解出的子问题的解可以合并为该问题的解;(4)原问题所分解出的各个子问题是相互独立的,即子问题之间不包含公共的子问题。