搜索算法入门 广度优先搜索 深度优先搜索 简单的搜索剪枝 wfzyl2007.

Slides:



Advertisements
Similar presentations
质数和合数 中心小学 顾禹 人教版小学五年级数学下册 一、激趣导入 提示:密码是一个三位 数,它既是一个偶数, 又是 5 的倍数;最高位是 9 的最大因数;中间一位 是最小的质数。你能打 开密码锁吗?
Advertisements

1 、谁能说说什么是因数? 在整数范围内( 0 除外),如果甲数 能被乙数整除,我们就说甲数是乙数的 倍数,乙数是甲数的因数。 如: 12÷4=3 4 就是 12 的因数 2 、回顾一下,我们认识的自然数可以分 成几类? 3 、其实自然数还有一种新的分类方法, 你知道吗?这就是我们今天这节课的学.
因数与倍数 2 、 5 的倍数的特征
摆一摆,想一想. 棋子个数数的个数 摆出的数 、 10 2 、 11 、 20 3 、 12 、 21 、 30 4 、 13 、 22 、 31 、 40 5 、 14 、 23 、 32 、 41 、
3 的倍数特征 抢三十
质数和合数 2 的因数( ) 6 的因数( ) 10 的因数 ( ) 12 的因数 ( ) 14 的因数 ( ) 11 的因数 ( ) 4 的因数( ) 9 的因数( ) 8 的因数( ) 7 的因数( ) 1 、 2 、 3 、 4 、 6 、 12 1 、 11 1 、 2 、 5 、 10.

3 的倍数的特征 的倍数有 : 。 5 的倍数有 : 。 既是 2 的倍数又是 5 的倍数有 : 。 12 , 18 , 20 , 48 , 60 , 72 , , 25 , 60 ,

