计算机算法设计与分析(王晓东第4版)第6章

合集下载

计算机算法设计与分析(第4版)[王晓东][电子教案]第2章

计算机算法设计与分析(第4版)[王晓东][电子教案]第2章

2.1 递归的概念
例5 整数划分问题 前面的几个例子中,问题本身都具有比较明显的递归关系,因 而容易用递归函数直接求解。 在本例中,如果设p(n)为正整数n的划分数,则难以找到递归关 系,因此考虑增加一个自变量:将最大加数n1不大于m的划分个 数记作q(n,m)。可以建立q(n,m)的如下递归关系。
A(1,0) 2 A(0, m) 1 m0 A(n,0) n 2 n2 A(n, m) A( A(n 1, m), m 1) n, m 1
2.1 递归的概念
例3 Ackerman函数 前2例中的函都可以找到相应的非递归方式定义:
n! 1 2 3 (n 1) n
T(n)
n/2
=
n/2
n
n/2 n/2
T(n/4)T(n/4)T(n/4)T(n/4) T(n/4)T(n/4)T(n/4)T(n/4) T(n/4)T(n/4)T(n/4)T(n/4) T(n/4)T(n/4)T(n/4)T(n/4
算法总体思想

将求出的小规模的问题的解合并为一个更大规模的问 题的解,自底向上逐步求出原来问题的解。
1 q ( n, n ) q ( n, m ) 1 q (n, n 1) q ( n, m 1) q (n m, m)
正整数n的划分数p(n)=q(n,n)。
n 1, m 1 nm nm n m 1
2.1 递归的概念
例6 Hanoi塔问题 设a,b,c是3个塔座。开始时,在塔座a上有一叠共n个圆盘,这 些圆盘自下而上,由大到小地叠在一起。各圆盘从小到大编号 为1,2,…,n,现要求将塔座a上的这一叠圆盘移到塔座b上,并仍 按同样顺序叠臵。在移动圆盘时应遵守以下移动规则: 规则1:每次只能移动1个圆盘; 规则2:任何时刻都不允许将较大的圆盘压在较小的圆盘之上; 规则3:在满足移动规则1和2的前提下,可将圆盘移至a,b,c中 任一塔座上。

算法设计与分析-1-15

算法设计与分析-1-15
计算机算法设计与分析(第4版)
电子工业出版社
教材资料、课程情况
计算机算法设计与分析(第4版),王晓东编著,北京:电 子工业出版社,2012
—— 优缺点
Introdocution to Algotithms(2nd Ed), Cormen,T.H,
Leiserson, C.E.,Rivest, R., Stein,C.北京:高等教育出版社, 2002 必修课,11/12/13/14年, 增强解决问题能力; ACM程序设计竞赛,bupt;研究生复试;大公司应聘笔试
• 程序=数据结构 + 算法
(1)处理对象,输入、输出、中间结果、….
(2)处理过程
程序(Program)
• 程序可以不满足算法的性质(4)——有限性。 • 例如,操作系统,是一个在无限循环中执行的程序,某 些语句、模块反复执行,因而不是一个算法。
• 操作系统的各种任务可看成是单独的问题,每一个问题
(1)输入:有外部提供的量作为算法的输入。
(2)输出:算法产生至少一个量作为输出。
(3)确定性:组成算法的每条指令、语句是清晰,无歧义的。
(4)有限性:算法中每条指令的执行次数是有限的,执行每条 指令的时间也是有限的。
程序(Program)
• 程序:算法用某种程序设计语言的具体实现。 • 进程(process,“操作系统”课程):程序的一次执行 e.g. Windows任务管理器
• CSP例题
注意事项
成绩
期中,期末,作业 ;
掌握:1. 各章主要算法策略——5种策略
2. 算法设计策略应用于具体问题典型问题算法
3. 各章典型问题/算法设计 + 分析 作业:各章典型问题/算法的编程实现(每章3个) 答疑、作业:助教 课堂纪律

计算机算法设计与分析基础(第六章变治法)

计算机算法设计与分析基础(第六章变治法)
第 6 章 变治法
★ 变治策略
★ 预排序
★ 高斯消去法 ★ 平衡查找树(略)
★ 堆与优先队列(略)
★ 堆排序(略) ★ 霍纳法则和二进制幂 ★ 问题化简 ★ 本章习题
★ 变治策略
通用的算法设计方法,基于变换的思想
变:变换问题更容易求解 治:对变换后的问题求解
3 种主要类型
实例化简:问题求解变得更简单,如预排序
while ( i≤n-1 )
runlength←1,runvalue←A[i] // 行程长度 = 等值元素个数 while ( i+runlength≤n-1 and A[i+runlength] = runvalue )
runlength ++ // 与下一个元素相等则行程长度+1
if ( runlength > ModeFrequency ) ModeFrequency←runlength,modeValue←runvalue i←i+runlength // 跳过本行程,i 始终指向行程的第一个元素 return ( ModeValue, ModeFrequency )
需要与辅助列表中已加入的 k-1个元素比较,共 k-1 次。
最差效率:
T ( n) ( k 1) 1 ... n 1 (n2 )
k 1
n
变治法 —— 预排序(nlogn型),排序后 等值元素一定相邻 扫描统计:模式具有最多的相邻元素,需比较 n -1 次。 PresortMode_1(A[0...n-1]) // 行程算法 对数组A排序 // 排序结果 { 1, 5, 5, 5, 6, 7, 7 } i←0,ModeFrequency←0 // 最大频率,最大行程长度

计算机算法设计与分析(第4版) 王晓东习题解答

计算机算法设计与分析(第4版) 王晓东习题解答

第一章作业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!)=∑=n i i 1log ≤∑=ni n 1log =nlogn ,所以可得log(n!)= Ο(nlogn)。

