社区
数据结构与算法
帖子详情
谁可以详细讲解一下分支定界算法!!!
yougaocuo
2002-07-22 08:23:38
分支定界算法(最好用c语言来举例)!!!! 谢了!!
...全文
1018
4
打赏
收藏
谁可以详细讲解一下分支定界算法!!!
分支定界算法(最好用c语言来举例)!!!! 谢了!!
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
4 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
shihong8488
2002-07-22
打赏
举报
回复
楼上兄弟,怎么没把话说完,
“剪枝算法按照其判断思路可大致分成两类:可行性剪枝及最优性剪枝。
下面分别结合例题对这两种方法进行阐述。”
下文呢,能不能发给我,谢谢,shihong8488@yahoo.com.cn
shihong8488
2002-07-22
打赏
举报
回复
分支定界是一种系统地搜索解空间的方法,常用的方法有:
1)先进先出(FIFO) 即从活结点表中取出结点的顺序与加入结点的顺序相同,因此活结点表的性质与队列相同
2)最小耗费或最大收益法 如果查找一个具有最小耗费的解,则活结点表可用最小堆来建立,下一个E-结点就是具有最小耗费的活结点;如果希望搜索一个具有最大收益的解,则可以用最大堆来构造活结点表,下一个E-结点是具有最大收益的活结点
具体算法有很多,有货箱装船问题的FFIFO分支定界算法;计算最优子集的分支定界算法;最大收益分支定界算法……
你可以到www.cise.ufl.edu/~sahni/dsac 看看!
atlantis13579
2002-07-22
打赏
举报
回复
在竞赛中,我们有时会碰到一些题目,它们既不能通过建立数学模型解决,又没有现成算法可以套用,或者非遍历所有状况才可以得出正确结果。这时,我们就必须采用搜索算法来解决问题。
搜索算法按搜索的方式分有两类,一类是深度优先搜索,一类是广度优先搜索。我们知道,深度搜索编程简单,程序简洁易懂,空间需求也比较低,但是这种方法的时间复杂度往往是指数级的,倘若不加优化,其时间效率简直无法忍受;而广度优先搜索虽然时间复杂度比前者低一些,但其庞大的空间需求量又往往让人望而却步。
所以,对程序进行优化,就成为搜索算法编程中最关键的一环。
本文所要讨论的便是搜索算法中优化程序的一种基本方法棗“剪枝”。
什么是剪枝
相信刚开始接触搜索算法的人,都做过类似迷宫这样的题目吧。我们在“走迷宫”的时候,一般回溯法思路是这样的:
1、这个方向有路可走,我没走过
2、往这个方向前进
3、是死胡同,往回走,回到上一个路口
4、重复第一步,直到找着出口
这样的思路很好理解,编程起来也比较容易。但是当迷宫的规模很大时,回溯法的缺点便暴露无遗:搜索耗时极巨,无法忍受。
我们可不可以在向某个方向前进时,先一步判断出这样走会不会走到死胡同里呢?这样一来,搜索的时间不就可以减少了吗?
答案是:可以的。
剪枝的概念,其实就跟走迷宫避开死胡同差不多。若我们把搜索的过程看成是对一棵树的遍历,那么剪枝顾名思义,就是将树中的一些“死胡同”,不能到达我们需要的解的枝条“剪”掉,以减少搜索的时间。
搜索算法,绝大部分需要用到剪枝。然而,不是所有的枝条都可以剪掉,这就需要通过设计出合理的判断方法,以决定某一分支的取舍。在设计判断方法的时候,需要遵循一定的原则。
剪枝的原则
1、正确性
正如上文所述,枝条不是爱剪就能剪的。如果随便剪枝,把带有最优解的那一分支也剪掉了的话,剪枝也就失去了意义。所以,剪枝的前提是一定要保证不丢失正确的结果。
2、准确性
在保证了正确性的基础上,我们应该根据具体问题具体分析,采用合适的判断手段,使不包含最优解的枝条尽可能多的被剪去,以达到程序“最优化”的目的。可以说,剪枝的准确性,是衡量一个优化算法好坏的标准。
3、高效性 设计优化程序的根本目的,是要减少搜索的次数,使程序运行的时间减少。但为了使搜索次数尽可能的减少,我们又必须花工夫设计出一个准确性较高的优化算法,而当算法的准确性升高,其判断的次数必定增多,从而又导致耗时的增多,这便引出了矛盾。
因此,如何在优化与效率之间寻找一个平衡点,使得程序的时间复杂度尽可能降低,同样是非常重要的。倘若一个剪枝的判断效果非常好,但是它却需要耗费大量的时间来判断、比较,结果整个程序运行起来也跟没有优化过的没什么区别,这样就太得不偿失了。
综上所述,我们可以把剪枝优化的主要原则归结为六个字:正确、准确、高效。
剪枝算法按照其判断思路可大致分成两类:可行性剪枝及最优性剪枝。
下面分别结合例题对这两种方法进行阐述。
ilovett
2002-07-22
打赏
举报
回复
gz
分支
定
界
法 python_
分支
定
界
法
分支
定
界
法(branch and bound)是一种求解离散数据组合的最优化问题。该
算法
执行的效率取决于你所找的问题解空间的上下
界
,如果找到一个很紧凑的上下
界
进行剪枝操作,该
算法
的执行效率会非常高,因此它是最有可能在多项式时间内求解NP问题的
算法
。使用
分支
定
界
算法
的一般步骤为:构造一棵搜索树,该搜索树指的是所有解空间,因此通过遍历该搜索树可以遍历到所有的解;构造问题解的上下
界
,上
界
一般为之前求出的...
分支
定
界
法
分支
定
界
法(branch and bound)是一种求解离散数据组合的最优化问题。该
算法
执行的效率取决于你所找的问题解空间的上下
界
,如果找到一个很紧凑的上下
界
进行剪枝操作,该
算法
的执行效率会非常高,因此它是最有可能在多项式时间内求解NP问题的
算法
。 使用
分支
定
界
算法
的一般步骤为: 构造一棵搜索树,该搜索树指的是所有解空间,因此通过遍历该搜索树可以遍历到所有的解; 构造问题解的上下
界
,上
界
一般为之前...
分支
限
界
(Branch and Bound )
算法
分支
定
界
(branch and bound)
算法
是一种在问题的解空间树上搜索问题的解的方法。但与回溯
算法
不同,
分支
定
界
算法
采用广度优先或最小耗费优先的方法搜索解空间树,并且,在
分支
定
界
算法
中,每一个活结点只有一次机会成为扩展结点。 除少数整数规划可以用线性规划的单纯形法直接求解外,一般整数规划必需寻找新的求解方法。这里我们介绍全整数规划的分枝
定
界
方法,它也可以用于求解混合整数规划问题
整数规划 |
分支
定
界
算法
求解0-1背包问题(附MATLAB代码)
十分钟学会
分支
定
界
算法
求解0-1背包问题
分支
定
界
法解TSP问题(one-tree
算法
定
界
)附java代码
文章的知识来自于微信公众号“数据魔术师”,侵删。 针对
分支
定
界
法解TSP问题,有两种常见的
定
界
方法:one-tree
算法
和匈牙利
算法
。这篇文章介绍one-tree
算法
定
界
,求TSP问题。 首先简单说一下
分支
定
界
法的基本思想。
分支
定
界
法 假设有最小化的整数规划问题A,它相应的线性松弛(LP relaxation)规划问题为B。 若要求解问题A,先从解问题B开始,若其最优解不符合A的整数条件,那么B的最优目标函数值必是A的最优目标函数值 z* 的下
界
,记作 Z ;而 A 的任意可行解的目标函数值.
数据结构与算法
33,010
社区成员
35,327
社区内容
发帖
与我相关
我的任务
数据结构与算法
数据结构与算法相关内容讨论专区
复制链接
扫一扫
分享
社区描述
数据结构与算法相关内容讨论专区
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章