zoukankan      html  css  js  c++  java
  • 算法入门7:分支限界法

    上一篇回溯法中已经提到过,回溯法的思想是深度优先搜索加剪枝,与之相对,分支限界法的思想是广度优先搜索加剪枝。

    1. 分支限界法 – 广度优先搜素                                         

    1. 简单概述

    分支限界法思路的简单描述是:把问题的解空间转化成了图或者树的结构表示,然后使用广度优先搜索策略进行遍历,遍历的过程中记录和寻找所有可行解或者最优解。

    基本思想类同于:

    图的广度优先遍历

    二叉树的层序遍历

    也就是:对于当前节点,一次性扩展其所有可行的子节点。

    对照图的广度优先遍历就很容易理解。

    2. 详细描述

    详细的描述则为:

    1) 首先将问题的解空间转化成图或者树的结构表示,然后维护一张活节点表。

    2) 初始时,将根节点加入活节点表

    3) 当活节点表不空,从活节点表中取出一个节点,成为当前扩展节点。如果表为空,跳转至步骤6结束。

    4) 判断当前扩展节点是否得到了一个可行解或更优解,如果是,记录或更新问题的解。

    5)将当前扩展节点的所有可行子节点一次性全部生成,加入到活节点表中。跳转到步骤3

    6)算法结束

    活节点表的数据结构可以是FIFO队列或者优先权队列。

    3. 回溯法应用

    分支限界法通常用于求解问题的一个可行解或者最优解。

    2. 经典问题                                    

    (1)装载问题

    (2)0-1背包问题

    (3)旅行售货员问题

    (4)八皇后问题

    (5)迷宫问题

    (6)图的m着色问题

    分支限界法和回溯法很相似,只是在空间树的搜索方式上不同(一个深度优化,一个广度优先)。

    分支限界法的具体经典问题此处不再细述。其中一个经典案例《旅行售货员问题》可以参考我之前的一篇文章

            分支限界法----旅行售货员问题

    转载本文请注明作者和出处

    作者 :JarvisChu

    出处:http://blog.csdn.NET/jarvischu

  • 相关阅读:
    Java遍历Map键、值。获取Map大小的方法
    Oracle CASE WHEN 用法介绍
    JS动态改变select选择变更option的index值
    js对select动态添加和删除OPTION
    在js中使用createElement创建HTML对象和元素
    清空select标签中option选项的3种不同方式
    json-lib包笔记
    异常:javax.el.PropertyNotFoundException: Property 'id' not found on ..........
    golang struct的使用
    golang多维数组的切片
  • 原文地址:https://www.cnblogs.com/aabbcc/p/6504545.html
Copyright © 2011-2022 走看看