搜索算法阶段性总结

BFS与DFS的讨论:BFS:这是一种基于队列这种数据结构的搜索方式,它的特点是由每一个状态可以扩展出许多状态,然后再以此扩展,直到找到目标状态或者队列中头尾指针相遇,即队列中所有状态都已处理完毕。

DFS:基于递归的搜索方式,它的特点是由一个状态拓展一个状态,然后不停拓展,直到找到目标或者无法继续拓展结束一个状态的递归。

优缺点:BFS:对于解决最短或最少问题特别有效,而且寻找深度小,但缺点是内存耗费量大(需要开大量的数组单元用来存储状态)。

DFS:对于解决遍历和求所有问题有效,对于问题搜索深度小的时候处理速度迅速,然而在深度很大的情况下效率不高

总结:不管是BFS还是DFS,它们虽然好用,但由于时间和空间的局限性,以至于它们只能解决数据量小的问题。

各种搜索题目归类:

坐标类型搜索 :这种类型的搜索题目通常来说简单的比较简单,复杂的通常在边界的处理和情况的讨论方面会比较复杂,分析这类问题,我们首先要抓住题目的意思,看具体是怎么建立坐标系(特别重要),然后仔细分析到搜索的每一个阶段是如何通过条件转移到下一个阶段的。确定每一次递归(对于DFS)的回溯和深入条件,对于BFS,要注意每一次入队的条件同时注意判重。要牢牢把握目标状态是一个什么状态,在什么时候结束搜索。还有,DFS过程的参数如何设定,是带参数还是不带参数,带的话各个参数一定要保证能完全的表示一个状态,不会出现一个状态对应多个参数,而这一点对于BFS来说就稍简单些,只需要多设置些变量就可以了。

经典题目:细胞(NDK1435)、Tyvj:乳草的入侵、武士风度的牛

数值类型搜索:(虽然我也不知道该怎么叫,就起这个名字吧),这种类型的搜索就需要仔细分析分析了,一般来说采用DFS,而且它的终止条件一般都是很明显 的,难就难在对于过程的把握,过程的把握类似于坐标类型的搜索(判重、深入、枚举),注意这种类型的搜索通常还要用到剪枝优化,对于那些明显不符合要求的 特殊状态我们一定要在之前就去掉它,否则它会像滚雪球一样越滚越大,浪费我们的时间。

经典题目:Tyvj:派对;售货员的难题,以及各种有关题目

时间: 2024-11-09 00:08:30

搜索算法阶段性总结的相关文章

深度优先搜索与广度优先搜索算法理解

深度优先搜索算法和广度优先搜索算法是图论中两个有意思也很实用的算法,下面我们来看看这两个算法. 严书中,给出的利用深度优先搜索(Deep First Search)算法进行图的遍历伪码如下 1 Boolean visited[MAX]; //标志数组 2 Status (*VisitFunction)(int v); //访问函数 3 4 void DFSTraverse(Graph G, Status (*Visit)(int v)) 5 { 6 VisitFunction = Visit;

算法学习笔记一(广度搜索算法)

1. 广度搜索算法 一般是定义一个数组保存当前结果,例如data[MAX], 记录步数的数组step[MAX],通过两个变量start,final实现队列的算法. start=0; final=1; while(start!=final) { for(四个方向进行搜索) { temp1; temp2; if(满足进队列的条件) { data[final]=C; //进队列 step[final]=count;//记录步数 final++; } } count++; start ++; }

数据结构与算法之四 搜索算法

目标 在本章中,你将学习: 使用线性搜索技术搜索数据和二叉搜索技术搜索数据 线性搜索: 是最简单的搜索方法,也称作顺序搜索,包括将用该条目逐一与列表中的条目进行比较,线性搜索通过比较所需的元素与列表中第一个元素进行. 如果值不匹配: 则所需的元素将与列表中的第二个元素作比较. 如果值还是不匹配: 则所需的元素将与列表中的第三个元素作比较. 这个过程将一直持续下去,直到: 找到所需的元素或到达列表的未尾为止. 使用线性搜索算法编写一个算法以搜索员工记录列表中给定的员工的工号: 1.  读取要搜索的

算法学习笔记二(深度搜索算法)

深度搜索算法,主要是利用递归实现.递归就要有终止条件,否则就会进入死循环. 一般深度搜索算法的算法模板是: 创建一个大表, data[m][n]; int DFS(int i, int j) { max=0;用于返回的数值 if(满足递归条件) { DFS(int a,int b);//再进入下一层递归 } .... return max+1;   //以上递归不满足的话,就返回. } 一般为了更高的效率,使用了剪枝法 用另外一个数组记录 count[m][n]; DFS(int i, int

搜索附近的人的搜索算法实现

随着移动终端的普及,很多应用都基于LBS功能,附近的某某(餐馆.银行.妹纸等等). 基础数据中,一般保存了目标位置的经纬度:利用用户提供的经纬度,进行对比,从而获得是否在附近. 目标: 查找附近的XXX,由近到远返回结果,且结果中有与目标点的距离. 针对查找附近的XXX,方案如下: Geohash算法:geohash是一种地址编码,它能把二维的经纬度编码成一维的字符串. 以下是具体实现的例子: 比如,成都永丰立交的编码是wm3yr31d2524 优点: 1.利用一个字段,即可存储经纬度:搜索时,

老男孩教育运维班100台规模集群阶段性综合上机实战考试

老男孩教育运维班100台规模集群第十关阶段性综合上机实战考试 光学理论有啥用,不拉出来实战遛遛,只能是自欺欺人! 项目要求: 1.全体学员上机实践考试,完成后由排长或班长.或助教打分. 2.时间:3个小时,抄袭0分. (一)上机服务器业务及IP主机名规划 已知5台服务器主机名主机对应信息见下表: 服务器说明 外网IP(NAT) 内网IP(NAT) 主机名 apache web服务器 10.0.0.7/24 172.16.1.7/24 web02 nginx web服务器 10.0.0.8/24

广度优先、深度优先搜索算法——面试题

广度优先搜索(Breadth-first Search) BFS在求解最短路径或者最短步数上有很多的应用.应用最多的是在走迷宫上. 分析 树的定义本身就是一种递归定义,因此对于树相关的算法题,递归是最好的解决思路(在递归深度允许的情况下). 递归版 public class Solution { public boolean isSymmetric(TreeNode root) { return root==null||isMirror(root.left,root.right); } priv

POJ 2449 Remmarguts' Date (第k短路 A*搜索算法模板)

Remmarguts' Date Time Limit: 4000MS   Memory Limit: 65536K Total Submissions: 22412   Accepted: 6085 Description "Good man never makes girls wait or breaks an appointment!" said the mandarin duck father. Softly touching his little ducks' head, h

优化人员应如何应对搜索算法调整

优化人员应如何应对搜索算法调整,三点钟的时候,没等人去叫,阿北自己出现在了会议室的门口.从这点看,他还是保持着一个技术人员的习惯,而不像一个CEO. 不知道为什么,技术出身的阿北,别人谈起来却每每提到说他的一墙碟,两墙书,三大洲的车船票,把他描绘成一个文艺青年,把豆瓣描绘成一个文艺青年聚集地. 文艺也可能是来自商业世界的委婉评语:这家成立十年,拥有过亿用户的网站,一直没有盈利.人们认为豆瓣已经慢了,老了,甚至被移动互联网抛弃了. 阿北说,豆瓣做过尝试,犯过错误,现在找到了新方向. 在2014年的