树搜索算法 及 最优解

转载:https://blog.csdn.net/ncepuzhuang/article/details/8944991

一、深度优先搜索与广度优先搜索算法有何区别

  • 深度优先搜索算法不全部保留结点,扩展完的结点从数据存储结构栈中弹出删去,在栈中存储的结点数就是解空间树的深度,因此它占用空间较少。所以,当搜索树的结点较多,用其它方法易产生内存溢出时,深度优先搜索不失为一种有效的求解方法。
  • 广度优先搜索算法,一般需存储产生所有结点,占用的存储空间要比深度优先搜索大得多,因此,程序设计中,必须考虑溢出和节省内存空间的问题。但广度优先搜索法一般无回溯操作(即入栈和出栈的操作),所以运行速度比深度优先搜索要快些。

二、回溯与分支限界区别

回溯法:当沿一条路径走到底时,无法继续前进,退回上一结点,查看是否具体其他路径,有则继续查找,若没有则继续往上层结点回退.

1、采用的算法不同:回溯法以深度优先的方式搜索解空间树T,而分支限界法则以广度优先或以最小耗费优先的方式搜索解空间树T。

2、它们在问题的解空间树T上搜索的方法不同,适合解决的问题也就不同。一般情况下,回溯法的求解目标是找出T中满足约束条件的所有解的方案,而分支限界法的求解目标则是找出满足约束条件的一个解,或是在满足约束条件的解中找出使某一目标函数值达到极大或极小的解,即在某种意义下的最优解

3、所占内存容量不同:相对而言,分支限界算法的解空间比回溯法大得多,因此当内存容量有限时,回溯法成功的可能性更大。
在这里插入图片描述
】回溯法一个节点有多次机会成为活节点,而分支限界法一个节点只有一次机会成为活节点。(活节点:能够扩展子节点的节点)
回溯法是深度优先搜索,多次向上回溯会找到上个或前几次去访问的点,所以一个节点有多次机会成为活节点。而分支限界法是广度优先搜索,是横着搜索。

三、最优化处理问题

在处理最优问题时,采用穷举法、回溯法或分支限界法都可以通过利用当前最优解和上界函数加速。仅对限界剪支的效率而言,优先队列的分支限界法显然要更充分一些。在穷举法中通过上界函数与当前情况下函数值的比较可以直接略过不合要求的情况而省去了更进一步的枚举和判断;回溯法则因为层次的划分,可以在上界函数值小于当前最优解时,剪去以该结点为根的子树,也就是节省了搜索范围;分支限界法在这方面除了可以做到回溯法能做到的之外,同时若采用优先队列的分支限界法,用上界函数作为活结点的优先级,一旦有叶结点成为当前扩展结点,就意味着该叶结点所对应的解即为最优解,可以立即终止其余的过程。在前面的例题中曾说明,优先队列的分支限界法更象是有选择、有目的地进行搜索,时间效率、空间效率都是比较高的。

发布了70 篇原创文章 · 获赞 126 · 访问量 7600

猜你喜欢

转载自blog.csdn.net/qq_37717494/article/details/105073654