树搜索策略

本文探讨了深度优先搜索(DFS)、广度优先搜索(BFS)以及最佳优先搜索(Best-First)算法,通过栈和队列的数据结构,展示了它们的实现原理、区别与优化策略。了解如何在实际问题中结合评价函数和启发式方法提升搜索效率。
摘要由CSDN通过智能技术生成

深度优先(Depth-First)

栈(Stack),后进先出,每次扩展当前节点的子节点,直至没有子节点回溯

1. 构造一个由根构成的单元素栈S;
2. If Top(S)是目标节点 3. Then 输出解,停止;
4. ELSE T=Top(S), Pop(S);
5. 把T的所有子节点压入栈顶;
6. If S空 Then 无解;
7. Else goto 2.

广度优先(Bread-thFirst)

队列(Queue),先进先出,每次对当前元素进行扩展,扩展后的节点添加到队列里面

1. 构造仅由根组成的队列Q;
2. IF Q的第一个元素x是目标节点 3. Then 输出解,停止;
4. ELSE 从Q中删除x,把x的所有子节点加入Q的末尾;
5. IF Q空 Then 无解
6. Else goto 2.

爬山法(Hill Climbing)

在深度优先搜索过程中, 我们经常遇到多个节点可以扩展的情况, 首先扩展节点的选取很重要

  • 爬山策略使用贪心方法确定搜索的方向, 是优化的深度优先搜索策略
  • 爬山策略使用启发式测度来排序节点扩展的顺序
1. 构造由根组成的单元素栈S;
 2. If Top(S)是目标节点 Then 停止;
 3. Pop(S);
 4. S的子节点按照其启发测度由大到小的顺序压入S;
 5. If S空 Then 失败 Else goto 2.

最佳优先(Best-First)

  • 结合深度优先和广度优先的优点于一个方法
  • 根据一个评价函数, 在目前产生的所有节点中选择具有最小评价函数值的节点进行扩展.
  • 具有全局优化观念, 而爬山策略仅具有局部优化观念.
1. 使用评价函数构造一个堆H, 首先构造由根组成的单元素堆;
 2. If H的根r是目标节点 Then 停止;
 3. 从H中删除r, 把r的子节点插入H;
 4. If H空 Then 失败 Else goto 2.
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值