一 点睛
树的广度优先搜索实际上就是层次遍历。首先遍历第 1 层,然后第 2 层......同一层次按照从左到右的顺序访问,直到最后一层。一棵树如下图所示,先遍历第 1 层 A,然后遍历第 2 层的 B 和 C,再遍历第 3 层的 D、E、F,最后遍历第 4 层的 G。
二 分支限界法
分支限界法通常以广度优先或最小耗费(最大效益)优先的方式搜索问题的解空间树。活节点表是关键数据结构。活节点表的实现通常有两种形式:一种是普通队列,即先进先出队列,另外一种是优先级队列,按照优先级决定哪个节点为当前扩展节点。根据活节点表不同,分支限界法分为以下两种:队列式分支限界法和优先队列分支限界法。
分支限界法的问题秘籍如下。
1 定义解空间
2 确定解空间的组织结构
3 搜索解空间
三 队列式分支限界法解决背包问题算法设计
1 定义问题的解空间
背包问题属于典型的 01 背包问题,问题的解是从 n 个物品张选择一些物品,使其在不超过容量的情况下价值最大。每个物品都有且只有两种状态:要么被装入,要么不被装入。那么第 i 个物品被装入达到目标还是不被装入呢?显然还不确定。因此,可以用变量 Xi 表示第 i 个物品是否被装入背包的状态,用 0 表示不被装入,用 1 表示被装入。问题的解空间是{x1,x2,......xn},其中 xi = 0 或 xi = 1。
2 确定解空间的组织结构
问题的解空间描述了 2 的 n 次方种可能的解,解空间树为子集树,解空间树的深度为问题的规模 n。
3 搜素解空间
对于任何一个中间节点 z