∙由于对所有的偶数n 有,log(n!)= ∑=n i i 1log ≥∑=n n i i 2/log ≥∑=nn i n 2/2/log ≥(n/2)log(n/2)=(nlogn)/2-n/2。

当n ≥4,(nlogn)/2-n/2≥(nlogn)/4,故可得∀n ≥4,log(n!) ≥(nlogn)/4,即log(n!)= Ω(nlogn)。

《算法设计与分析》课程实验与设计 福州大学 王晓东

《算法设计与分析》课程实验与设计 福州大学 王晓东

《算法设计与分析》课程实验与设计福州大学王晓东第1章算法引论算法实现题1-1 统计数字问题算法实现题1-2 字典序问题算法实现题1-3 最多约数问题算法实现题1-4 金币阵列问题算法实现题1-5 最大间隙问题第2章递归与分治策略算法实现题2-1 输油管道问题算法实现题2-2 众数问题算法实现题2-3 邮局选址问题算法实现题2-4 马的Hamilton周游路线问题算法实现题2-5 半数集问题算法实现题2-6 半数单集问题算法实现题2-7 士兵站队问题算法实现题2-8 有重复元素的排列问题算法实现题2-9 排列的字典序问题算法实现题2-10 集合划分问题算法实现题2-11 集合划分问题2算法实现题2-12 双色Hanoi塔问题算法实现题2-13 标准2维表问题算法实现题2-14 整数因子分解问题算法实现题2-15 有向直线2中值问题第3章动态规划算法实现题3-1 独立任务最优调度问题算法实现题3-2 最少硬币问题算法实现题3-3 序关系计数问题算法实现题3-4 多重幂计数问题算法实现题3-5 编辑距离问题算法实现题3-6 石子合并问题算法实现题3-7 数字三角形问题算法实现题3-8 乘法表问题算法实现题3-9 租用游艇问题算法实现题3-10 汽车加油行驶问题算法实现题3-11 圈乘运算问题算法实现题3-12 最少费用购物算法实现题3-13 最大长方体问题算法实现题3-14 正则表达式匹配问题算法实现题3-15 双调旅行售货员问题算法实现题3-16 最大k乘积问题算法实现题3-17 最小m段和问题算法实现题3-18 红黑树的红色内结点问题第4章贪心算法算法实现题4-1 会场安排问题算法实现题4-2 最优合并问题算法实现题4-3 磁带最优存储问题算法实现题4-4 磁盘文件最优存储问题算法实现题4-6 最优服务次序问题算法实现题4-7 多处最优服务次序问题算法实现题4-8 d森林问题算法实现题4-9 汽车加油问题算法实现题4-10 区间覆盖问题算法实现题4-11 硬币找钱问题算法实现题4-12 删数问题算法实现题4-13 数列极差问题算法实现题4-14 嵌套箱问题算法实现题4-15 套汇问题算法实现题4-16 信号增强装置问题算法实现题4-17 磁带最大利用率问题算法实现题4-18 非单位时间任务安排问题算法实现题4-19 多元Huffman编码问题算法实现题4-20 多元Huffman编码变形算法实现题4-21 区间相交问题算法实现题4-22 任务时间表问题第5章回溯法算法实现题5-1 子集和问题算法实现题5-2 最小长度电路板排列问题算法实现题5-3 最小重量机器设计问题算法实现题5-4 运动员最佳匹配问题算法实现题5-5 无分隔符字典问题算法实现题5-6 无和集问题算法实现题5-7 n色方柱问题算法实现题5-9 拉丁矩阵问题算法实现题5-10 排列宝石问题算法实现题5-11 重复拉丁矩阵问题算法实现题5-12 罗密欧与朱丽叶的迷宫问题算法实现题5-13 工作分配问题算法实现题5-14 独立钻石跳棋问题算法实现题5-15 智力拼图问题算法实现题5-16 布线问题算法实现题5-17 最佳调度问题算法实现题5-18 无优先级运算问题算法实现题5-19 世界名画陈列馆问题算法实现题5-20 世界名画陈列馆问题(不重复监视)算法实现题5-21 部落卫队问题算法实现题5-22 虫蚀算式问题算法实现题5-23 完备环序列问题算法实现题5-24 离散01串问题算法实现题5-25 喷漆机器人问题算法实现题5-26 n2-1谜问题第6章分支限界法算法实现题6-1 最小长度电路板排列问题算法实现题6-2 最小长度电路板排列问题算法实现题6-3 最小权顶点覆盖问题算法实现题6-4 无向图的最大割问题算法实现题6-5 最小重量机器设计问题算法实现题6-6 运动员最佳匹配问题算法实现题6-7 n皇后问题算法实现题6-8 圆排列问题算法实现题6-9 布线问题算法实现题6-10 最佳调度问题算法实现题6-11 无优先级运算问题算法实现题6-12 世界名画陈列馆问题算法实现题6-13 骑士征途问题算法实现题6-14 推箱子问题算法实现题6-15 图形变换问题算法实现题6-16 行列变换问题算法实现题6-17 重排n2宫问题算法实现题6-18 最长距离问题第7章概率算法算法实现题7-1 模平方根问题算法实现题7-2 素数测试问题算法实现题7-3 集合相等问题算法实现题7-4 逆矩阵问题算法实现题7-5 多项式乘积问题算法实现题7-6 皇后控制问题算法实现题7-7 3SAT问题算法实现题7-8 战车问题算法实现题7-9 圆排列问题算法实现题7-10 骑士控制问题算法实现题7-11 骑士对攻问题第9章近似算法算法实现题9-1旅行售货员问题的近似算法算法实现题9-2 可满足问题的近似算法算法实现题9-3 最大可满足问题的近似算法算法实现题9-4 子集和问题的近似算法算法实现题9-5 子集和问题的完全多项式时间近似算法算法实现题9-6 实现算法greedySetCover算法实现题9-7 装箱问题的近似算法First Fit算法实现题9-8 装箱问题的近似算法Best Fit算法实现题9-9 装箱问题的近似算法First Fit Decreasing 算法实现题9-10 装箱问题的近似算法Best Fit Decreasing 算法实现题9-11 装箱问题的近似算法Next Fit第10章算法优化策略算法实现题10-1 货物储运问题算法实现题10-2 石子合并问题算法实现题10-3 最大运输费用货物储运问题算法实现题10-4 五边形问题算法实现题10-5 区间图最短路问题算法实现题10-6 圆弧区间最短路问题算法实现题10-7 双机调度问题算法实现题10-8 离线最小值问题算法实现题10-9 最近公共祖先问题算法实现题10-10 达尔文芯片问题算法实现题10-11 多柱Hanoi塔问题算法实现题10-12 线性时间Huffman算法算法实现题10-13 单机调度问题算法实现题10-14 最大费用单机调度问题算法实现题10-15 飞机加油问题《算法设计与分析》期中试卷1 试题1 数列极差问题试题2 双调TSP回路问题试题3 最佳调度问题《算法设计与分析》期中试卷2 试题1 石子合并问题试题2 整数因子分解问题试题3 汽车加油问题《算法设计与分析》期终试卷1 试题1 乘法表问题试题2 工作分配问题试题3 飞行员配对方案问题《算法设计与分析》期终试卷2 试题1 直线k中值问题试题2 图形变换问题试题3 无向图的最大割问题。

