【算法分析】分支限界法 一般方法

一、概述

分支限界算法类似于回溯算法。区别是回溯算法进行dfs搜索,而分支限界法进行bfs搜索。

过程:生成当前E节点的全部儿子之后,才从活结点表中选择下一个活结点作为新的E节点。(BFS,可以想想二叉树层序遍历的例子)

活结点:自己已经生成,但是儿子还没开始生成。

E节点:正在扩展的节点。

死节点:儿子节点已经全部生成。

分支限界法的活结点表:FIFO(队列)、LIFO(堆栈)

但是只有这两种活结点表过于死板。比如dfs的下一步就是答案了,但是bfs还要把当前层都扫完才能取下一层找到答案。所以引出了LC检索来优化这个问题。

二、LC-检索(least cost最低成本)

每次把当前节点的子节点放到活结点表中,每次按照成本函数取出成本最小的节点继续拓展。

(具体结合下面的15迷问题来理解LC检索的过程,以及估计函数的定义)

给出一个带有智力的排序函数来决定出当前活结点表中的优先权。(这和棋类游戏中的评估函数很像,对于当前局面给出一个评分)

如果假设我们已经知道答案了,根据答案定义了一个C(x)函数。

 根据这个成本函数就能较快的找出答案。(直接一部走到结尾还是只在在后一步进行优化?直接走一步,因为其他的节点成本值是∞根本不会选择)

 但实际上如果提前知道了结果是哪个,那也就没必要搜索了,所以给出一个具体的成本函数不太现实。但可以去大致估计一个成本。

f(h(x))中f()的作用是调整hx在公式中的权重。

三、15迷问题

 

 四、LC检索的抽象化控制

LC检索的抽象化控制,就是把LC检索的执行过程描述了一遍。(为什么叫抽象化,因为没有给出具体的代码)

步骤1:判断根节点是不是答案,如果是就结束了;如果不是,就把根节点当作第一个E节点。

步骤2:遍历E节点的所有子节点,如果有答案节点就结束;否则子节点放到活结点表中。

步骤3:活结点表为空就结束;不为空就选择成本值最小的当作E节点。

五、LC检索的特征

如果估计函数每个值的相对大小和实际成本函数每个值的相对大小相同的话,LC检索就可以找到最小的答案节点。

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
分支限界法和优先队列以及先进先出(FIFO)的概念在算法分析中有一些异同之处。 异同点如下: - 异同点1:分支限界法和优先队列都是用于解决问题的算法,但它们解决问题的方式和思想不同。 - 异同点2:分支限界法是一种搜索算法,通过将问题空间划分为多个子问题,并通过优先级队列来选择下一个要扩展的子问题,便更快地找到最优解。而优先队列是一种数据结构,用于存储具有优先级的元素,并根据优先级选择下一个要处理的元素。 - 异同点3:分支限界法在解空间树上以广度优先或最小耗费优先的方式搜索解,而优先队列可以根据元素的优先级进行排序和选择。 - 异同点4:分支限界法和优先队列都可以用于解决不同类型的问题,但它们的应用场景和具体实现方式可能有所不同。 相同点如下: - 相同点1:分支限界法和优先队列都可以用于解决复杂的问题,提高问题求解的效率。 - 相同点2:分支限界法和优先队列都可以通过选择下一个要处理的元素或子问题来进行搜索和扩展,以便更快地找到最优解。 总结起来,分支限界法和优先队列是两种不同的概念,分别用于解决问题的算法和数据结构。分支限界法通过划分问题空间和选择下一个要扩展的子问题来搜索解空间树,而优先队列则是一种数据结构,用于存储具有优先级的元素,并根据优先级选择下一个要处理的元素。它们在解决问题的方式和思想上有所不同,但都可以用于提高问题求解的效率。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值