int x=017 c语言,数据结构算法与应用-C语言017.pdf

下载

下载

第1 7章 分 枝 定 界

任何美好的事情都有结束的时候。现在我们学习的是本书的最后一章。幸运的是,本章用

到的大部分概念在前面各章中已作了介绍。类似于回溯法,分枝定界法在搜索解空间时,也经

常使用树形结构来组织解空间(常用的树结构是第 1 6章所介绍的子集树和排列树)。然而与回

溯法不同的是,回溯算法使用深度优先方法搜索树结构,而分枝定界一般用宽度优先或最小耗

费方法来搜索这些树。本章与第 1 6章所考察的应用完全相同,因此,可以很容易比较回溯法与

分枝定界法的异同。

相对而言,分枝定界算法的解空间比回溯法大得多,因此当内存容量有限时,回溯法成功

的可能性更大。

17.1 算法思想

分枝定界(branch and bound )是另一种系统地搜索解空间的方法,它与回溯法的主要区

别在于对E-节点的扩充方式。每个活节点有且仅有一次机会变成 E-节点。当一个节点变为 E-

节点时,则生成从该节点移动一步即可到达的所有新节点。在生成的节点中,抛弃那些不可

能导出(最优)可行解的节点,其余节点加入活节点表,然后从表中选择一个节点作为下一

个E-节点。从活节点表中取出所选择的节点并进行扩充,直到找到解或活动表为空,扩充过

程才结束。

有两种常用的方法可用来选择下一个E-节点(虽然也可能存在其他的方法):

1) 先进先出(F I F O ) 即从活节点表中取出节点的顺序与加入节点的顺序相同,因此活节

点表的性质与队列相同。

2) 最小耗费或最大收益法 在这种模式中,每个节点都有一个对应的耗费或收益。如果查

找一个具有最小耗费的解,则活节点表可用最小堆来建立,下一个 E-节点就是具有最小耗费

的活节点;如果希望搜索一个具有最大收益的解,则可用最大堆来构造活节点表,下一个 E-

节点是具有最大收益的活节点。

例17-1 [迷宫老鼠] 考察图16-3a 给出的迷宫老鼠例子和图 1 6 - 1的解空间结构。使用F I F O分枝

定界,初始时取( 1,1)作为E-节点且活动队列为空。迷宫的位置( 1 , 1)被置为1,以免再次

返回到这个位置。(1,1)被扩充,它的相邻节点( 1,2 )和(2 ,1)加入到队列中(即活节

点表)。为避免再次回到这两个位置,将位置( 1,2 )和(2 ,1)置为1。此时迷宫如图1 7 - 1 a

所示,E-节点( 1,1)被删除。

1 1 0 1 1 1 1 1 1

1 1 1 1 1 1 1 1 1

0 0 0 0 0 0 1 0 0

a ) b ) c )

图17-1 迷宫问题的F I F O分枝定界方法

第 1 7章 分 枝 定 界 5 1 7

下载

节点(1,2 )从队列中移出并被扩充。检查它的三个相邻节点(见图1 6 - 1的解空间),只有

(1,3 )是可行的移动(剩余的两个节点是障碍节点),将其加入队列,并把相应的迷宫位置置

为1,所得到的迷宫状态如图 17-1b 所示。节点( 1,2 )被删除,而下一个E-节点(2 ,1)将

会被取出,当此节点被展开时,节点(3,1)被加入队列中,节点(3,1)被置为1,节点(2 ,

1)被删除,所得到的迷宫如图17-1c 所示。此时队列中包含( 1,3 )和(3,1)两个节点。随

后节点(1,3 )变成下一个E-节点,由于此节点不能到达任何新的节点,所以此节点即被删除,

节点(3 ,1)成为新的E-节点,将队列清空。节点( 3 ,1)展开,(3 ,2 )被加入队列中,而

(3,1)被删除。(3 ,2 )变为新的E-节点,展开此节点后,到达节点(3,3 ),即迷宫的出口。

使用F I F O搜索,总能找出从迷宫入口到出

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值