因数与倍数 2 、 5 的倍数的特征 绿色圃中小学教育网 扶余市蔡家沟镇中心小学 雷可心.
2 和 5 的倍数的特征 运动热身 怎样找一个数的倍数? 从小到大写出 2 的倍数( 10 个): 写出 5 的倍数( 6 个) 2 , 4 , 6 , 8 , 10 , 12 , 14 , 16 , 18 , 20 5 , 10 , 15 , 20 , 25 , 30.
3.5 元 / 千克 2.6 元 / 千克 买 3 千克 要多少钱? = (元)
人教版五年级数学上册. 3.5 元 / 千克 2.6 元 / 千克 买 3 千克 要多少钱? = (元)
人教版五年级数学上册. 因数 因数 5555 积 75 结论:一个因数不变,另一个因数扩大 (或缩小) 10 倍、 100 倍、 1000 倍,积 也扩大(或缩小) 10 倍、 100 倍、 1000 倍。 仔细观察,看能得出什么结论?
冀教版四年级数学上册 本节课我们主要来学习 2 、 3 、 5 的倍数特征,同学们要注意观察 和总结规律,掌握 2 、 3 、 5 的倍 数分别有什么特点,并且能够按 要求找出符合条件的数。
人教新课标一年级数学下册. 教学目标 1. 初步掌握 100 以内数的顺序。 2. 初步会比较 100 以内数的大小。 3. 初步结合具体事物,使同学们 感 受 100 以内数的意义,会用 100 以 内的数表示日常生活中的事物, 并进行简单的估计和交流。
新人教版四年级数学上册 笔算除法 森村中心学校 江国飞 1 、口算。 360÷30= 840÷40= 200÷50= 270÷90= 40÷20= ÷40=3600÷19≈30 90÷30=3 900÷31≈30.
重庆市九龙坡区走马小学 邓华. 一、复习导入,揭示课题 下面哪些数是 2 的倍数?哪些数是 5 的倍数? 2,5的倍数的特征:只看个位上数就能进行判断。 2的倍数:个位上是0,2,4,6,8的数。
练一练: 在数轴上画出表示下列各数的点, 并指出这些点相互间的关系: -6 , 6 , -3 , 3 , -1.5, 1.5.
2 、 5 的倍数特征 集合 2 的倍数(要求) 在百数表上依次将 2 的倍数找出 并用红色的彩笔涂上颜色。
阻塞操作. 在 linux 里,一个等待队列由一个 wait_queue_head_t 类型的结构来描述 等待队列的初始化: static wait_queue_head_t testqueue; init_waitqueue_head(&testqueue);
圆的一般方程 (x-a)2 +(y-b)2=r2 x2+y2+Dx+Ey+F=0 Ax2+Bxy+Cy2+Dx+Ey+ F=0.
10.2 立方根.
小学生游戏.
第四次大作业 登陆学校图书馆网站的电子数据库
初中数学八年级下册 (苏科版) 10.4 探索三角形 相似的条件(2).
C++中的声音处理 在传统Turbo C环境中,如果想用C语言控制电脑发声,可以用Sound函数。在VC6.6环境中如果想控制电脑发声则采用Beep函数。原型为: Beep(频率,持续时间) , 单位毫秒 暂停程序执行使用Sleep函数 Sleep(持续时间), 单位毫秒 引用这两个函数时,必须包含头文件
在PHP和MYSQL中实现完美的中文显示
人教版五年级数学上册 小数乘整数 谭家河三小:倪铵雪.
强连通分量 无向图 1、任意两顶点连通称该图为连通图 2、否则将其中的极大连通子图称为连通分量 A D C B E 有向图
走进编程 程序的顺序结构(二).
第四次课后作业 1 问题描述: 将谜题定义为:包含一个初始位置,一个目标位置,以及用于判断是否是有效移动的规则集。
Online job scheduling in Distributed Machine Learning Clusters
What have we learned?.
本节内容 模拟线程切换 视频提供:昆山滴水信息技术有限公司 官网地址: 论坛地址: QQ交流 :
1085至1125年间的官员地域分布与社会关系 1.
绿色圃中小学教育网 比例 比例的意义 绿色圃中小学教育网
使用矩阵表示 最小生成树算法.
工业机器人技术基础及应用 主讲人:顾老师
宁波市高校慕课联盟课程 与 进行交互 Linux 系统管理.
宁波市高校慕课联盟课程 与 进行交互 Linux 系统管理.
第4章 非线性规划 4.5 约束最优化方法 2019/4/6 山东大学 软件学院.
数列.
专题作业.
简单介绍 用C++实现简单的模板数据结构 ArrayList(数组, 类似std::vector)
顺序表的删除.
线性规 Linear Programming
线 性 代 数 厦门大学线性代数教学组 2019年4月24日6时8分 / 45.
姚金宇 MIT SCHEME 使用说明 姚金宇
用计算器开方.
<编程达人入门课程> 本节内容 内存的使用 视频提供:昆山爱达人信息技术有限公司 官网地址: 联系QQ: QQ交流群: ,
Lightweight Data-flow Analysis for Execution-driven Constraint Solving
Web安全基础教程
成绩是怎么算出来的? 16级第一学期半期考试成绩 班级 姓名 语文 数学 英语 政治 历史 地理 物理 化学 生物 总分 1 张三1 115
iSIGHT 基本培训 使用 Excel的栅栏问题
§6.7 子空间的直和 一、直和的定义 二、直和的判定 三、多个子空间的直和.
DFS & BFS 2018年10月30日.
本节内容 结构体 视频提供:昆山爱达人信息技术有限公司 官网地址: 联系QQ: QQ交流群 : 联系电话:
树和图 tree and graph 蔡亚星.
多层循环 Private Sub Command1_Click() Dim i As Integer, j As Integer
第七、八次实验要求.
第二节 函数的极限 一、函数极限的定义 二、函数极限的性质 三、小结 思考题.
2、5、3的倍数的特征.
基于列存储的RDF数据管理 朱敏
任选四个不同的数字,组成一个最大的数和一个最小的数。用最大的数减去最小的数。用所得结果的四位数重复上述过程,最多七步,必得6174
找 因 数.
线性规划 Linear Programming
第十七讲 密码执行(1).
第十二讲 密码执行(上).
§4.5 最大公因式的矩阵求法( Ⅱ ).
Presentation transcript:

