Beam Search 基础知识-广度优先及深度优先搜索

原创 2016年06月01日 10:39:23

概要

介绍了深度优先和广度优先的搜索方法

基本概念

open 表 保存未访问过的路径
close 表 保存访问过的路径,防止进入一个死循环。

具体算法

从某一个开始节点访问所有的可到达的顶点在很多场景下非常有用,例如下图中我们想从H点到C点如何遍历?
深度/广度优先搜索算法示例

具体步骤

  1. 从H开始,找到H的直接后继{B,D, L},从而构成了三条候选路径{H->B,H->D,H->L},此时{B,D,L}成为open vertices
  2. 将open vertices (及他们所属的路径)放入open表中。
  3. 从open表中选取一个vertex移除open表并生成此vertex的后继
    1. 例如我们选择了L,其后继为{M,F,H},
    2. 因为H已经被访问过了,所以不能放入open表中,否则会造成死循环,所以此时open表中有{B,D,M,F}
      为了防止造成死循环,所以会有一个close表,记录已经被访问过的点,一旦一个点进入close表,就永远不会被访问第二次
  4. 如此继续知道找到目标顶点或者返回找不到目标顶点

注意:广度优先还是深度优先完全由从open表中的数据访问方式决定
* open表是先进后出则是深度优先
* open表是先进先出则是广度优先

样例及伪代码

深度优先样例

Vertex visited (and hence closed) Open list (stack top at left)
H B D L
B D D L
D G J D L
G J J D L
J E I M J D L
E K I M J D L
K I M J D L
I F M J D L
F A L M J D L
A L M J D L
L M M J D L
M C M J D L
C M J D L

深度优先伪代码

/* initialization */
queue openList = { startVertex }

/* loop */
while ( closedNodes != numberOfNodes && !openList.empty())
{
  closingVertex = openList.dequeue();
  increment number of closedNodes;

  for each non-closed vertex not in the openList
     and with an edge to it from closingVertex
  {
    openList.enqueue( vertex );
  }

}

广度优先类似

参考资料

http://jhave.org/algorithms/graphs/depthbreadth/depth-breadth.shtml

Beam Search 简介

概要传统的广度优先策略能够找到最优的路径,但是在搜索空间非常大的情况下,内存占用是指数级增长,很容易造成内存溢出,因此提出了beam search的算法。 beam search尝试在广度优先基础...
  • xljiulong
  • xljiulong
  • 2016年06月01日 11:41
  • 5435

一些重要的算法------启发式搜索,束搜索(beam search),二分查找算法 and so on............

转自:http://coolshell.cn/articles/2583.html 下面是一些比较重要的算法,原文罗列了32个,但我觉得有很多是数论里的,和计算机的不相干,所以没有选取。下面...
  • xiaozhuaixifu
  • xiaozhuaixifu
  • 2013年06月19日 19:40
  • 6623

二叉树的深度和广度优先搜索

深度优先搜索算法(Depth First Search),是搜索算法的一种。是沿着树的深度遍历树的节点,尽可能深的搜索树的分支。 当节点v的所有边都己被探寻过,搜索将回溯到发现节点v的那条边的起...
  • w616589292
  • w616589292
  • 2016年02月28日 10:46
  • 848

图的深度优先搜索/Depth-first search/C++

转自:http://www.cnblogs.com/yanlingyin/archive/2011/12/26/Depth-firstsearch.html 图的深度优先搜索/Dep...
  • tomisaboy
  • tomisaboy
  • 2016年02月27日 17:28
  • 643

算法:图的广度优先遍历(Breadth First Search)

图的遍历和树的遍历类似,我们希望从图中某一顶点出发访遍图中其余顶点,且使每一个顶点仅被访问一次,这一过程就叫做图的遍历(Traverse Graph)。 图的遍历方法一般有两种,第一种是我们在前面讲...
  • Simba888888
  • Simba888888
  • 2013年04月30日 09:22
  • 16952

[数据结构]深度优先搜索算法(Depth-First-Search,DFS)

深度优先搜索算法的概念  与广度优先搜索算法不同,深度优先搜索算法类似与树的先序遍历。这种搜索算法所遵循的搜索策略是尽可能“深”地搜索一个图。它的基本思想如下:首先访问图中某一个起始顶点v,然后由v出...
  • m0_37316917
  • m0_37316917
  • 2017年04月27日 22:32
  • 1686

维特比算法以及解码时的beamSearch

维特比算法输入序列为词,输出序列为POS,采用HMM为例介绍维特比算法 这里HMM假设当前的输出只和上一时刻的输出状态相关。 迭代公式如下: π(t,i,j)=max(π(t−1,i)×q...
  • yiqingyang2012
  • yiqingyang2012
  • 2017年01月23日 12:04
  • 477

束搜索算法 BEAM Search

014-02-20 11:04 1384人阅读 评论(0) 收藏 举报 目录(?) 最近搜了几篇BEAM SEARCH 束搜索的文章,这篇最直白易懂,并有示例的详细步骤图解,比维基百科...
  • u012968002
  • u012968002
  • 2016年11月03日 13:24
  • 272

Beam Search(集束搜索/束搜索)

Beam Search(集束搜索/束搜索) 找遍百度也没有找到关于Beam Search的详细解释,只有一些比较泛泛的讲解,于是有了这篇博文。 首先给出wiki地址:http://en.wik...
  • AMDS123
  • AMDS123
  • 2017年06月13日 16:53
  • 700

深度优先搜索和广度优先搜索的比较与分析

深度优先搜索和广度优先搜索的比较与分析 一、深度优先搜索和广度优先搜索的深入讨论   (一)深度优先搜索的特点是: (1)无论问题的内容和性质以及求解要求如何不同,它们的程序结...
  • qq328691560
  • qq328691560
  • 2015年08月13日 15:46
  • 3509
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Beam Search 基础知识-广度优先及深度优先搜索
举报原因:
原因补充:

(最多只允许输入30个字)