ACM 5月16日-5月22日学习总结

学习内容:
递归。
DFS和BFS。
总结内容:
1.递归
其实在前面的贪心和DP里就涉及到了递归,状态转移方程本身就是一种递归方程。
和贪心差不多,都是要把大问题转化为小问题,其实和贪心的关键点也一样,就是找方程和终止、边缘数据的条件。最后调试过了一个递归方程。
比较经典的就是斐波那契数列,之前也碰到过好多次了,学起来几乎相当于复习。
2.广度优先搜索(BFS)与深度优先搜索(DFS)的特点
深度优先搜索:
所遵循的搜索策略是尽可能“深”地搜索图。在深度优先搜索中,对于最新发现的结点,如果它还有以此为起点而未搜过的边,就沿着边继续搜索下去。当结点v的所有边都已被探寻过,搜索将回溯到发现结点v有那条边的始结点。这一过程一直进行到已发现从源结点可达的所有结点为止。如果还存在未被发现的结点,则选择其中一个作为源结点并重复以上过程,整个过程反复进行直到所有结点都被发现为止。
广度优先搜索:
从图的顶点中任意地选择一个根,然后添加与这个顶点相关联的所有边。在这个阶段所添加的新顶点成为生成树在1层上的顶点。下一步,按顺序访问1层上的每个顶点,只要不产生简单回路,就将与这个顶点相关联的每条边添加到树里。这样就产生了树在2层上的顶点。如此来,直到已经添加了所有顶点。
老师课件里那个图说的很明白,简单来说:深度就是先从上弄到底,广度是把各层先弄完再弄下一层。
其中广度搜索的特点和队列很符合,所以经常用队列queue来实现。
深度又很符合栈,用stack来实现。
深度:1每次取出栈顶元素,对其进行拓展。
2若栈顶元素无法继续拓展,则将其从栈中弹出。继续1过程。
3不断重复直到获得目标状态(取得可行解)或栈为空(无解)
广度:1 每次取出队列首元素(初始状态),进行拓展
2 然后把拓展所得到的可行状态都放到队列里面
3 将初始状态删除
4 一直进行以上三步直到队列为空。
总结:
广度和深度优先搜索:
深搜优缺点
优点
1、能找出所有解决方案
2、优先搜索一个子量,然后是另一个量,所以和广搜对比,有着内存需要相对较少的优点
缺点
1、要多次遍历,搜索所有可能路径,标识做了之后还要取消。
2、在深度很大的情况下效率不高。
广搜优缺点
优点
1、对于解决最短或最少问题特别有效,而且寻找深度小
2、每个结点只访问一遍,结点总是以最短路径被访问,所以第二次路径确定不会比第一次短
缺点
1、内存耗费量大(需要开大量的数组单元用来存储状态)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值