搜索算法入门 广度优先搜索 深度优先搜索 简单的搜索剪枝 wfzyl2007

搜索算法应用范围 广度优先搜索 深度优先搜索 不同的搜索方式和剪枝技巧的运用,会对程序效率产生巨大影响。 解决最优解问题,例如迷宫问题。 深度优先搜索 解决可行解问题,例如8皇后问题。 不同的搜索方式和剪枝技巧的运用,会对程序效率产生巨大影响。 搜索的过程,实际上是遍历一个解答树的过程。图中每个节点是一个搜索状态,有向边对应状态转移。凡是能转化为这一模型的问题都可以用搜索算法解决,只是时间效率存在问题。

广度优先搜索 按照广度优先的顺序遍历状态空间。 算法框架如下: //BreadthFirstSearch InitialQueue( Queue ); Queue.push( startState ); While ( ! Queue.empty ) { currentState = Queue.front(); if( currentState == endState ) return result; tempState = extend ( currentState ); If( tempState is legal ) { Queue.push( tempState ); }

Boj 1017 Description 最近流行一个叫做Herbert的游戏,下面我们来看它的简化版:游戏地图是一个24*24的网格来表示。机器人Herbert的体积刚好占一个格子,每次机器人可以往上、下左、右四个方向移动。每个格子可能是以下几种情况中的一种:1:空格子,用‘*’表示,机器人可以随意经过。2:格子放有障碍物。用‘#’表示,机器人不能进入这个格子。3: 格子放有按钮。按钮分为两种,一种是白色的,用‘w’表示,机器人经过后将会得到加分。另外一种是黑色的,用‘b’表示。机器人经过后机器人将会毁坏。机器人的初始位置用‘s’表示。希望你能做一个程序判断当前的地图是否能得到所有的加分。 Input 第一行输入正整数T,表明有T组数据(0 < T < 20)。每一组数据是一个24*24的矩阵。 Output 如果能够得到所有的加分,则输出"YES"。否则输出"NO"。

这是一个最简单的迷宫问题。分析得出,’b’格子与’#’格子是等价的。我们只需要在读入时统计出所有’w’格子的数量N,再从起点’s’格子进行广度优先搜索,遍历得到所有可以到达的’w’格子数量m。 如果N==m,则‘YES’;否则‘NO’。 这是一个运用广搜最简单的例子,但我们发现处理时并不是那么简单。

