Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >分支限界法

分支限界法

作者头像
用户2965768
发布于 2018-08-30 08:35:44
发布于 2018-08-30 08:35:44
1.7K0
举报
文章被收录于专栏:wymwym

一.分支限界法的思想:

1)在分支限界法中,每一个活结点只有一次机会成为扩展结点。

活结点一旦成为扩展结点,就一次性产生其所有儿子结点。在这些儿子结点

中,导致不可行解或导致非最优解的儿子结点被舍弃,其余儿子结点被加入

活结点表中。

2)此后,从活结点表中取下一结点成为当前扩展结点,并重复上述扩展

过程。这个过程一直持续到找到所需的解或活结点表为空时为止。

二.分支限界法与回溯法的异同

1)求解目标:回溯法求解的目标时找出解空间树中满足约束条件的所有解,

而分支限界法的求解目标则是找出满足约束条件的一个解,或是在满足约束

条件的解中找出在某种意义下的最优解。

2)搜索方式不同:回溯法以深度优先的方式搜索解空间树,而分支限界法则

以广度优先或以最小耗费优先的方式搜索解空间树。

三.分支界限法的边界

用分支界限法解决问题的关键是找边界,上界或下界。

1)对于一颗状态空间树的每一个结点所代表的部分解,要提供一种方法,

计算出通过这个部分解繁衍出的任何解在目标函数上的最佳值边界。

2)对于最小化问题,找下界,对于最大化问题,找上界。

四.分支界限法的分支

1)在当前树的未中止(活的)叶子节点中,选择其中最有希望的结点,

并生产它的所有子女。

2)比较活叶子结点的上界/下界,把具有最佳上界/下界的结点作为最有

希望的结点。

五.查找路径的中止条件

1)该结点的边界值不能超过目前最佳解的值。

2) 该结点无法代表任何可行解,因为它已经违反了约束条件。

3)该结点代表的可行解的子集只包含一个单独的点

(因此无法给出更多的选择)。

六。 例子

求最小值,找下界。

那么,下界如何找呢?

    我们可以按照行优先和列优先。 这里我们采用行优先,找出每一行最小值求和,那么最优解一定不会大于这个值,

因为这样选出的下界是可能违法约束条件的,这里的下界就是:

有一份工作派了两个人。

接着开始构树,start为开始的根节点,那么他会有几个分支呢?

看完第一张图再想想看,应该是4个分支,把接下来的分支都计算出

问题来了,为什么下面这张图改变了值呢?不是选3,1,4而是4,5,4

这里我们注意下不能选已经安排的工作,(这一层以前包括这一层都是已经安排的),其他行

选择最小值即可。

然后我们看,选哪一个继续扩展呢?是四个都扩展吗?

答案是否定的,因为其他三个是在未被安排的工作取最小值的情况下求的和,可能违反约束条件(每个工作派一个人),

在这种情况下都比别的小,没有必要扩展了,

接下来对第二个点扩展

重复构造的过程,

这个解即为最优解。

我们再看一个例子,

01背包问题

这个是求最大值,则求上界。

性价比最后一栏是第一个是10,不方便改啦(懒。。)

根据决策函数(这个不唯一,看个人怎么想),然后一样的每次选择当前最小(大)消耗

