《算法分析与设计》期末考试复习题纲(完整版)

合集下载

《算法分析与设计》期末测验复习题纲(完整版)

《算法分析与设计》期末测验复习题纲(完整版)

《算法分析与设计》期末测验复习题纲(完整版)————————————————————————————————作者:————————————————————————————————日期:《算法分析与设计》期末复习题一、选择题1.算法必须具备输入、输出和( D )等4个特性。

A.可行性和安全性 B.确定性和易读性C.有穷性和安全性 D.有穷性和确定性2.算法分析中,记号O表示( B ),记号Ω表示( A )A.渐进下界B.渐进上界C.非紧上界D.紧渐进界3.假设某算法在输入规模为n时的计算时间为T(n)=3*2^n。

在某台计算机上实现并完成概算法的时间为t秒。

现有另一台计算机,其运行速度为第一台的64倍,那么在这台新机器上用同一算法在t秒内能解输入规模为多大的问题?( B )解题方法:3*2^n*64=3*2^xA.n+8 B.n+6C.n+7 D.n+54.设问题规模为N时,某递归算法的时间复杂度记为T(N),已知T(1)=1,T(N)=2T(N/2)+N/2,用O表示的时间复杂度为( C )。

A.O(logN) B.O(N)C.O(NlogN) D.O(N²logN)5.直接或间接调用自身的算法称为( B )。

A.贪心算法 B.递归算法C.迭代算法 D.回溯法6.Fibonacci数列中,第4个和第11个数分别是( D )。

A.5,89 B.3,89C.5,144 D.3,1447.在有8个顶点的凸多边形的三角剖分中,恰有( B )。

A.6条弦和7个三角形 B.5条弦和6个三角形C.6条弦和6个三角形 D.5条弦和5个三角形8.一个问题可用动态规划算法或贪心算法求解的关键特征是问题的( B )。

A.重叠子问题 B.最优子结构性质C.贪心选择性质 D.定义最优解9.下列哪个问题不用贪心法求解( C )。

A.哈夫曼编码问题 B.单源最短路径问题C.最大团问题 D.最小生成树问题10.下列算法中通常以自底向上的方式求解最优解的是( B )。

算法设计与分析历年期末试题整理_含答案_

算法设计与分析历年期末试题整理_含答案_

《算法设计与分析》历年期末试题整理(含答案)(1)用计算机求解问题的步骤:1、问题分析2、数学模型建立3、算法设计与选择4、算法指标5、算法分析6、算法实现 7、程序调试 8、结果整理文档编制(2)算法定义:算法是指在解决问题时,按照某种机械步骤一定可以得到问题结果的处理过程(3)算法的三要素1、操作2、控制结构3、数据结构算法具有以下5 个属性:有穷性:一个算法必须总是在执行有穷步之后结束,且每一步都在有穷时间内完成。

确定性:算法中每一条指令必须有确切的含义。

不存在二义性。

只有一个入口和一个出口可行性:一个算法是可行的就是算法描述的操作是可以通过已经实现的基本运算执行有限次来实现的。

输入:一个算法有零个或多个输入,这些输入取自于某个特定对象的集合。

输出:一个算法有一个或多个输出,这些输出同输入有着某些特定关系的量。

算法设计的质量指标:正确性:算法应满足具体问题的需求;可读性:算法应该好读,以有利于读者对程序的理解;健壮性:算法应具有容错处理,当输入为非法数据时,算法应对其作出反应,而不是产生莫名其妙的输出结果。

效率与存储量需求:效率指的是算法执行的时间;存储量需求指算法执行过程中所需要的最大存储空间。

一般这两者与问题的规模有关。

经常采用的算法主要有迭代法、分而治之法、贪婪法、动态规划法、回溯法、分支限界法迭代法也称“辗转法”,是一种不断用变量的旧值递推出新值的解决问题的方法。

