论学习搜索的操心事

举报
xenia 发表于 2019/09/03 23:03:38 2019/09/03
【摘要】 md编辑器出了锅,出锅内容已删除。搜索,计算机中最有效且思路最简单的算法。但是,对于许多菜鸡~~(例如我)~~来说,初学搜索是一件很困难的事。对与dfs来说,有两个灵魂:内置递归内置模拟(即for循环以及if等等)首先说内置递归。递归这东西,说难也不难,就是个递归式的问题。但对于新手来说,递归式是很难找的。有一个小技巧:对于找全排列问题,只需要函数中表示个数的参数加一即可,例如:dfs(t+...

md编辑器出了锅,出锅内容已删除。

搜索,计算机中最有效且思路最简单的算法。但是,对于许多菜鸡~~(例如我)~~来说,初学搜索是一件很困难的事。对与dfs来说,有两个灵魂:

  • 内置递归

  • 内置模拟(即for循环以及if等等)

首先说内置递归。

递归这东西,说难也不难,就是个递归式的问题。但对于新手来说,递归式是很难找的。有一个小技巧:

  • 对于找全排列问题,只需要函数中表示个数的参数加一即可,例如:

dfs(t+1);
  • 对于动态规划的问题,只需要模拟转移方程即可。注意,想不出转移方程时,可以按照题意模拟。

但注意,递归后一定要写回溯,否则会无限递归。

回溯也十分简单,怎么添上值的,怎么减回去,如:

1.png

dfs有一个致命的缺点,就是时间很卡,那么,这个暴力的搜索就需要剪枝。

  • 什么是剪枝?

众所周知,dfs在递归的时候会产生一棵树(如搜索树、排列树之类的)。在回溯时,一些节点因为拓展了所有节点而成为死结点。但有一些字树的尝试没有任何意义。这时需要一个上界来避免“无用功”。这个上界就是剪枝函数

  • 那么如何写剪枝呢?

其实很简单,首先要确定在那种情况下是无解(或得不到当前最优解)的。根据这种情况写一个判断函数即可,如~~(乱写的)~~:

2.png

这就是搜索的几大要素。综上所述,用搜索骗分就会拿许多分(甚至满分)!!!

最后在写一些模板,供大家学习:

d10452f0cd54ffff3d2f5483cbed0ba.png


本文转载自异步社区

原文链接:https://www.epubit.com/articleDetails?id=N17af914f-3efa-4a61-8871-6791b4c39229


【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。