搜索(dfs)

搜索分为bfs与dfs

他们的算法思路都是相同的--穷举

可以说,搜索是万能的,但是复杂度往往是指数级的,往往是穷途末路才用的最后方案

dfs

dfs核心操作:回溯+前进

想想你第一次在学校找食堂是怎么找的?(by yourself)

乱跑啊

这就是dfs

比如说:

暴力走法:前门->后门->教室->后门->小卖部->后门->前门->操场->寝室->食堂

显然,是个正常人都不会这样

我们有哪些方法优化呢?

1.乱闯

我们发现如果我们一开始走的是操场->寝室->食堂我们的时间复杂度则会大大下降

实现

rand( )函数完事,我们会随机走向一个方向,随机到达一个地点

剪枝效果:玄学

好处:有时能打乱出题人故意设置的hack数据

学术称呼:随机化剪枝

进阶的乱闯

当然,如果我们知道大致在哪个方位的话,就可以往那部分走,即更改搜索顺序

剪枝效果:玄学

好处:可以减少搜索量

学术称呼:搜索顺序优化

3.问路(1)

假设别人告诉我们后门方向是无法到食堂的,那么我们可以排除掉走后门的情况

直接走操场那条路

剪枝效果:玄学

好处:将不可能的情况舍去

学术称呼:可行性剪枝

4.问路(2)

假设我们要到小卖部,别人告诉我们前门里小卖部只有2个单位的路程

那么我们当走到寝室就不必向前了,因为已经超过了最优解

学术称呼:最优解剪枝

5.地图

当我们到过一个地方过后,边记录下到达这个地方最优路径,类似于画地图

剪枝效果:极好,甚至可以把n^n降至n

好处:减少重复计算

坏处:由于每个状态都要记录,相当耗空间

学术称呼:记忆化(结合dp理解)

6.奇奇怪怪的优化

具体题型进行限制,不多说明

最新文章

  1. 【转】SQL中内连接和外连接
  2. java JDK8 学习笔记——第17章 反射与类加载器
  3. How to executing direct SQL statements [Axapta, AX4.0, AX2009, AX2012]
  4. ACCESS-关于DELPHI中操作ACCESS数据库中单精度数据的问题
  5. 用script实现内容显示,并使用json传输数据
  6. C++ Primer笔记9_构造函数_拷贝构造(深拷贝与浅拷贝)
  7. 使用sqlite保存数据返回主键
  8. CSU 1803 2016
  9. nginx反向代理与负载均衡
  10. 【linux 爱好者群】程序猿的那些聊天记录
  11. Redux源码分析之createStore
  12. 我是如何将网站全站启用Https的?-记录博客安装配置SSL证书全过程
  13. [Swift]LeetCode984. 不含 AAA 或 BBB 的字符串 | String Without AAA or BBB
  14. telnet操作memcache
  15. redmine3.2 的部署
  16. 【机器学习】粗糙集属性约简算法与mRMR算法的本质区别
  17. 20145206邹京儒MSF基础应用
  18. goaccess nginx日志分析工具简单使用
  19. android手机有多个摄像头,打开其中一个
  20. windows小游戏之扫雷技巧

热门文章

  1. Java实现 LeetCode 390 消除游戏
  2. Java实现 LeetCode 234 回文链表
  3. Java实现 蓝桥杯VIP 算法提高 11-2删除重复元素
  4. Java实现 LeetCode 121 买卖股票的最佳时机
  5. Java实现 洛谷 P1009 阶乘之和
  6. Java实现第十届蓝桥杯矩形切割
  7. AsyncTask源码解读
  8. 2.vue-常用指令
  9. Java StringTokenizer 类使用方法,字符串分割
  10. ELK扫盲及搭建