搜索(dfs)

搜索分为bfs与dfs

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

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

dfs

dfs核心操作:回溯+前进

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

乱跑啊

这就是dfs

比如说:

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

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

我们有哪些方法优化呢?

1.乱闯

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

实现

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

剪枝效果:玄学

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

学术称呼:随机化剪枝

进阶的乱闯

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

剪枝效果:玄学

好处:可以减少搜索量

学术称呼:搜索顺序优化

3.问路(1)

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

直接走操场那条路

剪枝效果:玄学

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

学术称呼:可行性剪枝

4.问路(2)

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

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

学术称呼:最优解剪枝

5.地图

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

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

好处:减少重复计算

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

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

6.奇奇怪怪的优化

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

浅谈dfs的更多相关文章

  1. 浅谈DFS序

    浅谈DFS序 本篇随笔简要讲解一下信息学奥林匹克竞赛中有关树的DFS序的相关内容. DFS序的概念 先来上张图: 树的DFS序,简单来讲就是对树从根开始进行深搜,按搜到的时间顺序把所有节点打上时间戳. ...

  2. 浅谈DFS,BFS,IDFS,A*等算法

    搜索是编程的基础,是必须掌握的技能.--王主任 搜索分为盲目搜索和启发搜索 下面列举OI常用的盲目搜索: 1.dijkstra 2.SPFA 3.bfs 4.dfs 5.双向bfs 6.迭代加深搜索( ...

  3. 浅谈期望的线性性(可加性)【CodeForces280c】【bzoj3036】【bzoj3143】

    [pixiv] https://www.pixiv.net/member_illust.php?mode=medium&illust_id=63399955 向大(hei)佬(e)势力学(di ...

  4. 虚拟化构建二分图(BZOJ2080 题解+浅谈几道双栈排序思想的题)

    虚拟化构建二分图 ------BZOJ2080 题解+浅谈几道双栈排序思想的题 本题的题解在最下面↓↓↓ 不得不说,第一次接触类似于双栈排序的这种题,是在BZOJ的五月月赛上. [BZOJ4881][ ...

  5. 莫队浅谈&题目讲解

    莫队浅谈&题目讲解 一.莫队的思想以及莫队的前置知识 莫队是一种离线的算法,他的实现借用了分块的思想.在学习莫队之前,本人建议学习一下分块,并对其有一定的理解. 二.莫队 现给出一道例题:bz ...

  6. 浅谈 Fragment 生命周期

    版权声明:本文为博主原创文章,未经博主允许不得转载. 微博:厉圣杰 源码:AndroidDemo/Fragment 文中如有纰漏,欢迎大家留言指出. Fragment 是在 Android 3.0 中 ...

  7. 浅谈 LayoutInflater

    浅谈 LayoutInflater 版权声明:本文为博主原创文章,未经博主允许不得转载. 微博:厉圣杰 源码:AndroidDemo/View 文中如有纰漏,欢迎大家留言指出. 在 Android 的 ...

  8. 浅谈Java的throw与throws

    转载:http://blog.csdn.net/luoweifu/article/details/10721543 我进行了一些加工,不是本人原创但比原博主要更完善~ 浅谈Java异常 以前虽然知道一 ...

  9. 浅谈SQL注入风险 - 一个Login拿下Server

    前两天,带着学生们学习了简单的ASP.NET MVC,通过ADO.NET方式连接数据库,实现增删改查. 可能有一部分学生提前预习过,在我写登录SQL的时候,他们鄙视我说:“老师你这SQL有注入,随便都 ...

随机推荐

  1. java实现基因牛的繁殖

    基因牛的繁殖 基因牛 张教授采用基因干预技术成功培养出一头母牛,三年后,这头母牛每年会生出1头母牛, 生出来的母牛三年后,又可以每年生出一头母牛.如此循环下去,请问张教授n年后有多少头母牛? 以下程序 ...

  2. 自动把网页px单位转换成rem

    自动把网页px单位转换成rem 首先在你的项目开发环境中安装2个插件 然后在vue.config.js文件引入并重新启动服务器 这样就配置成功了,一起看看效果

  3. Python模拟用户登录场景

    简单模拟登录场景,将已知的用户名及密码固化,通过用户输入内容和已固化的内容比较进行判断用户名和密码是否输入正确. 在用户输入时,将密码隐藏需要导入模块getpass import getpass _u ...

  4. curlPost和curlGet 请求链接

    //getcurl get读取数据function curlGet($url){ $UserAgent = 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) App ...

  5. @bzoj - 4035@ [HAOI2015]数组游戏

    目录 @description@ @solution@ @accepted code@ @details@ @description@ 有一个长度为N的数组,甲乙两人在上面进行这样一个游戏: 首先,数 ...

  6. @codechef - JADUGAR2@ Chef and Same Old Recurrence 2

    目录 @description@ @solution@ @accepted code@ @details@ @description@ 定义 dp 序列: \[dp(1) = K\\ dp(n) = ...

  7. CentOS7.5搭建ES6.2.4集群与简单测试

    一 简介 Elasticsearch是一个高度可扩展的开源全文搜索和分析引擎.它允许您快速,近实时地存储,搜索和分析大量数据.它通常用作支持具有复杂搜索功能和需求的应用程序的底层引擎/技术. 下载地址 ...

  8. MySQL ORDER BY:对查询结果进行排序

    在 MySQL SELECT 语句中,ORDER BY 子句主要用来将结果集中的数据按照一定的顺序进行排序. 其语法格式为: ORDER BY {<列名> | <表达式> | ...

  9. 初识Redis的数据类型HyperLogLog

    前提 未来一段时间开发的项目或者需求会大量使用到Redis,趁着这段时间业务并不太繁忙,抽点时间预习和复习Redis的相关内容.刚好看到博客下面的UV和PV统计,想到了最近看书里面提到的HyperLo ...

  10. strcmp函数的两种实现

    strcmp函数的两种实现,gcc测试通过. 一种实现: C代码   #include<stdio.h> int strcmp(const char *str1,const char *s ...