大学_计算机算法设计与分析第4版(王晓东著)课后答案下载

大学_计算机算法设计与分析第4版(王晓东著)课后答案下载

计算机算法设计与分析第4版(王晓东著)课后答
案下载
计算机算法设计与分析第4版内容简介
第1章算法概述
1.1 算法与程序
1.2 算法复杂性分析
1.3 NP完全性理论
算法分析题1
算法实现题1
第2章递归与分治策略
2.1 递归的概念
2.2 分治法的基本思想
2.3 二分搜索技术
2.4 大整数的乘法
2.5 Strassen矩阵乘法
2.6 棋盘覆盖
2.7 合并排序
2.8 快速排序
2.9 线性时间选择
2.10 最接近点对问题
第3章动态规划
第4章贪心算法
第5章回溯法
第6章分支限界法
第7章随机化算法
第8章线性规划与网络流
附录A C++概要
参考文献
计算机算法设计与分析第4版目录
本书是普通高等教育“十一五”__规划教材和国家精品课程教材。

全书以算法设计策略为知识单元,系统介绍计算机算法的设计方法与分析技巧。

主要内容包括:算法概述、递归与分治策略、动态规划、贪心算法、回溯法、分支限界法、__化算法、线性规划与网络流等。

书中既涉及经典与实用算法及实例分析,又包括算法热点领域追踪。