广度优先搜索技巧 运用方向数组来辅助修改坐标 如何保存路径 上例中,我们要由一个状态向其上、下、左、右四个方向扩展。可以定义方向数组: const int dx={ 0, 1, 0, -1}; const int dy={ -1, 0, 1, 0}; 如何保存路径 一般用一个结构体来记录广搜时的状态,如下所示: struct state{ int x, y, d; //int op, pre; }; 如果需要记录路径,我们在结构体中加入两个变量,op表示此次搜索的方向,而pre表示到达此状态的前一个状态在队列中的位置,初始状态的pre为-1。

对广搜进行优化 优化状态空间 优化存储空间 优化判重方式 优化搜索方式 如何最优地表示一个状态 优化存储空间 压缩存储技术 优化判重方式 Hash、Map的运用 优化搜索方式 正向搜索 or 反向搜索? 优先队列广搜、A*、双向广搜 今天只是一个入门讲解,只在这里简单一提如何优化状态空间,有兴趣的同学可以去查找相关资料。

Poj1324 Holedox Moving 贪吃蛇的游戏相信大家都玩过,这个题也是类似的,题目要求蛇头能达点(1,1)。

条件n, m (1<=n, m<=20) 和 L (2<=L<=8) 同时地图上还有一些阻碍物。 蛇头不能碰到自己的身体,并且不能碰到阻碍物。

最好的算法,就是搜索,要求出最小的步数,并且可能有无解的情况,那么当然用广度优先搜索算法。 因为广度优先搜索需要判重,而判重就需要用到记录状态,但是这道题中最大的难点就是状态的记录。 因为我们需要记录的是蛇头的位置,还有蛇身的情况。

平时一般迷宫问题,我们用广度优先搜索的时候,一般就是用一个数组去保存状态。那这个题可以吗? 我们考虑最极端的情况,蛇的长度最大的时候有8段,我们如果要记录这8段的位置,位置的可能20*20=400,那么就可能会用到 400^8的空间,这样做可能吗?或者说这样有必要吗?

分析下去,我们会发现,如果蛇头的位置确定,那么蛇身可以从蛇头按4个方向一直走到蛇尾。 这样状态数只为 20 * 20 * (4)^7 =6553600 一个的数组还是可以承受的。

推荐习题 普通BFS 优先队列BFS 启发式搜索 双向BFS BOJ1079、POJ1324、POJ3322、POJ3414

深度优先搜索 按照深度优先的顺序遍历状态空间。 算法框架如下: void search( curState ) { if( curState == endState ) { save the result; return success; } if( curState is illegal ) { return fail; for( tmpState = extend( curState ) ) { search( tmpState );

Boj 1039 Description Input Output 遥远的Vitamin部落有着传奇的文化,他们已经知道,将一个数a相加若干次(或者0次,虽然他们并不知道0的存在)后,可以得到另外一个b,则他们称数a是数b的Vitamin因子。Vitamin族人认为:一个太少,三个太多,两个正好。因为他们认为“两个”是天神对他们的恩赐。所以在他们的祭祀天神的活动中,有一种舞蹈叫做“两个 舞”。这个舞蹈由N个漂亮的姑娘来表演,每个姑娘的头巾上会有一个数字(1到9),姑娘依次从幕后跳出来,每个时刻,已经出场的姑娘头巾上数字可以按出场 顺序用Vitamin记数法可以组成一个数,这个数只能有两个Vitamin因子。例如:有两个姑娘跳舞的时候,可以给第一姑娘编号为2,第二姑娘编为3。先是第一个姑娘出场,她的号码2有两个Vitamin因子。接着第二个姑娘上场了,她和第一个姑娘组成了数字23,也只有两个Vitamin因子。 Input 多组测试数据。每组数据只有一个整数N(1<= N <= 7),且占一行。数据以0结束(该0不用求解)。 表示有N个姑娘跳舞。 Output 每组输入对应的输出应在一个块内,即每组测试数据的输出后多输出一个空行,仅一个!从第一个姑娘开始,将每个姑娘的编号按Vitamin记数法可以得到一个数,将每组数据的输出按照从小到大输出。

这是一道简单的深度优先搜索和判素数的题目。 题目要求找出所有满足前m位(m=1…N)均为素数的N位数。 状态是当前找到前m位符合要求的数,处于搜索树的m深度处。用深度优先搜索,优先扩展m+1深度处的状态,直到扩展到N深度或者无解回溯。

简单的剪枝技巧 极端法剪枝 调整法剪枝 数学方法 在博弈问题中多采用的Alpha-Beta剪枝 通过前面的搜索已经得到一个较优值S’。发现当前状态扩展出来的值已经不可能比S’更好,故放弃当前状态的扩展。 调整法剪枝 通过对子树的比较剪掉重复子树和明显不是最有“前途”的子树。 数学方法 通过数学方法计算出扩展的上界或下界,适用范围有限。 在博弈问题中多采用的Alpha-Beta剪枝 这里只简单一提,有兴趣同学可以去查相关资料。

谢谢 Poj1324贪吃蛇问题更详细解答可以参考:http://forum.byr.edu.cn/bbscon.php?bid=212&id=28668 更多深入了解可以去看lrj黑书和算法导论。 我的联系方式 E-mail:151256391@qq.com 论坛ID:wfzyl2007