深度优先搜索和广度优先搜索、A星算法三种算法的区别和联系?

作者&投稿:崔孔 (若有异议请与网页底部的电邮联系)
深度优先搜索和广度优先搜索,A星算法三种算法的区别和联系~

在说它之前先提提状态空间搜索.状态空间搜索,如果按专业点的说法就是将问题求解过程表现为从初始状态到目标状态寻找这个路径的过程.通俗点说,就是 在解一个问题时,找到一条解题的过程可以从求解的开始到问题的结果(好象并不通俗哦).由于求解问题的过程中分枝有很多,定性,不完备性造成的,使得求解的路径很多这就构成了一个图,我们说这个图就是状态空间.问题的求解实际上就是在这个图中找到一条路径可以从开始到结果.这个寻找的过程就是状态空间搜索.

深度优先搜索(又名回溯)建立简单图的生成树的过程本质是递归.宽(广)度优先搜索与深度优先搜索复杂度都为O(e)或者说是O(n的平方).其中n为顶点数,e为边数.

1、何谓启发式搜索算法
在说它之前先提提状态空间搜索。状态空间搜索,如果按专业点的说法就是将问题求解过程表现为从初始状态到目标状态寻找这个路径的过程。通俗点说,就是 在解一个问题时,找到一条解题的过程可以从求解的开始到问题的结果(好象并不通俗哦)。由于求解问题的过程中分枝有很多,主要是求解过程中求解条件的不确 定性,不完备性造成的,使得求解的路径很多这就构成了一个图,我们说这个图就是状态空间。问题的求解实际上就是在这个图中找到一条路径可以从开始到结果。 这个寻找的过程就是状态空间搜索。
常用的状态空间搜索有深度优先和广度优先。广度优先是从初始状态一层一层向下找,直到找到目标为止。深度优先是按照一定的顺序前查找完一个分支,再查找另一个分支,以至找到目标为止。这两种算法在数据结构书中都有描述,可以参看这些书得到更详细的解释。
前面说的广度和深度优先搜索有一个很大的缺陷就是他们都是在一个给定的状态空间中穷举。这在状态空间不大的情况下是很合适的算法,可是当状态空间十分大,且不预测的情况下就不可取了。他的效率实在太低,甚至不可完成。在这里就要用到启发式搜索了。
启发式搜索就是在状态空间中的搜索对每一个搜索的位置进行评估,得到最好的位置,再从这个位置进行搜索直到目标。这样可以省略大量无畏的搜索路径,提 到了效率。在启发式搜索中,对位置的估价是十分重要的。采用了不同的估价可以有不同的效果。我们先看看估价是如何表示的。
启发中的估价是用估价函数表示的,如:

f(n) = g(n) + h(n)

其中f(n) 是节点n的估价函数,g(n)实在状态空间中从初始节点到n节点的实际代价,h(n)是从n到目标节点最佳路径的估计代价。在这里主要是h(n)体现了搜 索的启发信息,因为g(n)是已知的。如果说详细点,g(n)代表了搜索的广度的优先趋势。但是当h(n) >> g(n)时,可以省略g(n),而提高效率。这些就深了,不懂也不影响啦!我们继续看看何谓A*算法。

2、初识A*算法
启发式搜索其实有很多的算法,比如:局部择优搜索法、最好优先搜索法等等。当然A*也是。这些算法都使用了启发函数,但在具体的选取最佳搜索节点时的 策略不同。象局部择优搜索法,就是在搜索的过程中选取“最佳节点”后舍弃其他的兄弟节点,父亲节点,而一直得搜索下去。这种搜索的结果很明显,由于舍弃了 其他的节点,可能也把最好的节点都舍弃了,因为求解的最佳节点只是在该阶段的最佳并不一定是全局的最佳。最好优先就聪明多了,他在搜索时,便没有舍弃节点 (除非该节点是死节点),在每一步的估价中都把当前的节点和以前的节点的估价值比较得到一个“最佳的节点”。这样可以有效的防止“最佳节点”的丢失。那么 A*算法又是一种什么样的算法呢?其实A*算法也是一种最好优先的算法。只不过要加上一些约束条件罢了。由于在一些问题求解时,我们希望能够求解出状态空 间搜索的最短路径,也就是用最快的方法求解问题,A*就是干这种事情的!我们先下个定义,如果一个估价函数可以找出最短的路径,我们称之为可采纳性。A* 算法是一个可采纳的最好优先算法。A*算法的估价函数可表示为:

f'(n) = g'(n) + h'(n)