为突出教材的`可读性和可用性,章首增加了学习要点提示,章末配有难易适度的算法分析题和算法实现题;配套出版了《计算机算法设计与分析习题解答(第2版)》;并免费提供电子课件和教学服务。

《计算机算法设计与分析》习题及答案

《计算机算法设计与分析》习题及答案一.选择题1、二分搜索算法是利用( A )实现的算法。

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

A、找出最优解的性质B、构造最优解C、算出最优解D、定义最优解3、最大效益优先是( A )的一搜索方式。

A、分支界限法B、动态规划法C、贪心法D、回溯法4. 回溯法解旅行售货员问题时的解空间树是( A )。

A、子集树B、排列树C、深度优先生成树D、广度优先生成树5.下列算法中通常以自底向上的方式求解最优解的是( B )。

A、备忘录法B、动态规划法C、贪心法D、回溯法6、衡量一个算法好坏的标准是( C )。

A 运行速度快B 占用空间少C 时间复杂度低D 代码短7、以下不可以使用分治法求解的是( D )。

A 棋盘覆盖问题B 选择问题C 归并排序D 0/1背包问题8. 实现循环赛日程表利用的算法是( A )。

A、分治策略B、动态规划法C、贪心法D、回溯法9.下面不是分支界限法搜索方式的是( D )。

A、广度优先B、最小耗费优先C、最大效益优先D、深度优先10.下列算法中通常以深度优先方式系统搜索问题解的是( D )。

A、备忘录法B、动态规划法C、贪心法D、回溯法11.备忘录方法是那种算法的变形。

( B )A、分治法B、动态规划法C、贪心法D、回溯法12.哈夫曼编码的贪心算法所需的计算时间为( B )。

A、O(n2n)B、O(nlogn)C、O(2n)D、O(n)13.分支限界法解最大团问题时,活结点表的组织形式是( B )。

A、最小堆B、最大堆C、栈D、数组14.最长公共子序列算法利用的算法是( B )。

A、分支界限法B、动态规划法C、贪心法D、回溯法15.实现棋盘覆盖算法利用的算法是( A )。

A、分治法B、动态规划法C、贪心法D、回溯法16.下面是贪心算法的基本要素的是( C )。

A、重叠子问题B、构造最优解C、贪心选择性质D、定义最优解17.回溯法的效率不依赖于下列哪些因素( D )A.满足显约束的值的个数B. 计算约束函数的时间C.计算限界函数的时间D. 确定解空间的时间18.下面哪种函数是回溯法中为避免无效搜索采取的策略( B )A.递归函数 B.剪枝函数 C。

算法设计与分析王晓东.doc

习题2-1 求下列函数的渐进表达式:3n^2+10n; n^2/10+2n; 21+1/n; logn^3; 10 log3^n 。

解答:3n^2+10n=O(n^2),n^2/10+2^n=O(2^n),21+1/n=O(1),logn^3=O(logn),10log3^n=O(n).习题2-3 照渐进阶从低到高的顺序排列以下表达式:n!,4n^2,logn,3^n,20n,2,n^2/3。

解答:照渐进阶从高到低的顺序为:n!、3^n、4n^2 、20n、n^2/3、logn、2习题2-4(1)假设某算法在输入规模为n时的计算时间为T(n)=3*2^n。

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

现有另外一台计算机,其运行速度为第一台计算机的64倍,那么在这台新机器上用同一算法在t秒内能解输入规模为多大的问题?(2)若上述算法的计算时间改进为T(n)=n^2,其余条件不变,则在新机器上用t秒时间能解输入规模多大的问题?(3)若上述算法的计算时间进一步改进为,其余条件不变,那么在新机器上用t秒时间能解输入规模多大的问题?解答:(1)设能解输入规模为n1的问题,则t=3*2^n=3*2^n/64,解得n1=n+6(2)n1^2=64n^2得到n1=8n(3)由于T(n)=常数,因此算法可解任意规模的问题。

习题2-5 XYZ公司宣称他们最新研制的微处理器运行速度为其竞争对手ABC公司同类产品的100倍。

对于计算复杂性分别为n,n^2,n^3和n!的各算法,若用ABC公司的计算机能在1小时内能解输入规模为n的问题,那么用XYZ公司的计算机在1小时内分别能解输入规模为多大的问题?解答:n'=100nn'^2=100n^2得到n'=10nn'^3=100n^3得到n'=4.64nn'!=100n!得到n'<n+log100=n+6.64习题2-6对于下列各组函数f(n)和g(n),确定f(n)=O(g(n))或f(n)=Ω(g(n))或f(n)=θ(g(n)),并简述理由。

计算机算法设计与分析(第3版)王晓东__第6章


(2)将剩余的集装箱装上第二艘轮船。
11
6.3 装载问题
2. 队列式分支限界法
在算法的while 循环中,首先检测当前扩展结点的左儿子 结点是否为可行结点。如果是则将其加入到活结点队列中。然 后将其右儿子结点加入到活结点队列中 (右儿子结点一定是可 行结点)。2个儿子结点都产生后,当前扩展结点被舍弃。
6
6.2 单源最短路径问题
1. 问题描述
下图是用优先队列式分支限界法解有向图G的单源最短路径问 题产生的解空间树。其中,每一个结点旁边的数字表示该结点所对 应的当前路长。
7
6.2 单源最短路径问题
2. 算法思想
解单源最短路径问题的优先队列式分支限界法用一极小堆来 存储活结点表。其优先级是结点所对应的当前路长。 算法从图G的源顶点s和空优先队列开始。结点s被扩展后,它 的儿子结点被依次插入堆中。此后,算法从堆中取出具有最小当 前路长的结点作为当前扩展结点,并依次检查与当前扩展结点相 邻的所有顶点。如果从当前扩展结点i到顶点j有边可达,且从源 出发,途经顶点i再到顶点j的所相应的路径的长度小于当前最优 路径长度,则将该顶点作为活结点插入到活结点优先队列中。这 个结点的扩展过程一直继续到活结点优先队列为空时为止。
9
6.2 单源最短路径问题
while (true) { for (int j = 1; j <= n; j++) if ((c[E.i][j]<inf)&&(E.length+c[E.i][j]<dist[j])) { // 顶点i到顶点j可达,且满足控制约束 dist[j]=E.length+c[E.i][j]; 顶点I和j间有边,且此 prev[j]=E.i; 路径长小于原先从原点 // 加入活结点优先队列 到j的路径长 MinHeapNode<Type> N; N.i=j; N.length=dist[j]; H.Insert(N);} try {H.DeleteMin(E);} // 取下一扩展结点 catch (OutOfBounds) {break;} // 优先队列空 } }

算法分析与设计第1章详解教学内容

21
1.1.4 问题求解的一般过程
理解问题 精确解或近似解
选择数据结构 算法设计策略设计算法22/601.1.5 重要的问题类型
1. 查找问题 2. 排序问题 3. 图问题 4. 组合问题 5. 几何问题
23
1.2 算法分析
1.2.1 最好、最坏和平均情况 1.2.2 渐近符号 1.2.3 非递归算法的分析 1.2.4 递归算法的分析 1.2.5 算法的实验分析
➢ 计算机B+合并排序算法(c2=50),则计算机B花的时间为:
10/60
1.1.2 算法及其重要性质
• 算法是指解决问题的一种方法或一个过程。 • 算法是若干指令的有穷序列,满足性质: ➢ (1)输入:有外部提供的量作为算法的输入。 ➢ (2)输出:算法产生至少一个量作为输出。 ➢ (3)确定性:组成算法的每条指令是清晰,无歧义的。 ➢ (4)有限性:算法中每条指令的执行次数是有限的,执行每条
操作系统中的一个子程序通过特定的算法来实现。该子程 序得到输出结果后便终止。
13/60
1.1.3 算法的描述方法
⑴ 自然语言 优点:容易理解 缺点:冗长、二义性 使用方法:粗线条描述算法思想 注意事项:避免写成自然段
14/60
欧几里德算法
① 输入m 和n; ② 求m除以n的余数r; ③ 若r等于0,则n为最大公约数,算法结束;
9/60
算法可以看做一项技术
• ™算法可以看作是一项技术
• 例 对于排序问题(问题规模:n=106)
➢ 插入排序算法:复杂度c1n2 ➢ 合并排序算法:复杂度c2nlog2n ➢ 计算机A每秒能执行10亿条指令 ➢ 计算机B每秒能执行1000万条指令 ➢ 计算机A+插入排序算法(c1=2),则计算机A花的时间为:
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
Department of Electronic Information 17
剪枝策略
• 当 Wc + Wr ≤ Wb 时, 将右子树剪去 • 算法初始 Wb 为 0, 搜索到第一个叶节点时更新 Wb • 在算法每一次进入左子树的时候更新 Wb 的值
Department of Electronic Information
Department of Electronic Information
15
6.3 装 载 问 题
• 有一批共 n 个集装箱要装上 2 艘载重量分别为 c1 和 c2 的轮船, 其中集装箱 i 的重量为 wi, 且 Σn i=1wi ≤ c1 + c2 装载问题要求确定是否有一个合理的装载方案可将这 个集装箱装上这 2 艘轮船. 如果有, 找出一种装载方 案. • 装载问题实质是第一艘船的最优装载问题, 其解空间 树为一棵子集树.
(1) 求解目标不同 (2) 搜索方式不同 (3) 剪枝操作不同
Department of Electronic Information
4
分支限界法剪枝策略
• 该节点不能构成可行解 • 该节点的边界值不优于目前最优解的解
Department of Electronic Information
5
分支限界法的搜索策略
Department of Electronic Information 23
w = [4, 7, 5, 3], v = [40, 42, 25, 12], v/w = [10, 6, 5, 4].
A w = 0, v = 0 ub = 100 1 B w = 4, v = 40 ub = 76 1 D w = 11 × 1 F w = 9, v = 65 ub = 69 1 H w = 12 × 0 I w = 9, v = 65 ub = 65 0 G w = 4, v = 40 ub = 64 × I 0 E w = 4, v = 40 ub = 70 0 C w = 0, v = 0 ub = 60 × I
Department of Electronic Information
24
本章小结
• 回溯法和分支限界法用于求解随着实例规模增长, 问 题的选择次数呈指数增长的问题 • 回溯法和分支限界法以搜索解空间树为主要机制 • 搜索过程中引入剪枝函数提高搜索效率
Department of Electronic Information
Department of Electronic Information
20
分枝限界算法思想
• 将各物品依其单位重量价值从大到小进行排序 • 构造一棵二叉树, 树中第 i 层的每一个节点, 都代表 了对于序列中前 i 个物品所做出的特定选择, 这个特 定选择是根据从根节点到该节点的一条路径所惟一确 定的 • 把这个选择的总重量 w 和总价值 v , 记录在节点中, 同时记录任何向这个选择添加物品之后得到的子集的 上界 ub
Department of Electronic Information 14
剪枝策略
• 在算法扩展结点的过程中, 一旦发现一个结点的下界 不小于当前找到的最短路长, 则算法剪去以该结点为 根的子树 • 在算法中, 从源顶点 s 出发, 如果 2 条不同路径到达 图 G 的同一顶点, 则将路长较长的路径所对应的树中 的结点为根的子树剪去
Department of Electronic Information
11
有向图 G
d:7 a:2 s b:3 c:4 h:2 e:2 u:3 f :7 g:2 i j k:3 q:1 l:5 m:1
n o r:2 p:2 t
Department of Electronic Information
25
Department of Electronic Information 19
6.5 0/1 背 包 问 题
• 给定 n 种重量为 wi, 价值为 pi 的物品, i = 1, 2, . . . , n, 以及一个承重量为 C 的背包, 找出其 是最有价值的物品子集, 并且能够全部装入背包中 • 0/1 背包问题等价于子集选取问题, 其解空间为一棵 子集树
分支限界法的基本过程
1. 分支限界法常以广度优先或以最小耗费优先方式搜索 解空间树 2. 一次性产生扩展结点的所有儿子结点 3. 导致不可行解或非最优解的儿子结点被舍弃, 其余儿 子结点被加入活结点表中 4. 选取下一结点成为当前扩展结点, 并重复上述结点扩 展过程, 直到找到所需解或活结点表为空时为止
算法设计与分析
马海涛 东北大学秦皇岛分校 2014.12.1
Department of Electronic Information 1
第 6 章分枝限界法
学习要点: • 理解分支限界法的剪枝搜索策略 • 掌握分支限界法的算法框架 • 通过应用范例学习分支限界法的设计策略: 单源最短 路径问题, 装载问题, 0-1 背包问题
18
2. 优 先 队 列 式 分 支 限 界 法
(1) 用最大优先队列存储活结点表 (2) 活结点 x 的优先级定义为从根结点到结点 x 的路径 所相应的载重量再加 上剩余集装箱的重量之和 (3) 队列中优先级最大的活结点成为下一个扩展结点 (4) 一旦有一个叶结点成为当前扩展结点, 则该叶结点所 相应的解即为最优解, 终止算法
• 分支限界法按广度优先策略搜索解空间树 • 在扩展结点处, 先生成其所有的儿子结点, 从当前的 活结点表中选择下一个扩展结点 • 在每一活结点处计算一个限界函数值, 从当前活结点 表中选择一个最有利的结点作为扩展结点, 使搜索朝 着解空间树上有最优解的分支推进, 尽快找出一个最 优解
Department of Electronic Information 6
Department of Electronic Information 7
常见的两种分支限界法
(1) 队列式分支限界法: 按照队列先进先出原则选取下一 个节点为扩展节点 (2) 优先队列式分支限界法: 按照优先队列中规定的优先 级选取优先级最高的节点成为当前扩展节点
Department of Electronic Information
Department of Electronic Information 16
1. 队 列 式 分 支 限 界 法
(1) 采用一个链表队列 Q 用于保存活节点, 其中元素的值 表示活节点对应的当前载重量 (2) 算法首先检验当前扩展节点 i 是否等于 n, 如果i < n, 则节点 i 就会被加入队列中 (3) 算法检测当前扩展结点的儿子结点是否为可行结点. 如果是则将其加入到活结点队列中 (4) 从队列中取出下一个扩展节点
8
Fun Time
• 考虑 0/1 背包问题: n = 3, w = [16, 15, 15], v = [45, 25, 25],c = 30. • 队列式分枝限界利用一个队列来记录活节点, 节点将 按照顺序从队列中取出 • 优先队列分枝限界使用一个最大堆, 该队列的优先级 定义为活节点所获得的价值
10
Department of Electronic Information
6.2 单 源 最 短 路 径 问 题
• 最短路径问题:在有向图 G 中, 每一边都有一个非负 边权. 要求图 G 的从源顶点 s 到目标顶点 t 之间的最 短路径. • 采用优先队列式分支限界法解有向图 G 的单源最短 路径问题
12
单源最短路径问题解空间树
s a u 5 g 7 m 6 2 e 4 q 5 14 l 10 7 k d 5 9 m 6 r 8 3 g l p 10 8
13
b f 12
c 4 h l 11 6 m 7
f
Department of Electronic Information
算法思想
(1) 优先队列式分支限界算法用一最小堆来存储活结点 表. 其优先级是结点所对应的当前路长 (2) 算法从图 G 的源顶点s 和空优先队列开始. 结点 s 被 扩展后, 它的儿子结点被依次插入堆中 (3) 算法从堆中取出具有最小当前路长的结点作为当前扩 展结点, 并依次检查与当前扩展结点相邻的所有顶点 (4) 扩展过程一直继续到活结点优先队列为空时为止
Department of Electronic Information 21
计 算 上 界 ub 函 数
ub = v + (C − w)(vi+1/wi+1) • v 表示已选择物品的总价值, • C − w 表示背包剩余空间, • vi+1/wi+1 表示剩下物品的最佳单位重量价值
Department of Electronic Information 22
Department of Electronic Information 9
0-1 背 包 问 题 解 空 间 树
n = 3, w = [16, 15, 15], v = [45, 25, 25],c = 30.
1 1 D 1 H 0 I 1 J B 0 E 0 K 1 L F 0 M 1 N A 0 1 C 0 G 0 O
Department of Electronic Information 2
优化问题的解
• 可行解:可行解是位于问题解空间中的点,能够满足 问题的所有约束 • 最优解:最优解是使目标函数取得最佳值的可行解
Department of Electronic Information
3
分பைடு நூலகம்限界法与回溯法的区别
Fun Time
• 给定 4 种物品, 其重量分别为 w = [4, 7, 5, 3], 价值为 v = [40, 42, 25, 12], 背包容量为 c = 10, 采用分支限界 法求该实例的解. 物品 重量 价值 价值/重量 1 4 40 10 2 7 42 6 3 5 25 5 4 3 12 4
相关文档
最新文档