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

版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

异步赠书:9月重磅新书升级,本本经典

敲重点:        活动规则:试读样章,评论区留言说一下你对本书的一些感想,同时关注异步社区博客,并留言你想要得到的图书。        活动时间:即日起-9月20日(活动奖项公告在10月9日) ...

beam search

Artificial Intelligence/Search/Heuristic search/Beam search Artificial Intelligence‎ | Search ...
  • pi9nc
  • pi9nc
  • 2013-06-10 15:54
  • 4213

Seq2Seq源码解析(基于Theano框架)

这是一篇关于seq2seq源码解析的文章。seq2seq是一个通用型 端到端(end-to-end)的学习框架,包括2个部分,一个是Encoder(编码器,负责编码源句子的输入),另外一个是Decod...

Beam搜素算法

Beam搜素算法的伪代码(Beam Search Algorithm) Beam算法是干什么的?他是搜索算法。大家知道,搜索算法可谓万能算法,问题只要有解,使用搜索算法在问题的解空间中搜索解,总可以...

Beam Search 简介

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

ubuntu-14.04 源码安装cntk笔记

linux版本安装安装环境 ubuntu14.04LTS(官方使用版本) 环境准备 安装 g++apt-get install g++安装gitapt-get install git安装ACML官网...

束搜索算法(Andrew Jungwirth 初稿)BEAM Search

·最近搜了几篇束搜索的文章,这篇最直白易懂,并有示例的详细步骤图解,比维基百科的更为合适,因此拿在这里,供参考。 原文链接:Beam Search Algorithm (Draft by Andrew...

神经网络机器翻译Neural Machine Translation(2): Attention Mechanism

端到端的神经网络机器翻译(End-to-End Neural Machine Translation)是近几年兴起的一种全新的机器翻译方法。前篇NMT介绍的基本RNN Encoder-Decoder结...

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

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

Beam search

Beam searchFrom Wikipedia, the free encyclopediaGraph and tree search algorithmsSearchAlpha-beta pru...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

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