2019年8月3 日训练日记(深搜、剪枝、迭代加深、双向搜索)

今天也不知道咋了,做题晕晕乎乎的,三个人出了C题之后我开始做C题,本来觉得挺简单的一道题,感觉我写的一点毛病也没有,就一直WA,还WA在同一组。我换了两种做法做的都WA。后来我实在看不出来了,就让队友帮我看了一眼,才发现我的边界条件有问题,就把最后一种的改了,交上去过了。结束了之后我又开始改我最开始的代码,改了好久,发现也是边界问题。两个代码错在同样的地方,真的是长记性了,以后一定得好好控制边界条件,别少情况。
D题我开始读错了题,以为用b-l剩下的区间成立就可以,但是搞了半天没搞懂第一组样例是怎么出来的,后来才发现,是要求最小的l,是长度为l的子串都可以包含至少k个素数。也是卡了好几遍在判断条件上。今天不知道咋了,就是跟边界条件杠上了。

今天白天看了深搜,剪枝和迭代加深。
一、深度优先搜索(DFS)
深搜优先搜索就是按照一条路径往下找,找到叶子节点还找不到就返回上一节点,继续往下找,直到找到为止。
二、剪枝
1.优先搜索顺序;
2.排除等效冗余:
如果沿不同分支到达的子树是等效,则只需要对其中一条进行检索。
3.可行性剪枝:
及时对当前状态进行检索,如果发现分支已经无法到达递归边界,就执行回溯。
4.最优性剪枝
如果当前花费的代价已经超过了当前所求最优解,就不再继续最当前分支进行搜索,直接回溯。
5.记忆化
记录每一个状态的搜索结果,再重复遍历一个状态时直接检索并返回。
三、迭代加深
如果一个树中目标状态之前的字树很深,而目标状态深度很浅,如果从头开始遍历,就会浪费很多时间。
我们可以从小到大限制搜索深度,如果在当前深度搜索不到答案,就逐渐把深度增加,重新进行搜索。
四、双向搜索
从初态和终态出发各搜索一半状态,产生两棵深度减半的搜索树,在中间交汇、组合成最终的答案。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值