树的搜索策略

问题解空间的树表示

许多实际应用中的计算问题均是NP-完全问题,这些问题不存在多项式时间算法,除非NP=P。当NP-完全问题具有较小的输入规模时,可以穷举问题的解空间。而我们常常将问题的解空间表示成搜索树

广度优先搜索(BFS)

使用队列(Queue)

  1. 构造仅含树根节点的队列Q;
  2. 若队列Q的第一个节点x是目标节点,则输出节点x对应的解,算法结束
  3. 删除队列Q的第一个节点x,如果绑定删除B(x)判定以x为根的子树可能存在解,则将x的所有孩子节点加入队列Q的末尾;
  4. 如果队列Q为空,则问题无解,算法结束,否则,转到第2步;

深度优先搜索(DFS)

使用栈(Stack)

  1. 构造仅含树根节点的栈S;
  2. 如果栈顶元素x是目标节点,则输出节点x对应的解,算法结束;
  3. 弹出栈顶元素x,如果绑定函数B(x)判定以x为根的子树可能存在解,则将x的所有孩子一次压入栈
  4. 如果栈S为空,则问题无解,算法结束,否则,转到第2步;

爬山法

深搜+贪心

  1. 构造仅含树根节点的栈S;
  2. 如果栈顶元素x是目标节点,则输出节点x对应的解,算法结束
  3. 弹出栈顶元素x,如果绑定函数B(x)判定以x为根的子树可能存在解;则将x的所有孩子节点按隐式月数值P()从大到小依次压入栈
  4. 如果栈S为空,则问题无解,算法结束,否则,转到第2步-

结合了深度优先搜索和广度搜索的优点
使用堆

  1. 构造仅含树根节点的堆Q;
  2. 如果堆顶元素x是目标节点,则输出节点x对应的解,算法结束;
  3. 抽取堆顶元素x,如果绑定函数B(x)判定x以x为根的子树可能存在解,则将x的所有孩子节点插入堆
  4. 如果堆Q为空,则问题无解,算法结束,否则,转到第2步;

分支限界法

前面的集中搜索策略虽然可用于求解许多问题,但难以用于高效地求解优化问题。而分支限界搜索法,是求解优化问题的最有效的搜索策略。

用于求解最小化问题(最大化需要转为最小化问题),各种组合优化问题(如人员分配问题,旅行商问题)

  1. 爬山法得到问题的一个可行解
  2. 继续利用爬山法搜索,搜索时剪除不能取得优化解的分支
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值