这里,f'(n)是估价函数,g'(n)是起点到终点的最短路径值,h'(n)是n到目标的最断路经的启发值。由于这个f'(n)其实是无法预先知道 的,所以我们用前面的估价函数f(n)做近似。g(n)代替g'(n),但 g(n)>=g'(n)才可(大多数情况下都是满足的,可以不用考虑),h(n)代替h'(n),但h(n)<=h'(n)才可(这一点特别 的重要)。可以证明应用这样的估价函数是可以找到最短路径的,也就是可采纳的。我们说应用这种估价函数的最好优先算法就是A*算法。哈。你懂了吗?肯定没 懂。接着看。
举一个例子,其实广度优先算法就是A*算法的特例。其中g(n)是节点所在的层数,h(n)=0,这种h(n)肯定小于h'(n),所以由前述可知广度优先算法是一种可采纳的。实际也是。当然它是一种最臭的A*算法。
再说一个问题,就是有关h(n)启发函数的信息性。h(n)的信息性通俗点说其实就是在估计一个节点的值时的约束条件,如果信息越多或约束条件越多则排除 的节点就越多,估价函数越好或说这个算法越好。这就是为什么广度优先算法的那么臭的原因了,谁叫它的h(n)=0,一点启发信息都没有。但在游戏开发中由 于实时性的问题,h(n)的信息越多,它的计算量就越大,耗费的时间就越多。就应该适当的减小h(n)的信息,即减小约束条件。但算法的准确性就差了,这 里就有一个平衡的问题。可难了,这就看你的了!
好了我的话也说得差不多了,我想你肯定是一头的雾水了,其实这是写给懂A*算法的同志看的。哈哈。你还是找一本人工智能的书仔细看看吧!我这几百字是不足以将A*算法讲清楚的。只是起到抛砖引玉的作用希望大家热情参与吗。


请给出深搜和广搜的区别和中心思想!
把所有可能的路径都搜索完后,才输出记录的最优路径。(4)广度优先搜索算法,一般需要存储产生的所有结点,占的存储空间要比深度优先大得多,因此程序设计中,必须考虑溢出和节省内存空间得问题。(5)比较深度优先和广度优先两种搜索法,广度优先搜索法一般无回溯操作,即入栈和出栈的操作,所以运行速度比...

深度优先遍历和广度优先遍历唯一吗
回溯到上一个节点,继续访问它的邻居节点,直到整个树或图都被访问完为止。广度优先遍历是一种按照广度优先搜索算法的顺序遍历树或图的方法,从树或图的一个节点开始,依次访问该节点的所有相邻节点,直到所有相邻节点都被访问过,再访问下一个相邻节点,直到整个树或图都被访问完为止。

深度优先遍历与广度优先遍历的区别
三、算法不同 1、深度优先遍历:把根节点压入栈中。每次从栈中弹出一个元素,搜索所有在它下一级的元素,把这些元素压入栈中。并把这个元素记为它下一级元素的前驱。找到所要找的元素时结束程序。如果遍历整个树还没有找到,结束程序。2、广度优先遍历:把根节点放到队列的末尾。每次从队列的头部...

深度优先搜索和广度优先搜索的优缺点是什么?
关键看你做什么词,一般深度搜索客户人群更为精确,但是搜索量会相对较低;广度搜索人群多,流量虽然大,但是并非是有需求的客户。深度优先搜索和广度优先搜索的优缺点是什么?

搜索算法三广度优先搜索
为了优化重复状态的检测,可以利用哈希表,通过二进制值映射状态,形成一个大小为2^16的表,来快速判断状态是否已存在,实现O(1)的判重。这种方法大大降低了时间复杂度。进一步考虑,可以采用双向广度优先搜索,即从初始状态和目标状态同时扩展,一旦遇到相同的扩展节点,就可以立即停止扩展,从而避免无用的...

常见算法5、广度优先搜索 Breadth-First Search
广度优先搜索 (Breadth-First Search)是最简便的图的搜索算法之一,又称 宽度优先搜索 ,这一算法也是很多重要的图算法的原型。广度优先搜索属于一种盲目搜寻法,目的是系统地展开并检查图中的所有节点,以找寻结果。换句话说,它并不考虑结果的可能位置,彻底地搜索整张图,直到找到结果为止。2、应用 ...

广度优先和最佳优先的区别
您要问的是广度优先和最佳优先的区别是什么?广度优先和最佳优先的区别是定义不同。广度优先是指在抓取过程中,在完成当前层次的搜索后,才进行下一层次的搜索。最佳优先是按照一定的网页分析算法,预测候选URL不目标网页的相似度,或与不主题的相关性,并选取评价最好的一个或几个URL迕行抓取。

搜索算法的类型有哪些?
搜索过程从数组的中间元素开始,如果中间元素正好是要查找的元素,则搜索过程结束;如果要查找的元素大于或小于中间元素,则在数组大于或小于中间元素的那一半中查找,而且同样在那一半的中间元素开始一个新的搜索,以此类推。这种算法的时间复杂度为O(log n)。深度优先搜索(DFS)和广度优先搜索(BFS):...

为什么深度优先搜索可以判断图里是否有圈?而广度优先不能?
转换的时候是从起始节点开始,找节点的孩子,找到了就保存下来,然后找孩子的孩子,每次找到之后都保存下来,这就是深度遍历,如果有向图中存在圈圈,那么就必然会出现这种情况“某个节点的孩子已经存在于你保存的节点里了”,一旦出现就表示有圈圈。广度遍历就不行了,因为有向图与树最大的区别之一是两...