利用迭代算法解决问题,需要做好以下三个方面的工作:一、确定迭代模型。

在可以用迭代算法解决的问题中,至少存在一个直接或间接地不断由旧值递推出新值的变量,这个变量就是迭代变量。

二、建立迭代关系式。

所谓迭代关系式,指如何从变量的前一个值推出其下一个值的公式(或关系)。

迭代关系式的建立是解决迭代问题的关键,通常可以使用递推或倒推的方法来完成。

三、对迭代过程进行控制。

在什么时候结束迭代过程?这是编写迭代程序必须考虑的问题。

不能让迭代过程无休止地重复执行下去。

《算法分析与设计》期末考试复习题纲(完整版)

《算法分析与设计》期末考试复习题纲(完整版)

《算法分析与设计》期末复习题一、选择题1.算法必须具备输入、输出和( D )等4个特性。

A.可行性和安全性 B.确定性和易读性C.有穷性和安全性 D.有穷性和确定性2.算法分析中,记号O表示( B ),记号Ω表示( A )A.渐进下界B.渐进上界C.非紧上界D.紧渐进界3.假设某算法在输入规模为n时的计算时间为T(n)=3*2^n。

在某台计算机上实现并完成概算法的时间为t秒。

现有另一台计算机,其运行速度为第一台的64倍,那么在这台新机器上用同一算法在t秒内能解输入规模为多大的问题?( B )解题方法:3*2^n*64=3*2^xA.n+8 B.n+6C.n+7 D.n+54.设问题规模为N时,某递归算法的时间复杂度记为T(N),已知T(1)=1,T(N)=2T(N/2)+N/2,用O表示的时间复杂度为( C )。

A.O(logN) B.O(N)C.O(NlogN) D.O(N²logN)5.直接或间接调用自身的算法称为( B )。

A.贪心算法 B.递归算法C.迭代算法 D.回溯法6.Fibonacci数列中,第4个和第11个数分别是( D )。

A.5,89 B.3,89C.5,144 D.3,1447.在有8个顶点的凸多边形的三角剖分中,恰有( B )。

A.6条弦和7个三角形 B.5条弦和6个三角形C.6条弦和6个三角形 D.5条弦和5个三角形8.一个问题可用动态规划算法或贪心算法求解的关键特征是问题的( B )。

A.重叠子问题 B.最优子结构性质C.贪心选择性质 D.定义最优解9.下列哪个问题不用贪心法求解( C )。

A.哈夫曼编码问题 B.单源最短路径问题C.最大团问题 D.最小生成树问题10.下列算法中通常以自底向上的方式求解最优解的是( B )。

A.备忘录法 B.动态规划法C.贪心法 D.回溯法11.下列算法中不能解决0/1背包问题的是( A )。

A.贪心法 B.动态规划C.回溯法 D.分支限界法12.下列哪个问题可以用贪心算法求解( D )。

《算法设计与分析》考试题目及答案(DOC)

《算法设计与分析》考试题目及答案(DOC)

Typew cleft = c - cw; // 剩余容量
Typep b = cp;
// 结点的上界
// 以物品单位重量价值递减序装入物品
while (i <= n && w[i] <= cleft) {
cleft -= w[i];
b += p[i];
i++;
} // 装满背包
if (i <= n) (b += p[i]/w[i] * cleft);
cg(n) }; B. O(g(n)) = { f(n) | 存在正常数 c 和 n0 使得对所有 n n0 有:0 cg(n)
f(n) };
C. (g(n)) = { f(n) | 对于任何正常数 c>0,存在正数和 n0 >0 使得对所有 n n0 有:0 f(n)<cg(n) };
f(n)个单位时间。用 T(n)表示该分治法解规模为|P|=n 的问题所需的计算时
间,则有:T (n)

kT (n
O(1) / m)
f
(n)
n 1 n 1
通过迭代法求得
T(n)的显式表达式为:T (n)

