限界分支法优先级队列方式出口和追踪解的两种方法总结

102 篇文章 0 订阅
70 篇文章 0 订阅

在优先级队列分支限界法法中,何时为出接口,也就是while循环何时退出了?

解空间为[0,1,2…,n-1],当depth = n-1时,就可以记录结果了,可以考虑循环体退出了(实际上能不能出,还要看他的权够不够大,不够大的话,还是要老老实实的去选择优先级高的分支),换句话来说,一旦有一个一个叶子节点弹出了,循环体就结束了

然后就是最优解和最优解方案的追踪

一般来说有两种方案:
在每个活结点(就是要存入优先级队列的数据)中保存从root到当前结点的路径path,也就是一个数组,这个数组可以是一个等长的,前面保存的是走过的路径,后面是还未走过的路径,所以一旦得到弹出的叶节点,我们就可以从中得到path,注意这个结点结构里没有保存他的前驱结点的指针

另外一种实现方案:就是完全把解空间看出一个空间树,树的结点该有的信息,都保存下来,比如权重,用于结点优先级排序,当前的选择,就是当前你是选择了那个分支或者叫做结点,最重要的是它的前驱结点是谁,不管是什么树,他的前驱结点只有一个,我们得到了叶子结点,就可以从叶子追溯到root,实际上上述就是在***构造部分解空间树***

我们之前学习回溯法或者分支限界法,可能会有疑问,都说过解空间是一棵解空间树,子集树,完全n叉树,排列树,但是我们编码的时候,连树、结点的影子都没看到。

回溯法树隐藏在递归里,递归就是一棵树,限界分支法我们大部分看到的例子是使用第一种方案,程序只要保持持续更新最优值和路径path数组,路径path数组记录了每一步的选择,相当于只是把结点里的当前的选择和parent,拿出来单独更新了,拿出来更新的代价是,每一个加入到队列的结点都要更新path数组,好处是可以很简单的判断那些解已经走过了,那些没有走过

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值