通俗理解之广度优先搜索
宽度优先搜索(Breadth First Search, BFS),通俗来讲,就像一层一层地探索地图,从起点开始,先遍历当前层的所有节点,然后再深入下一层。在图论中,它也被称为层次遍历或广度优先探索。其核心策略是使用数据结构队列,确保节点的顺序是按照离起点的远近来访问的,即先进先出(FIFO)特性。具体操作是,...

恩施土家族苗族自治州19418821544: 深度优先搜索和广度优先搜索、A星算法三种算法的区别和联系? -
娄珠瑞呋:[答案] 1、何谓启发式搜索算法 在说它之前先提提状态空间搜索.状态空间搜索,如果按专业点的说法就是将问题求解过程表现为从初始状态到目标状态寻找这个路径的过程.通俗点说,就是 在解一个问题时,找到一条解题的过程可以从求解的开始到问题的...

恩施土家族苗族自治州19418821544: 搜索算法中,A算法A*算法的区别(急) -
娄珠瑞呋: A算法一般指某个搜索算法的朴素的思路A*指使用了启发式搜索之后的算法,也就是运算速度会快很多,但不一定能保证最后得到最优解

恩施土家族苗族自治州19418821544: 深度优先搜索法和广度优先搜索法 -
娄珠瑞呋: 深度优先搜索所遵循的搜索策略是尽可能“深”地搜索图.在深度优先搜索中,对于最新发现的结点,如果它还有以此为起点而未搜过的边,就沿着边继续搜索下去.当结点v的所有边都已被探寻过,搜索将回溯到发现结点v有那条边的始结点....

恩施土家族苗族自治州19418821544: 数据结构题目,广度优先和深度优先 -
娄珠瑞呋: (一)深度优先搜索的特点是:(1)从上面几个实例看出,可以用深度优先搜索的方法处理的题目是各种 各样的.有的搜索深度是已知和固定的,如例题2-4,2-5,2-6;有的是未知的,如例题2-7、例题2-8;有的搜索深度是有限制的,...

恩施土家族苗族自治州19418821544: 数据结构中宽度优先搜索是广度优先还是深度优先搜索. -
娄珠瑞呋: 广度

恩施土家族苗族自治州19418821544: 深度优先搜索遍历和广度优先搜索的遍历序列及具体步骤和原因, -
娄珠瑞呋: 1->2->3->4 (表示1可达到2,达到3,达到4) 2->1->3->5 3->1->2->4->5->6 4->1->3->6 5->2->3->6 6->3->4->5 广度优先搜索就是把每一行按照顺序输出,去掉重复的,即先看1,有1,2,3,4,然后看2,因为有3,4了,所以只要5,然后看3,以此...

恩施土家族苗族自治州19418821544: 什么是搜索引擎的深度优先和广度优先 -
娄珠瑞呋: 这是针对搜索引擎蜘蛛抓取策略的两种优先策略: 广度优先:是指网络蜘蛛会先抓取起始网页中链接的所有网页,然后再选择其中的一个链接网页,继续抓取在此网页中链接的所有网页.这是最常用的方式,因为这个方法可以让网络蜘蛛并行处理,提高其抓取速度 深度优先:是指网络蜘蛛会从起始页开始,一个链接一个链接跟踪下去,处理完这条线路之后再转入下一个起始页,继续跟踪链接.这个方法有个优点是网络蜘蛛在设计的时候比较容易.

恩施土家族苗族自治州19418821544: 数据结构 深度优先遍历和广度 -
娄珠瑞呋: 无向图:两个结点之间的路径没有方向区分 有向图:两个结点之间的路径有方向区分,从A到B的路径长和从B到A的路径长可以不同 深度优先遍历:从给定结点出发,选取它的邻接结点中某个未被访问的结点访问.被访问的结点成为新的给定结点.重复上述过程,直到当前结点没有未被访问的邻接结点.接着开始回溯,返回上一次访问的结点继续寻找其未被访问的邻接结点,直至完成遍历. 广度优先遍历:从给定结点出发,依次访问它的所有邻接结点.然后按照这些结点的被访问顺序,依次访问这些结点的所有邻接结点.重复上述过程,直至完成遍历.

恩施土家族苗族自治州19418821544: 编程的算法都有哪些? -
娄珠瑞呋: (一)基本算法 : 1.枚举 2.搜索: 深度优先搜索 广度优先搜索 启发式搜索 遗传算法 (二)数据结构的算法 (三)数论与代数算法 (四)计算几何的算法:求凸包 (五)图论 算法: 1.哈夫曼编码 2.树的遍历 3.最短路径 算法 4.最小生成树 算法 5.最小树形图 6.网络流 算法 7.匹配算法 (六)动态规划 (七)其他: 1.数值分析 2.加密算法 3.排序 算法 4.检索算法 5.随机化算法

恩施土家族苗族自治州19418821544: 图的矩阵深度和广度遍历算法 -
娄珠瑞呋: 图的遍历是指从图中任一给定顶点出发,依次访问图中的其余顶点.如果给定的图是连通图,则从图中的任意一点出发,按照一个指定的顺序就可以访问到图中的所有顶点,且每个顶点只访问一次.这个过程称为图的遍历.图的遍历比树的遍...

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网