- 1、本文档共5页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
/=! 0
/=! 0
一、 填空题(20分)
一个算法就是一个有穷规则的集合,其中之规则规定了解决某一特殊类型问题的一系列运算, 此外,算法还应具有以下五个重要特性:确定性有穷性可行性0个或多个输入一个或多 个输出
算法的复杂性有时间复杂性空间复杂性之分,衡量一个算法好坏的标准是时间复杂度高低
某一问题可用动态规划算法求解的显着特征是该问题具有最优子结构性质
若序列X={B, C, A, D, B, C, D), Y=(A, C, B, A, B, D, C, D),请给出序列X和Y的一个最长公共子序列 (BABCD)或(CABCD}或{CADCD }
用回溯法解问题时,应明确定义问题的解空间,问题的解空间至少应包含一个(最优)解
动态规划算法的基本思想是将待求解问题分解成若干子问题,先求解子问题,然后从这些 子问题的解得到原问题的解。
以深度优先方式系统搜索问题解的算法称为回溯法
背包问题的回溯算法所需的计算时间为o(n*2。,用动态规划算法所需的计算时间为o(min{nc,2.})
动态规划算法的两个基本要素是最优子结构_和重叠子问题
二分搜索算法是利用动态规划法实现的算法。
二、 综合题(50分)
写出设计动态规划算法的主要步骤。
①问题具有最优子结构性质;②构造最优值的递归关系表达式; ③最优值的算法描述;④构造
最优解;
流水作业调度问题的johnson算法的思想。
①令N=(i|ab}, N = (i|a=b};②将N中作业按a的非减序排序得到N ,将N中作业按b 的非痼序排悖宿到N,; (§)N;中作业撲N,中作业就构成了满足Johns烏法则的麴优调度。
若n=4,在机器Ml而M2上力5工作业i所緖的时间分别为a和b ,且
(a,a,a,a) = (4, 5,12, 10), (b , b , b , b ) = (8,2,15,9)求4个作业曲最优调度方案,并计算最优 值:2 3 4
步骤为:N1=(1, 3), N2=(2, 4);
N =(1, 3}, N,={4, 2);
員:优值为:38 2
使用回溯法解0/1背包问题:n=3, 09, V={6, 10,3}, W={3, 4, 4},其解空间有长度为3的0-1 向量组成,要求用一棵完全二叉树表示其解空间(从根出发,左1右0),并画出其解空间树,计 算其最优值及最优解。
解空间为{(0, 0,0), (0,1,0), (0,0,1),(1, 0, 0), (0, 1,1), (1,0, 1),
(1,1,0), (1, 1, l)}o
解空间树为:
该问题的最优值为:16 最优解为:(1, 1, 0)
设S= {X, X,???,X}是严格递增的有序集,利用二叉树的结点来存储S中的元素,在表 示S的二叉披素树中搜索一不元素X,返回的结果有两种情形,(1)在二叉搜索树的内结点中找 到X=X,其概率为b。(2)在二叉搜索树的叶结点中确定xc (X, X ),其概率为a。在表示 S的二夂搜索树T中;设存储元素X的结点深度为C:叶结点(X; X )的结点深度为d,则二叉 搜索树T的平均路长p为多少假设三叉搜索树T[i][j]= {X, X :?:?,X }最优值为 m[i][j], W[i][j]= a +b + ???+b+a,则 m[i] [j] (K=i=j=n)递归关系表达式为什么
il i j j
.二叉树 T 的平均路长 P=£ bi*(l + Ci) + 2: aj*dj
void sort(flowjope s[],int n) {int i, k, j, 1;for(i=l;i=n-l;i++)ag!=0) k++; if(kn) break;ag==0)if(s[k].as[j].a) k=j; swap(s[i]. index, s[k]. index); swap(s[i]. tag, s[k]. tag);do u=min(Q)S=SU {u)
void sort(flowjope s[],int n) {
int i, k, j, 1;
for(i=l;i=n-l;i++)ag!=0) k++; if(kn) break;ag==0)
if(s[k].as[j].a) k=j; swap(s[i]. index, s[k]. index); swap(s[i]. tag, s[k]. tag);
do u=min(Q)
S=SU {u)
m[i] [j]=W[i] [j]+min{m[i] [k]+m[k+l] [j]} (K=i=j=n,m[i] [i-l]=O)
m[i] [j]=0 (ij)
描述OT背包问题。
己知一个背包的容量为c,有n件物品,物品i的重量为W,价值为V,求应如何选择装入背包 中的物品,使得装入背包中物品
文档评论(0)