词条 深度优先搜索

深度优先搜索

深度优先搜索算法英语:Depth-First-Search,简称DFS)是一种用于遍历或搜索树或图的算法。沿着树的深度遍历树的节点,尽可能深的搜索树的分支。当节点v的所在边都己被探寻过,搜索将回溯到发现节点v的那条边的起始节点。这一过程一直进行到已发现从源节点可达的所有节点为止。如果还存在未被发现的节点,则选择其中一个作为源节点并重复以上过程,整个进程反复进行直到所有节点都被访问为止。属于盲目搜索。

深度优先搜索是图论中的经典算法,利用深度优先搜索算法可以产生目标图的相应拓扑排序表,利用拓扑排序表可以方便的解决很多相关的图论问题,如最大路径问题等等。

因发明“深度优先搜索算法”,约翰·霍普克洛夫特与罗伯特·塔扬共同获得计算机领域的最高奖:图灵奖。

深度优先搜索简介资料
b - 分支系数m - 图的最大深度
O(b^m)
O(bm)
搜索算法
深度优先搜索相关文献
园路设计管理优先还是使用优先?
园路设计管理优先还是使用优先?,景观设计当中园路的设计十分重要,是连接景点以及各个功能空间的纽带,是整个景观
查看全文
搜索
搜索方式按是否使用启发式信息分启发式搜索盲目搜索按问题的表示方式分状态空间搜索与/或树搜索搜索策略宽度优先搜索宽度优先搜索算法是沿着树的宽度遍历树的节点,如果发现目标,则算法中止。属于盲目搜索。深度优先搜索深度优先搜索沿着树的最大深度方向生成节点并与目标节点进行比较,只有当上次访问的节点不是目标节点,而且没有其他节点可以生成的时候,才转到上次访问节点的父节点,然后搜索该节点的其他子节点。因此深度优先搜索也称为回溯搜索。它既不是完备的,也不是最优的。有时候,某些特定的问题会产生大量重复的节点。例如“八数码”问题就是这样的,当每次运用向上、向下、向左、向右移动空格的算符时,可能产生与已经产生的节点重复的节点。当再次搜索到这个重复节点时,由于应用的算符基本一致,还会产生重复,所以为了节约时间和存储空间,往往在深度优先算法中设立一个机制,用来删除这些重复的节点,以提高效率。迭代加深搜索(ID搜索)...
查看全文
广度优先搜索
作法BFS是一种盲目搜寻法,目的是系统地展开并检查图中的所有节点,以找寻结果。换句话说,它并不考虑结果的可能位址,彻底地搜索整张图,直到找到结果为止。BFS并不使用经验法则算法。从算法的观点,所有因为展开节点而得到的子节点都会被加进一个先进先出的队列中。一般的实现里,其邻居节点尚未被检验过的节点会被放置在一个被称为open的容器中(例如伫列或是链表),而被检验过的节点则被放置在被称为closed的容器中。(open-closed表)实现方法首先将根节点放入队列中。从队列中取出第一个节点,并检验它是否为目标。若队列为空,表示整张图都检查过了——亦即图中没有欲搜寻的目标。结束搜寻并回传“找不到目标”。重复步骤2。C的实现/***ADDQ(Q,p)-pPUSH入Q*DELQ(Q)-POPQ並返回Q頂*FIRSTADJ(G,v)-v的第一個鄰接點,找不到則返回-1*NEXTADJ(G,v)-v的下...
查看全文
深度优先搜索
C++的实现定义一个结构体来表达一个NODE的结构:structNode{intself;//数据Node*left;//左节点Node*right;//右节点};那么我们在搜索一个树的时候,从一个节点开始,能首先获取的是它的两个子节点。例如:“ABCDEFG”A是第一个访问的,然后顺序是B和D、然后是E。然后再是C、F、G。那么我们怎么来保证这个顺序呢?这里就应该用堆栈的结构,因为堆栈是一个先进后出的顺序。通过使用C++的STL,下面的程序能帮助理解:constintTREE_SIZE=9;std::stackunvisited;Nodenodes[TREE_SIZE];Node*current;//初始化树for(inti=0;i<TREE_SIZE;i++){nodes[i].self=i;intchild=i*2+1;if(childright);//把右边压入因为右边的访问次序是...
查看全文
优先股
优先股的特征股利优先分派一般而言,优先股在股利分派上具有优先性。股利分派的优先性并不保证股利一定会分派,但如果公司分派普通股股利,则必须分派优先股股利。优先股可以是可累积的或不可累积的。若优先股为可累积优先股,则一旦发行优先股的公司某一期间不分派优先股股利(或只按低于约定的股息率分派),就必须在之后分派,优先股股利在各个不分派或少分派股利的期间不断累积。若优先股为不可累积优先股,则一旦发行优先股的公司某一期间不分派股利,优先股持有者就无法在以后期间获得补偿。优先股的种类是否参加公司利润分配是否可以转换为普通股是否可被公司赎回股息是否可调换
查看全文
深度优先搜索相关标签
图算法
搜寻算法