首先,我们必须要明白,搜索算法不同与一般的算法,可以说是相当重要。

大多数男生同胞爱玩LOL,当我们的鼠标点击地图上的某一位置时,英雄就会走向鼠标点击的位置,这些都是由高效的搜索算法所引导。说不定,看过本篇文章后,你再玩LOL,就会预判敌方走位了(输了别找我啊)。

常见的搜索算法

1:枚举算法

所谓的枚举算法就是一一列举出所有的情况,如果符合条件就进行相应的操作,这种算法效率显然不高,适用于基数少的情形。

2:深度优先搜索(DFS)

如算法名称那样,深度优先搜索所遵循的搜索策略是尽可能“深”地搜索树。它的基本思想是:为了求得问题的解,先选择某一种可能情况向前(子结点)探索,在探索过程中,一旦发现原来的选择不符合要求,就回溯至父亲结点重新选择另一结点,继续向前探索,如此反复进行,直至求得最优解。深度优先搜索的实现方式可以采用递归或者栈来实现。由此可见,把通常问题转化为树的问题是至关重要的一步,完成了树的转换基本完成了问题求解。
(1)减少节点数,思想:尽可能减少生成的节点数
(2)定制回溯边界,思想:定制回溯边界条件,剪掉不可能得到最优解的子树
在很多情况下,我们已经找到了一组比较好的解。但是计算机仍然会义无返顾地去搜索比它更“劣”的其他解,搜索到后也只能回溯。为了避免出现这种情况,我们需要灵活地去定制回溯搜索的边界。
在深度优先搜索的过程当中,往往有很多走不通的“死路”。假如我们把这些“死路”排除在外,不是可以节省很多的时间吗?打一个比方,前面有一个路径,别人已经提示:“这是死路,肯定不通”,而你的程序仍然很“执着”地要继续朝这个方向走,走到头来才发现,别人的提示是正确的。这样,浪费了很多的时间。针对这种情况,我们可以把“死路”给标记一下不走,就可以得到更高的搜索效率(引用自某度)。

谈一下我的理解,其实DFS就像走迷宫一样,当我们走到某个分岔口,由于不知道到底哪个是出口,所以我们只能随便选择一条路(编程时一般是按顺序从第一个开始遍历),当我们又碰到一个分岔口时,我们需要再进行选择,如果碰到死胡同,这时就需要我们原路返回到上一个分岔口,然后选择另一条路,如此往复,直到走出迷宫。
通过此图来加深了解,比方说 8 是出口,1是出发点,2 , 5 , 6 , 9 是第一处分岔口, 假如我们选择 2 , 然后 3 , 4成为第二个分岔口,我们随便选择 3 ,发现是死胡同,然后返回上一个分岔口 2 ,再选择 4 , 结果又是死胡同,我们又返回 2 ,发现 2 没有别的路了, 然后返回 1 , 再走别的路, 直到走到 8 .
3.广度优先搜索(BFS)
类似树的按层遍历,其过程为:首先访问初始点Vi,并将其标记为已访问过,接着访问Vi的所有未被访问过可到达的邻接点Vi1、Vi2……Vit,并均标记为已访问过,然后再按照Vi1、Vi2……Vit的次序,访问每一个顶点的所有未被访问过的邻接点,并均标记为已访问过,依此类推,直到图中所有和初始点Vi有路径相通的顶点都被访问过为止(引用自某度)。
我所理解到的广度优先搜索都是基于一个一维数组就可以实现,每当我们在讨论一个节点时,它的子节点(也就是上面的分叉点)被插在数组的后面(不是当前所讨论值的后面),我们可以通过一个变量,如index++来实现。