nlogm k

logm n1
C.最优子结构性质与重叠子问题性质 D. 预排序与递归调用
7. 回溯法在问题的解空间树中,按(D)策略,从根结点出发搜索解空间树。 A. 广度优先 B. 活结点优先 C.扩展结点优先 D. 深度优先
8. 分支限界法在问题的解空间树中,按(A)策略,从根结点出发搜索解空间 树。
A. 广度优先 B. 活结点优先 C.扩展结点优先 D. 深度优先

(完整版)算法设计与分析期末考试卷及答案a

(完整版)算法设计与分析期末考试卷及答案a
_
flag=false
_
_
end if
_
__
end for
A[i] A[1]
w =i
return w, A end SPLIT
二.计算题和简答题(每小题
1.用O、、 表示函数f与g之间阶的关系,并分别指出下列函数中阶最低和最高 的函数:
(1)f (n)=100g(n)=100n
(2)f(n)=6n+nlog ng(n)=3n
算法EX1
输入:正整数n,n=2k。输出:⋯
ex1(n)
end EX1过程ex1(n) if n=1 then pro1(n)
else

名姓
级年
_
_系
_院学
pro2(n)
ex1(n/2) end if
return
end ex1
3.用Floyd算法求下图每一对顶点之间的最短路径长度, 计算矩阵D0,D1,D2和D3,其中Dk[i, j]表示从顶点i到顶点j的不经过编号大于
i=find ( (1) )
if i>0 then output i
else output“no solution”
end SEARCH
过程find (low, high)
//求A[low..high]中使得A[i]=i的一个下标并返回,若不存在,
//则返回0。
if (2) then return 0
生专
_

马的周游问题:给出一个nxn棋盘,已知一个中国象棋马在
_
_
棋盘上的某个起点位置(x0, y0),求一条访问每个棋盘格点恰好
_
_
一次,最后回到起点的周游路线。 (设马走日字。)

《算法分析与设计》期末复习题[1]-推荐下载

《算法分析与设计》期末复习题[1]-推荐下载

2.算法是 求解某一问题所使用的一系列清晰的指令 。
3.算法分析时间效率模型的基本数学公式是:
4.算法设计技术是 用算法解题的一般性方法 ,用于解决不同计算领域的多种问题。
5.三个渐进符号: O 、 Ω 和 Ө 。
6.效率分析框架主要关心一个算法的 基本操作次数的增长次数 ,并把它作为算法效率的主要指标。
D.3,15,20,67,98,130
A.一个算法的执行步骤可以是无限的 B.一个完整的算法必须有输出
C.算法只能用流程图表示
6.Java Application 源程序的主类是指包含有( )方法的类。
A、main 方法
B、toString 方法 C、init 方法
7.找出满足各位数字之和等于5的所有三位数可采用的算法思路是( )
一、选择题
1.一个.java 文件中可以有( )个 public 类。
A.一个 B.两个
2.一个算法应该是( )
A.程序
C.要满足五个基本特性
C.多个
B.问题求解步骤的描述
D.A和C
D.零个
3.用计算机无法解决“打印所有素数”的问题,其原因是解决该问题的算法违背了算法特征中的( )
A.唯一性
B.有穷性
生的过程中,依次被访问到的学号是( )
A.5,11,33
11.表达式(short)8/9.2*5 的值的类型为
A.short
B.8,33
B. int
12. 设 x 为 int 型变量,则执行一下语句段后,x 的值为
A.10
x=10;
x+=x-=x-x;
13.下列代码的执行结果是
public class StringTest{

算法分析与设计复习题及参考答案

算法分析与设计复习题及参考答案

《算法分析与设计》课程复习资料一、名词解释:1.算法2.程序3.递归函数4.子问题的重叠性质5.队列式分支限界法6.多机调度问题7.最小生成树 二、简答题:1.备忘录方法和动态规划算法相比有何异同?简述之。

2.简述回溯法解题的主要步骤。

3.简述动态规划算法求解的基本要素。

4.简述回溯法的基本思想。

5.简要分析在递归算法中消除递归调用,将递归算法转化为非递归算法的方法。

6.简要分析分支限界法与回溯法的异同。

7.简述算法复杂性的概念,算法复杂性度量主要指哪两个方面? 8.贪心算法求解的问题主要具有哪些性质?简述之。

9.分治法的基本思想是什么?合并排序的基本思想是什么?请分别简述之。

10.简述分析贪心算法与动态规划算法的异同。

三、算法编写及算法应用分析题:1.已知有3个物品:(w1,w2,w3)=(12,10,6),(p1,p2,p3)=(15,13,10),背包的容积M=20,根据0-1背包动态规划的递推式求出最优解。

2.按要求完成以下关于排序和查找的问题。

①对数组A={15,29,135,18,32,1,27,25,5},用快速排序方法将其排成递减序。

②请描述递减数组进行二分搜索的基本思想,并给出非递归算法。

③给出上述算法的递归算法。

④使用上述算法对①所得到的结果搜索如下元素,并给出搜索过程:18,31,135。

3.已知1()*()i i k k ij r r A a +=,k =1,2,3,4,5,6,r 1=5,r 2=10,r 3=3,r 4=12,r 5=5,r 6=50,r 7=6,求矩阵链积A 1×A 2×A 3×A 4×A 5×A 6的最佳求积顺序(要求给出计算步骤)。

4.根据分枝限界算法基本过程,求解0-1背包问题。

已知n=3,M=20,(w1,w2,w3)=(12,10,6),(p1,p2,p3)=(15,13,10)。

算法设计与分析期末复习题

算法设计与分析期末复习题

算法设计与分析期末考试复习题1.算法有哪些特点?为什么说一个具备了所有特征的算法,不一定就是使用的算法?2.证明下面的关系成立:(参考例题1.5--1.6)(1)logn!=Θ(nlogn) (2)2n=Θ(2n+1)(3)n!=Θ(n n) (4)5n2-6n=Θ(n2)3.考虑下面的算法:输入:n个元素的数组A输出:按递增顺序排序的数组A1. void sort(int A[],int n)2. {3. int i,j,temp;4. for(i=0;i<n-1;i++)5. for(j=i+1;j<n;j++)6. if(A[j]<A[i]) {7. temp=A[i];8. A[i]=A[j];9. A[j]=temp;10. }11. }(1)什么时候算法所执行的元素赋值的次数最少?最少多少次?(2)什么时候算法所执行的元素赋值的次数最多?最多多少次?4.考虑下面的算法:输入:n个元素的数组A输出:按递增顺序排序的数组A1. void bubblesort(int A[],int n)2. {3. int j,i,sorted;4. i=sorted=0;5. while(i<n-1 && !sorted) {6. sorted=1;7. for(j=n-1;j>i;j--) {8. if(A[j]<A[j-1]) {9. temp=A[j];10. A[j]=A[j-1];11. A[j-1]=temp;12. sorted=0;13. }14. }15. i=i+1;16. }17. }(1)算法所执行的元素比较次数最少是多少次?什么时候达到最少?(2)算法所执行的元素比较次数最多是多少次?什么时候达到最多?(3)算法所执行的元素赋值次数最少是多少次?什么时候达到最少?(4)算法所执行的元素赋值次数最多是多少次?什么时候达到最多?(5)用О、和Ω记号表示算法的运行时间。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

《算法分析与设计》期末复习题一、选择题1. 算法必须具备输入、输出和( D )等4个特性。

A.可行性和安全性 B .确定性和易读性C.有穷性和安全性 D .有穷性和确定性2. 算法分析中,记号O表示( B ),记号Ω表示(A )A.渐进下界B. 渐进上界C.非紧上界D. 紧渐进界3.假设某算法在输入规模为n时的计算时间为T(n)=3*2^n。

在某台计算机上实现并完成概算法的时间为t秒。

现有另一台计算机,其运行速度为第一台的64倍,那么在这台新机器上用同一算法在t秒内能解输入规模为多大的问题?(B )解题方法:3*2^n*64=3*2^xA.n+8 B .n+6C.n+7 D .n+54.设问题规模为N时,某递归算法的时间复杂度记为T(N),已知T(1)=1,T(N)=2T(N/2)+N/2,用O表示的时间复杂度为( C )。

A.O(logN) B .O(N)C.O(NlogN) D .O(N2logN)5.直接或间接调用自身的算法称为( B )。

A.贪心算法 B .递归算法C.迭代算法 D .回溯法6.Fibonacci数列中,第4个和第11个数分别是( D )。

A.5,89 B .3,89C.5,144 D .3,1447.在有8个顶点的凸多边形的三角剖分中,恰有( B )。

A.6条弦和7个三角形 B .5条弦和 6个三角形C.6条弦和6个三角形 D .5条弦和 5个三角形8. 一个问题可用动态规划算法或贪心算法求解的关键特征是问题的(B)。

A.重叠子问题 B .最优子结构性质C.贪心选择性质 D .定义最优解9. 下列哪个问题不用贪心法求解( C )。

A.哈夫曼编码问题 B.单源最短路径问题C.最大团问题 D .最小生成树问题10. 下列算法中通常以自底向上的方式求解最优解的是( B )。

A.备忘录法 B .动态规划法C.贪心法 D .回溯法11.下列算法中不能解决0/1背包问题的是(A)。

A.贪心法 B .动态规划C.回溯法 D .分支限界法12. 下列哪个问题可以用贪心算法求解( D )。

1A.LCS问题 B .批处理作业问题C.0-1背包问题 D .哈夫曼编码问题13.用回溯法求解最优装载问题时,若待选物品为m种,则该问题的解空间树的结点个数为()。

A.m! B.2m+1C.2m+1-1 D.2m14.二分搜索算法是利用(A)实现的算法。

A.分治策略 B .动态规划法C.贪心法 D .回溯法15.下列不是动态规划算法基本步骤的是( B )。

P44A.找出最优解的性质 B .构造最优解C.算出最优解(应该是最优值) D.定义最优解16.下面问题(B )不能使用贪心法解决。

A.单源最短路径问题 B .N皇后问题C.最小花费生成树问题 D .背包问题17.使用二分搜索算法在n个有序元素表中搜索一个特定元素,在最好情况和最坏情况下搜索的时间复杂性分别为( A )。

P17A.O(1),O(logn) B .O(n),O(logn)C.O(1),O(nlogn) D .O(n),O(nlogn)18.优先队列式分支限界法选取扩展结点的原则是( C )。

P162 A.先进先出 B.后进先出C.结点的优先级 D .随机19.下面不是分支界限法搜索方式的是( D )。

P161A.广度优先 B .最小耗费优先C.最大效益优先 D .深度优先20.分支限界法解最大团问题时,活结点表的组织形式是(B)。

A.最小堆 B .最大堆C.栈 D .数组21.下列关于计算机算法的描述不正确的是(C)。

P1 A.算法是指解决问题的一种方法或一个过程B.算法是若干指令的有穷序列C.算法必须要有输入和输出D.算法是编程的思想22.下列关于凸多边形最优三角剖分问题描述不正确的是(A)。

A.n+1个矩阵连乘的完全加括号和n个点的凸多边形的三角剖分对应B.在有n个顶点的凸多边形的三角剖分中,恰有n-3条弦C.该问题可以用动态规划法来求解D.在有n个顶点的凸多边形的三角剖分中,恰有n-2个三角形23.动态规划法求解问题的基本步骤不包括(C )。

P44A.递归地定义最优值B.分析最优解的性质,并刻画其结构特征C.根据计算最优值时得到的信息,构造最优解( 可以省去的) D.以自底向上的方式计算出最优值24.分治法所能解决的问题应具有的关键特征是( C )。

P162A.该问题的规模缩小到一定的程度就可以容易地解决B.该问题可以分解为若干个规模较小的相同问题C.利用该问题分解出的子问题的解可以合并为该问题的解D.该问题所分解出的各个子问题是相互独立的25.下列关于回溯法的描述不正确的是( D )。

P114A.回溯法也称为试探法B.回溯法有“通用解题法”之称C.回溯法是一种能避免不必要搜索的穷举式搜索法D.用回溯法对解空间作深度优先搜索时只能用递归方法实现26.常见的两种分支限界法为(D )。

P161A.广度优先分支限界法与深度优先分支限界法;B.队列式(FIFO)分支限界法与堆栈式分支限界法;C.排列树法与子集树法;D.队列式(FIFO)分支限界法与优先队列式分支限界法;二、填空题1. f(n)=3n 2+10的渐近性态f(n)=O( n2),g(n)=10log3n的渐近性态g(n)=O( n )。

2. 一个“好”的算法应具有正确性、可读性、健壮性和高效率和低存储量需求等特性。

3. 算法的时间复杂性函数表示为C=F(N,I,A),分析算法复杂性的目的在于比较求解同意问题的两个不同算法的效率的效率。

4. 构成递归式的两个基本要素是递归的边界条件和递归的定义。

5. 单源最短路径问题可用分支限界法和贪心算法求解。

6. 用分治法实现快速排序算法时,最好情况下的时间复杂性为O(nlogn) ,最坏情况下的时间复杂性为O(n^2) ,该算法所需的时间与运行时间和划分两方面因素有关。

P267. 0-1背包问题的解空间树为完全二叉树;n后问题的解空间树为排列树;8. 常见的分支限界法有队列式(FIFO)分支限界法和优先队列式分支限界法。

9. 回溯法搜索解空间树时常用的两种剪枝函数为约束函数和剪枝函数。

10. 分支限界法解最大团问题时,活结点表的组织形式是最大堆;分支限界法解单源最短路径问题时,活结点表的组织形式是最小堆。

三、算法填空题1.递归求解Hanoi塔问题/阶乘问题。

例1:阶乘函数n!P12阶乘的非递归方式定义:n! n (n 1) (n2) 21 试写出阶乖的递归式及算法。

递归式为: 1 n 0 边界条件n!n(n 1)!n 03递归方程递归算法:intfactorial(intn){if(n==0)return1;递归出口returnn*factorial(n-1);递归调用}例2:用递归技术求解 Hanoi塔问题,Hanoi塔的递归算法。

P15其中Hanoi(intn,inta,intc,intb)表示将塔座A上的n个盘子移至塔座C,以塔座B为辅助。

Move(a,c)表示将塔座a上编号为n的圆盘移至塔座c上。

voidhanoi(intn,inta,intc,intb){if(n>0){hanoi(n-1,a,b,c);move(a,c);hanoi(n-1,b,c,a);}}2.用分治法求解快速排序问题。

快速排序算法P25 、作业、课件第2章(2)42页-50页template<classType>voidQuickSort(Typea[],intp,intr){if(p<r){intq=Partition(a,p,r);QuickSort(a,p,q-1);QuickSort(a,q+1,r) ;}}4Partition 函数的具体实现template<classType>intPartition(Typea[],intp,intr){inti=p,j=r+1;Typex=a[p];//将<x的元素交换到左边区域//将>x的元素交换到右边区域while(true){while(a[++i]<x&&i<r);while(a[--j]>x);if(i>=j)break;Swap(a[i],a[j]);}a[p]=a[j];a[j]=x;returnj;}3.用贪心算法求解最优装载问题。

最优装载问题P95课件第4章(2)第3-8页template<classType>voidLoading(intx[],Typew[],Typec,intn) {int*t=newint[n+1];Sort(w,t,n);for(inti=1;i<=n;i++)x[i]=0;for(intj=1;j<=n&&w[t[j]]<=c;j++){x[t[i]]=1;c-=w[t[j]];}}54.用回溯法求解0-1背包/批处理作业调度/最大团问题,要会画解空间树。

例1:用回溯法求解0-1背包P133课件第5章(2)第24-38页template<typenameTypew,typenameTypep>classKnap{private:TypepBound(inti);// 计算上界voidBacktrack(inti);Typewc;// 背包容量intn;// 物品数Typew*w;// 物品重量数组Typep*p;// 物品价值数组Typewcw;// 当前重量Typepcp;// 当前价值Typepbestp;// 当前最优价值};voidKnap<Typew,Typep>::Backtrack(inti){if(i>n){bestp=cp;return;}if(cw+w[i]<=c)// 进入左子树{cw+=w[i];cp+=p[i];Backtrack(i+1);cw-=w[i];cp-=p[i]; }if(Bound(i+1)>bestp)// 进入右子树Backtrack(i+1);}TypepKnap<Typew,Typep>::Bound(inti){Typewcleft=c-cw;// 剩余的背包容量Typepb=cp;//b 为当前价值//依次装入单位重量价值高的整个物品6while(i<=n&&w[i]<=cleft){cleft-=w[i]; b+=p[i]; i++; }if(i<=n)// 装入物品的一部分b+=p[i]*cleft/w[i];returnb;// 返回上界}classObject// 物品类{friendintKnapsack(int*,int*,int,int);public:intoperator<(Objecta)const{return(d>=a.d);}intID;// 物品编号floatd;// 单位重量价值};TypepKnapsack(Typepp[],Typeww[],Typewc,intn){// 为TypepKnapsack初始化TypewW=0;// 总重量TypepP=0;// 总价值Object*Q=newObject[n];// 创建物品数组,下标从0开始for(inti=1;i<=n;i++)// 初始物品数组数据{Q[i-1].ID=i;Q[i-1].d=1.0*p[i]/w[i];P+=p[i]; W+=w[i];}if(W<=c)// 能装入所有物品returnP;if(W<=c)// 能装入所有物品returnP;QuickSort(Q,0,n-1);// 依物品单位重量价值非增排序7Knap<Typew,Typep>K;K.p=newTypep[n+1];K.w=newTypew[n+1];for(inti=1;i<=n;i++){ K.p[i]=p[Q[i-1].ID]; K.w[i]=w[Q[i-1].ID]; }K.cp=0; K.cw=0; K.c=c;K.n=n; K.bestp=0; K.Backtrack(1);delete[]Q; delete[]K.w;delete[]K.p; returnK.bestp;}例2:批处理作业调度课件第5章(2)P2-5问题描述,课本P125-127解空间:排列树算法描述:classFlowshop{static int [][]m, //各作业所需的处理时间[]x, //当前作业调度[]bestx,// 当前最优作业调度[]f2, //机器2完成处理时间f1, //机器1完成处理时间f, //完成时间和bestf, //当前最优的完成时间和n; //作业数staticvoidBacktrack(inti){if(i>n){for(intj=1;j<=n;j++)bestx[j]=x[j];bestf=f;} elsefor(intj=i;j<=n;j++){f1+=m[x[j]][1];//第j个作业在第一台机器上所需时间f2[i]=((f2[i-1]>f1)?f2[i-1]:f1)+m[x[j]][2];f+=f2[i];if(f<bestf)//约束函数{Swap(x[i],x[j]);Backtrack(i+1); Swap(x[i],x[j]);}f1-=m[x[j]][1];f-=f2[i];}}8例3:最大团问题,要会画解空间树。

相关文档
最新文档