常见的搜索算法(深搜和广搜为主)
首先,我们必须要明白,搜索算法不同与一般的算法,可以说是相当重要。
大多数男生同胞爱玩LOL,当我们的鼠标点击地图上的某一位置时,英雄就会走向鼠标点击的位置,这些都是由高效的搜索算法所引导。说不定,看过本篇文章后,你再玩LOL,就会预判敌方走位了(输了别找我啊)。
常见的搜索算法
1:枚举算法
所谓的枚举算法就是一一列举出所有的情况,如果符合条件就进行相应的操作,这种算法效率显然不高,适用于基数少的情形。
2:深度优先搜索(DFS)
谈一下我的理解,其实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++来实现。
常见的搜索算法(深搜和广搜为主)相关推荐
- Go 分布式学习利器(15) -- Go 实现 深搜和广搜
强化语法,回顾算法. 通过Go语言实现 深度优先搜索 和 广度优先搜索,来查找社交网络中的三度好友关系(三度指的是一个节点到 其相邻节点 到 其相邻节点的节点 ,图递增三层好友关系). 涉及到的Go语 ...
- 深搜和广搜(初学者)
搜索入门 最近对搜索有了一点浅显的了解,想跟大家分享分享. 说起来我也是初学者,恰巧有些自己的理解,想起来自己开始学习搜索的情况,真是一把鼻子一把泪啊.所以想把我领悟的过程,看到的一些基础的我觉得好的 ...
- 深搜和广搜的原理及优缺点
深搜原理 深搜,顾名思义,是深入其中.直取结果的一种搜索方法. 如果深搜是一个人,那么他的性格一定倔得像头牛!他从一点出发去旅游,只朝着一个方向走,除非路断了,他绝不改变方向!除非四个方向全都不通或遇 ...
- 搜索算法-深搜与广搜
1.深搜与回溯法 *本文主要是供自己复习,或者做笔记总结使用,专业性有待考量,如果遇到不对的地方还请指出来. 什么是回溯法?枚举每一个填空的选项,然后判断这个选项是否合法.如果合法则继续填写下一个选项 ...
- 深搜、广搜、搜索剪枝
搜索与回溯讲解 文章目录 深搜 方向向量: DFS代码: 题目讲解: 八皇后问题 字符序列 自然数的拆分 广搜 BFS代码: 题目讲解: 瓷砖 关系网络 bfs与dfs的用途与区别 搜索剪枝 可行性剪 ...
- 算法之路——深搜、广搜(简单搜索)
搜索 通过一定的顺序,枚举每一个数据(经常会通过一些判断条件去掉无意义的数据,即剪枝),找到想要的数据的过程. 深度优先搜索(dfs) 深度优先搜索属于图算法的一种,是一个针对图和树的算法,应为缩写为 ...
- [数据结构] 迷宫问题(栈和队列,深搜和广搜)
代码: #include <iostream> #include <string.h> #include <stack> #include <queue> ...
- 深搜DFS\广搜BFS 图初步入门
首先,不管是BFS还是DFS,由于时间和空间的局限性,它们只能解决数据量比较小的问题. 深搜,顾名思义,它从某个状态开始,不断的转移状态,直到无法转移,然后退回到上一步的状态,继续转移到其他状态,不断 ...
- 深搜+回溯+广搜小结
深搜 按照一定的顺序和规则,一直往深处走,直到走不通再返回,换一种路径重复上述步骤. 深搜一般可以找到问题的所有答案,但问题规模较大时,解集树的深度就会比较大并且比较宽,时间复杂度就会较高.与广搜相比 ...
最新文章
- 怎么写CORTEX在windows用arm-none-eabi-gcc编译时的makefile
- Redis为何这么快?
- 投资数据中心所考虑的重要因素
- 织梦当前位置对应php文件,织梦cms怎么获取当前栏目路径
- 【Go语言】【11】GO语言的包和函数
- jquery级联下拉框
- 如何证明NP-Hard Problems
- Stack with max and min 查找栈中最大最小数
- kepware odata 接口访问地址
- 商场管理系统原创代码
- QT ffmpeg 播放器
- Tomcat:Tomcat网站上的core和deployer的区别
- Python实现消息发送
- 新智慧杂志新智慧杂志社新智慧编辑部2022年第9期目录
- python专场——暴力破解(DVWA)
- 01-Spring的初体验:spring工厂的化过程
- 如何在typescript中importfs模块
- Vue引入并使用md文件方法
- 优思学院|六西格玛黑带大师MBB是什么?兩大认证比较
- Android Studio 播放bibi声音
热门文章
- Anaconda虚拟环境打包
- 生成随机数random学习之uniform_int_distribution,uniform_real_distribution
- c语言程序设计项目化实训教程北京邮电出版,C语言程序设计教程(北京邮电大学出版社) 第1章精选.ppt...
- OpenGL简单介绍
- 段码LCD液晶屏如何斑马条改PIN脚?
- 微信前夜——QQ 邮箱
- 如何搭建统一的数据分析平台——杭州联合银行建设经验
- 构建多层防御应对勒索软件威胁
- Nvidia Deepstream小细节系列:Deepstream python保存pipeline结构图
- 苹果手机ios设备管理软件iMazing 2.17.6官方版下载及常见问题解决