常见的搜索算法(深搜和广搜为主)相关推荐

  1. Go 分布式学习利器(15) -- Go 实现 深搜和广搜

    强化语法,回顾算法. 通过Go语言实现 深度优先搜索 和 广度优先搜索,来查找社交网络中的三度好友关系(三度指的是一个节点到 其相邻节点 到 其相邻节点的节点 ,图递增三层好友关系). 涉及到的Go语 ...

  2. 深搜和广搜(初学者)

    搜索入门 最近对搜索有了一点浅显的了解,想跟大家分享分享. 说起来我也是初学者,恰巧有些自己的理解,想起来自己开始学习搜索的情况,真是一把鼻子一把泪啊.所以想把我领悟的过程,看到的一些基础的我觉得好的 ...

  3. 深搜和广搜的原理及优缺点

    深搜原理 深搜,顾名思义,是深入其中.直取结果的一种搜索方法. 如果深搜是一个人,那么他的性格一定倔得像头牛!他从一点出发去旅游,只朝着一个方向走,除非路断了,他绝不改变方向!除非四个方向全都不通或遇 ...

  4. 搜索算法-深搜与广搜

    1.深搜与回溯法 *本文主要是供自己复习,或者做笔记总结使用,专业性有待考量,如果遇到不对的地方还请指出来. 什么是回溯法?枚举每一个填空的选项,然后判断这个选项是否合法.如果合法则继续填写下一个选项 ...

  5. 深搜、广搜、搜索剪枝

    搜索与回溯讲解 文章目录 深搜 方向向量: DFS代码: 题目讲解: 八皇后问题 字符序列 自然数的拆分 广搜 BFS代码: 题目讲解: 瓷砖 关系网络 bfs与dfs的用途与区别 搜索剪枝 可行性剪 ...

  6. 算法之路——深搜、广搜(简单搜索)

    搜索 通过一定的顺序,枚举每一个数据(经常会通过一些判断条件去掉无意义的数据,即剪枝),找到想要的数据的过程. 深度优先搜索(dfs) 深度优先搜索属于图算法的一种,是一个针对图和树的算法,应为缩写为 ...

  7. [数据结构] 迷宫问题(栈和队列,深搜和广搜)

    代码: #include <iostream> #include <string.h> #include <stack> #include <queue> ...

  8. 深搜DFS\广搜BFS 图初步入门

    首先,不管是BFS还是DFS,由于时间和空间的局限性,它们只能解决数据量比较小的问题. 深搜,顾名思义,它从某个状态开始,不断的转移状态,直到无法转移,然后退回到上一步的状态,继续转移到其他状态,不断 ...

  9. 深搜+回溯+广搜小结

    深搜 按照一定的顺序和规则,一直往深处走,直到走不通再返回,换一种路径重复上述步骤. 深搜一般可以找到问题的所有答案,但问题规模较大时,解集树的深度就会比较大并且比较宽,时间复杂度就会较高.与广搜相比 ...

最新文章

  1. 怎么写CORTEX在windows用arm-none-eabi-gcc编译时的makefile
  2. Redis为何这么快?
  3. 投资数据中心所考虑的重要因素
  4. 织梦当前位置对应php文件,织梦cms怎么获取当前栏目路径
  5. 【Go语言】【11】GO语言的包和函数
  6. jquery级联下拉框
  7. 如何证明NP-Hard Problems
  8. Stack with max and min 查找栈中最大最小数
  9. kepware odata 接口访问地址
  10. 商场管理系统原创代码
  11. QT ffmpeg 播放器
  12. Tomcat:Tomcat网站上的core和deployer的区别
  13. Python实现消息发送
  14. 新智慧杂志新智慧杂志社新智慧编辑部2022年第9期目录
  15. python专场——暴力破解(DVWA)
  16. 01-Spring的初体验:spring工厂的化过程
  17. 如何在typescript中importfs模块
  18. Vue引入并使用md文件方法
  19. 优思学院|六西格玛黑带大师MBB是什么?兩大认证比较
  20. Android Studio 播放bibi声音

热门文章

  1. Anaconda虚拟环境打包
  2. 生成随机数random学习之uniform_int_distribution,uniform_real_distribution
  3. c语言程序设计项目化实训教程北京邮电出版,C语言程序设计教程(北京邮电大学出版社) 第1章精选.ppt...
  4. OpenGL简单介绍
  5. 段码LCD液晶屏如何斑马条改PIN脚?
  6. 微信前夜——QQ 邮箱
  7. 如何搭建统一的数据分析平台——杭州联合银行建设经验
  8. 构建多层防御应对勒索软件威胁
  9. Nvidia Deepstream小细节系列:Deepstream python保存pipeline结构图
  10. 苹果手机ios设备管理软件iMazing 2.17.6官方版下载及常见问题解决