就是这样,嗯。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2018年06月02日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
【算法分析】分支限界法详解+范例+习题解答
下面以一个例子来说明单源最短路径问题:在下图所给的有向图G中,每一边都有一个非负边权。要求图G的从源顶点s到目标顶点t之间的最短路径。
司六米希
2022/11/15
5.9K0
【算法分析】分支限界法详解+范例+习题解答
单源最短路径问题——分支限界法(Java)
当所给问题是从n个元素的集合中找出满足某种性质的子集时,相应的解空间树称为子集树。在子集树中,|S0|=|S1|=…=|Sn-1|=c,即每个结点有相同数目的子树,通常情况下c=2,所以,子集树中共有2n个叶子结点,因此,遍历子集树需要O(2n)时间。
WHYBIGDATA
2023/01/31
6680
单源最短路径问题——分支限界法(Java)
五大常用算法之五:分支限界法
类似于回溯法,也是一种在问题的解空间树T上搜索问题解的算法。但在一般情况下,分支限界法与回溯法的求解目标不同。回溯法的求解目标是找出T中满足约束条件的所有解,而分支限界法的求解目标则是找出满足约束条件的一个解,或是在满足约束条件的解中找出使某一目标函数值达到极大或极小的解,即在某种意义下的最优解。
全栈程序员站长
2022/07/15
2580
五大常用算法之分支定界法
看了五大常用算法之一这篇博文,感觉理解了很多,可是纯粹都是理论,缺少一些示例,所以准备综合一篇博文,以帮助自己记忆,原文:
全栈程序员站长
2022/11/15
8720
【精选】算法设计与分析(第六章分支限界法)
命运之光
2024/03/20
4630
【精选】算法设计与分析(第六章分支限界法)
《算法设计与分析》期末不挂科的原因_算法设计与分析重点
感兴趣的话可以参考 算法竞赛、小白学DP(动态规划) 学习相关代码的具体实现(Java版)
全栈程序员站长
2022/11/08
1.3K0
《算法设计与分析》期末不挂科的原因_算法设计与分析重点
装载问题 ——分支限界法(Java)
有一批共n个集装箱要装上2艘载重量分别为C1和C2的轮船,其中集 装箱i的重量为Wi,且
WHYBIGDATA
2023/01/31
6140
装载问题 ——分支限界法(Java)
Java常用的五大算法详解
1.把一个复杂的问题分成两个或更多的相同或相似的子问题,再把子问题分成更小的子问题……直到最后子问题可以简单的直接求解,原问题的解即子问题的解的合并。
程序狗
2021/12/15
2.1K0
【算法分析】简答考核+算法
✨分治法的基本思想✨ 将一个规模为 n 的问题分解为 k 个规模较小的子问题,这些子问题互相独立且与原问题相同。递归地解这些子问题,然后将各个子问题的解合并得到原问题的解。
司六米希
2022/11/15
5940
【算法分析】简答考核+算法
【愚公系列】2023年12月 五大常用算法(五)-分支限界算法
分支限界算法是一种解决最优化问题的常用算法,其基本思想是将问题的解空间划分为一棵树,每个节点代表一个可能的解,从根节点开始搜索,搜索过程中根据约束条件和限界条件,逐步减小搜索空间,只保留可能成为最优解的子树。具体来说,分支限界算法有以下几个基本步骤:
愚公搬代码
2023/12/16
3460
算法分析与设计论文
递归算法是一个过程或函数在其定义或说明中有直接或间接调用自身的一种方法。它通常把一个大型复杂的问题转化为一个与原问题类似的规模较小的问题来求解。
全栈程序员站长
2022/09/20
6370
算法分析与设计论文
五大算法设计思想,你都知道吗?
1.概念: 将一个难以直接解决的大问题,分割成一些规模较小的相同问题,以便各个击破,分而治之。
架构师修行之路
2021/09/24
8870
互联网大厂常考算法及套路深度解析
基本思想: 根据提出的问题枚举所有可能状态,并用问题给定的条件检验哪些是需要的,哪些是不需要的,能使命题成立即为其解。
宇宙之一粟
2020/10/26
7390
基础算法策略总结-分而治之,动态规划,贪心策略; 回溯法和分支定界;
最近在刷算法题目,突然重新思考一下大二时学习的算法分析与设计课程,发现当时没有学习明白,只是记住了几个特定的几个题型;现在重新回归的时候,上升到了方法学上了;感觉到了温故知新的感觉;以下总结自童咏昕老师的算法设计与分析课程和韩军老师的算法分析与设计课程;当我们遇到一个问题的时候,我们先想出一个简单的方法,可以之后再在这个方法的基础上进行优化;
西湖醋鱼
2020/12/30
1.2K0
基础算法策略总结-分而治之,动态规划,贪心策略; 回溯法和分支定界;
【算法不挂科】算法期末考试题库(带解析)【选择题53道&填空题36道&算法填空题7道&问答题33道】
A .(1)(2)(3) B.(1)(2)(4) C.(1)(3)(4) D.(1)(2)(3)(4)
YY的秘密代码小屋
2025/01/06
4740
【算法不挂科】算法期末考试题库(带解析)【选择题53道&填空题36道&算法填空题7道&问答题33道】
【算法学习】分枝限界法
关注那些不断已被他人成功应用的新思路。你的原创思想只应该应用在那些你正在研究的问题上。
短短的路走走停停
2019/11/19
1.3K0
【算法学习】分枝限界法
0-1背包-分支限界
算法描述:   活结点优先队列中结点元素N的优先级由该结点的上界函数Bound计算出的值uprofit给出。   子集树中以结点N为根的子树中任一结点的价值不超过N.profit。   可用一个最大堆来实现或节点优先队列。   N.weight 是结点N所相应的重量,N.profit是N所相应的价值,N.uprofit是结点N的价值上界,最大堆以这个值作为优先级。 class Object{ friend int Knapsack(int *,int *,int ,int ,int *); publ
用户1154259
2018/01/17
7090
算法基础
分治法的基本思想: 将一个规模为 n 的问题分解为 k 各规模较小的子问题, 这些子问题互相独立且与原问题是同类型问题。 递归地解这些子问题, 然后把各个子问题的解合并得到原问题的解。 分治法所能解决的问题一般具有的几个特征是: 该问题规模缩小到一定程度就可以容易地解决; 该问题可以分解为若干个规模较小的同类型问题; 利用该问题分解出的子问题的解可以合并为该问题的解; 原问题分解出的各个子问题是相互独立的, 即子问题之间不包含公共的子问题。 分治法可以解决的具体问题:矩阵连乘、大数乘法、二分法搜索、快速排序
yawn
2018/03/14
1.1K0
​回溯法(Java)
回溯法实际上一个类似枚举的搜索尝试过程,主要是在搜索尝试过程中寻找问题的解,当发现已不满足求解条件时,就「回溯」返回,尝试别的路径。
WHYBIGDATA
2023/01/31
6180
​回溯法(Java)
算法面试题
小o表示实际的时间复杂度,大O表示时间复杂度。将真实的时间复杂度中的每个式子的常数项设成1,并取多项式中单项最大的那个项,就成了大O
jiewuyou
2022/09/29
2770
相关推荐
【算法分析】分支限界法详解+范例+习题解答
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档