千锋教育-做有情怀、有良心、有品质的职业教育机构

手机站
千锋教育

千锋学习站 | 随时随地免费学

千锋教育

扫一扫进入千锋手机站

领取全套视频
千锋教育

关注千锋学习站小程序
随时随地免费学习课程

当前位置:首页  >  技术干货  > 同样的深度优先搜索,使用栈和使用递归的性能差别是什么?

同样的深度优先搜索,使用栈和使用递归的性能差别是什么?

来源:千锋教育
发布人:xqq
时间: 2023-10-11 07:33:00 1696980780

一、同样的深度优先搜索,使用栈和使用递归的性能差别

同样的深度优先搜索,使用栈和使用递归的性能差别是,对于内存,栈的内容太多了。只压栈的话i和target应该够了,栈的内容只需要和DP的参数一样多。

递归

递归的基本思想是,把规模较大的一个问题,分解成规模较小的多个子问题去解决,而每一个子问题又可以继续拆分成多个更小的子问题。最重要的一点就是假设子问题已经解决了,现在要基于已经解决的子问题来解决当前问题;或者说,必须先解决子问题,再基于子问题来解决当前问题。

递归解决的是有依赖顺序关系的多个问题:假设一个抽象问题有两个时间点要素:开始处理,结束处理,那么递归处理的顺序就是,先开始处理的问题,最后才能结束处理。递归对问题的处理顺序,是遵循了先入后出(也就是先开始的问题最后结束)的规律。

深度优先搜索

深度优先搜索(DFS)是用于在树/图中遍历/搜索的另一种重要算法。也可以在更抽象的场景中使用。

正如树的遍历中所提到的,我们可以用 DFS 进行 前序遍历,中序遍历 和 后序遍历。在这三个遍历顺序中有一个共同的特性:除非我们到达最深的结点,否则我们永远不会回溯。

这也是 DFS 和 BFS 之间最大的区别,BFS永远不会深入探索,除非它已经在当前层级访问了所有结点。

延伸阅读:

二、回溯是什么

回溯法采用试错的思想,它尝试分步的去解决一个问题。在分步解决问题的过程中,当它通过尝试发现现有的分步答案不能得到有效的正确的解答的时候,它将取消上一步甚至是上几步的计算,再通过其它的可能的分步解答再次尝试寻找问题的答案。

回溯法是一个既带有系统性又带有跳跃性的搜索算法:

系统性:在包含问题的所有解的解空间树中,按照深度优先的策略,从根结点出发搜索解空间树;

跳跃性:算法搜索至解空间树的任一结点时,判断该结点为根的子树是否包含问题的解,如果肯定不包含,则跳过以该结点为根的子树的搜索,逐层向其祖先点回溯,否则,进入该子树,继续深度优先的策略进行搜索。

声明:本站稿件版权均属千锋教育所有,未经许可不得擅自转载。
10年以上业内强师集结,手把手带你蜕变精英
请您保持通讯畅通,专属学习老师24小时内将与您1V1沟通
免费领取
今日已有369人领取成功
刘同学 138****2860 刚刚成功领取
王同学 131****2015 刚刚成功领取
张同学 133****4652 刚刚成功领取
李同学 135****8607 刚刚成功领取
杨同学 132****5667 刚刚成功领取
岳同学 134****6652 刚刚成功领取
梁同学 157****2950 刚刚成功领取
刘同学 189****1015 刚刚成功领取
张同学 155****4678 刚刚成功领取
邹同学 139****2907 刚刚成功领取
董同学 138****2867 刚刚成功领取
周同学 136****3602 刚刚成功领取
相关推荐HOT