`

【转】搜索算法基础教程 - Kangsheng的专栏 - CSDN博客

阅读更多

记录以待以后学习

搜索算法是利用计算机的高性能来有目的的穷举一个问题的部分或所有的可能情况,从而求出问题的解的一种方法。搜索过程实际上是根据初始条件和扩展规则构造一棵解答树并寻找符合目标状态的节点的过程。所有的搜索算法从其最终的算法实现上来看,都可以划分成两个部分──控制结构和产生系统,而所有的算法的优化和改进主要都是通过修改其控制结构来完成的。现在主要对其控制结构进行讨论,因此对其产生系统作如下约定:
Function ExpendNode(Situation:Tsituation;ExpendWayNo:Integer):TSituation;
表示对给出的节点状态Sitution采用第ExpendWayNo种扩展规则进行扩展,并且返回扩展后的状态。
(本文所采用的算法描述语言为类Pascal。)
一、回溯算法
回溯算法是所有搜索算法中最为基本的一种算法,其采用了一种“走不通就掉头”思想作为其控制结构,其相当于采用了先根遍历的方法来构造解答树,可用于找解或所有解以及最优解。具体的算法描述如下:
[非递归算法]<type> Node(节点类型)=Record Situtation:TSituation(当前节点状态); Way-NO:Integer(已使用过的扩展规则的数目); End<var> List(回溯表):Array[1..Max(最大深度)] of Node; pos(当前扩展节点编号):Integer;<init> ListWhile (pos&gt;0(有路可走)) and ([未达到目标]) doBegin If pos&gt;=Max then (数据溢出,跳出主程序); List[pos].Way-NO:=List[pos].Way-No+1; If (List[pos].Way-NO[递归算法]Procedure BackTrack(Situation:TSituation;deepth:Integer);Var I :Integer;Begin If deepth&gt;Max then (空间达到极限,跳出本过程); If Situation=Target then (找到目标); For I:=1 to TotalExpendMethod do Begin BackTrack(ExpendNode(Situation,I),deepth+1); End-For;End; <br>范例:一个M*M的棋盘上某一点上有一个马,要求寻找一条从这一点出发不重复的跳完棋盘上所有的点的路线。 <br>评价:回溯算法对空间的消耗较少,当其与分枝定界法一起使用时,对于所求解在解答树中层次较深的问题 有较好的效果。但应避免在后继节点可能与前继节点相同的问题中使用,以免产生循环。 <br>二、深度搜索与广度搜索 <br> 深度搜索与广度搜索的控制结构和产生系统很相似,唯一的区别在于对扩展节点选取上。由于其保留了所有的前继节点,所以在产生后继节点时可以去掉一部分重复的节点,从而提高了搜索效率。这两种算法每次都扩展一个节点的所有子节点,而不同的是,深度搜索下一次扩展的是本次扩展出来的子节点中的一个,而广度搜索扩展的则是本次扩展的节点的兄弟节点。在具体实现上为了提高效率,所以采用了不同的数据结构. <br>[广度搜索]<type> Node(节点类型)=Record Situtation:TSituation(当前节点状态); Level:Integer(当前节点深度); Last :Integer(父节点); End<var> List(节点表):Array[1..Max(最多节点数)] of Node(节点类型); open(总节点数):Integer; close(待扩展节点编号):Integer; New-S:TSituation;(新节点)<init> List While (close<open and do begin close:="close+1;" for i:="1" to totalexpendmethod new-s:="ExpendNode(List[close].Situation,I);" if not in list then open:="open+1;" end-if end-for end-while></open>[深度搜索]<var> Open:Array[1..Max] of Node;(待扩展节点表) Close:Array[1..Max] of Node;(已扩展节点表) openL,closeL:Integer;(表的长度) New-S:Tsituation;(新状态)<init> Open While (openL&gt;0) and (closeL<max and do begin closel:="closeL+1;" close openl:="openL-1;" for i:="1" to totalexpendmethod new-s:="ExpendNode(Close[closeL].Situation,I);" if not in list then open end-if end-for end></max>范例:迷宫问题,求解最短路径和可通路径。 <br>评价:广度搜索是求解最优解的一种较好的方法,在后面将会对其进行进一步的优化。而深度搜索多用于只 要求解,并且解答树中的重复节点较多并且重复较难判断时使用,但往往可以用分支定界或回溯算法代替。</init></var></init></var></type></init></var></type>

搜索算法基础教程 - Kangsheng的专栏 - CSDN博客

分享到:
评论

相关推荐

    分销商城tp5框架.zip

    文件kangsheng-master-575dfc04bb55877aec91f9bac9319ad1f10eef99可能是源代码仓库的某个特定版本,其中包含了商城的全部源代码。开发者可以通过解压后查看文件结构,了解各个模块的实现细节,包括控制器、模型、...

    一个使用Androidstudio开发的校园通知APP

    一个使用AndroidStudio开发的校园通知APP,支持注册登录,支持聊天,后端技术:http get post 方法(分别有json数据格式和form数据格式),websocket长连接,用于接收消息,mqtt协议用于查看数据。

    基于粒子群的ieee30节点优化、配电网有功-无功优化 软件:Matlab+Matpowre 介绍:对配电网中有功-无功协调优化调度展开研究,通过对光伏电源、储能装置、无功电源和变压器分接头等设备协调

    基于粒子群的ieee30节点优化、配电网有功-无功优化 软件:Matlab+Matpowre 介绍:对配电网中有功-无功协调优化调度展开研究,通过对光伏电源、储能装置、无功电源和变压器分接头等设备协调控制,以实现光伏利用率最大、网络损耗最小、电压质量最优的综合优化目标。 采用粒子群算法寻求最优解,得到配电网的调控策略,从而制定合理的优化运行方案。 最后通过算例分析,说明其合理性。 Matpowre(需要Matpowre请安装不然会有错)

    C#自定义事件 2024年12月23日

    通过自定义事件来传值。此种方法适合于写驱动程序。进行数据采集。 对于一般的系统事件,是有两个参数的,一个是sender,一个是EventArgs,对于sender,个事件的触发者,一般指向的是一个控件,但是对于EventArgs,一般常用来传递鼠标位置等信息,下面就自定义事件传值就是通过EventArgs来实现。 通过EventArgs来实现传值,我们首先需要创建一个类,继承EventArgs,我们可以将需要传递的数据,直接在类里面定义成属性,这里以传递一个布尔(没有再最终的代码内使用)、一个浮点数,一个字符串为例,

    基于校园的互帮互助社交APP全部资料+详细文档+高分项目.zip

    【资源说明】 基于校园的互帮互助社交APP全部资料+详细文档+高分项目.zip 【备注】 1、该项目是个人高分项目源码,已获导师指导认可通过,答辩评审分达到95分 2、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用! 3、本项目适合计算机相关专业(人工智能、通信工程、自动化、电子信息、物联网等)的在校学生、老师或者企业员工下载使用,也可作为毕业设计、课程设计、作业、项目初期立项演示等,当然也适合小白学习进阶。 4、如果基础还行,可以在此代码基础上进行修改,以实现其他功能,也可直接用于毕设、课设、作业等。 欢迎下载,沟通交流,互相学习,共同进步!

    Download usage

    Download usage

    基于高德地图的校园导航全部资料+详细文档+高分项目.zip

    【资源说明】 基于高德地图的校园导航全部资料+详细文档+高分项目.zip 【备注】 1、该项目是个人高分项目源码,已获导师指导认可通过,答辩评审分达到95分 2、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用! 3、本项目适合计算机相关专业(人工智能、通信工程、自动化、电子信息、物联网等)的在校学生、老师或者企业员工下载使用,也可作为毕业设计、课程设计、作业、项目初期立项演示等,当然也适合小白学习进阶。 4、如果基础还行,可以在此代码基础上进行修改,以实现其他功能,也可直接用于毕设、课设、作业等。 欢迎下载,沟通交流,互相学习,共同进步!

    健康中国2030框架下智慧医药医疗博览会方案

    内容概要:本文介绍了 2020 京东健康智慧医药医疗博览会在湖南长沙举办的总体方案。该方案详细描述了展会的背景、目标、组织机构、展区规模和内容、主体活动、拟邀嘉宾及宣传媒体等内容。展会旨在展示互联网+医疗健康生态下的新技术、新产品和新方案,推动智慧医疗产业链的数据化、信息化和智慧化建设,为健康中国战略和健康湖南行动贡献力量。 适合人群:医疗行业的从业人员、智慧医疗技术开发者、政府相关部门、健康产业投资人等。 使用场景及目标:① 通过展会展示先进的医药医疗技术和产品,促进技术交流与合作;② 推动智慧医疗产业发展,助力健康中国战略和健康湖南行动的实施;③ 提高人民群众的健康水平和医疗服务质量。 其他说明:此次展会将设置十大展区,涵盖健康管理、智慧医院、精准医疗、智能穿戴、移动医疗系统、智能养老等多个方面,同期还将举办多场论坛和商务活动。

    qt开发类似于网盘的项目

    C/S架构,C++开发的,使用UDP协议

    2023-04-06-项目笔记 - 第三百五十六阶段 - 4.4.2.354全局变量的作用域-354 -2025.12.23

    2023-04-06-项目笔记-第三百五十六阶段-课前小分享_小分享1.坚持提交gitee 小分享2.作业中提交代码 小分享3.写代码注意代码风格 4.3.1变量的使用 4.4变量的作用域与生命周期 4.4.1局部变量的作用域 4.4.2全局变量的作用域 4.4.2.1全局变量的作用域_1 4.4.2.354局变量的作用域_354- 2024-12-23

    基于Bmob后台搭建的一块校园社区类APP,内置二手交易模块全部资料+详细文档+高分项目.zip

    【资源说明】 基于Bmob后台搭建的一块校园社区类APP,内置二手交易模块全部资料+详细文档+高分项目.zip 【备注】 1、该项目是个人高分项目源码,已获导师指导认可通过,答辩评审分达到95分 2、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用! 3、本项目适合计算机相关专业(人工智能、通信工程、自动化、电子信息、物联网等)的在校学生、老师或者企业员工下载使用,也可作为毕业设计、课程设计、作业、项目初期立项演示等,当然也适合小白学习进阶。 4、如果基础还行,可以在此代码基础上进行修改,以实现其他功能,也可直接用于毕设、课设、作业等。 欢迎下载,沟通交流,互相学习,共同进步!

    高校学生求职就业平台(编号:24440246).zip

    高校学生求职就业平台(编号:24440246).zip

    Python与Pygame实现带特效的圣诞节场景模拟程序

    内容概要:本文详细介绍如何使用Python结合Pygame库制作一个充满圣诞气息的应用程序。该程序包括生成雪花、圣诞树以及闪烁星星的效果,并配以背景音乐以增加节日气氛。通过具体的代码示例,指导读者逐步构建这一有趣的项目。 适用人群:对于有兴趣探索Pygame图形库及游戏开发的基础开发者、编程初学者。 使用场景及目标:① 初步掌握Pygame的基本用法及其常见图形绘制方法;② 学习如何通过编程手段营造节日氛围;③ 作为个人项目或课堂作业的优秀实践。 其他说明:除了文中提供的基础功能外,鼓励读者在此基础上发挥创意,加入更多有趣的功能,比如动态改变场景中的物体、响应用户输入等,从而创造出独一无二的作品。

    计算机程序设计员三级(选择题)

    计算机程序设计员三级(选择题)

    基于Spring Boot的养老院管理系统的设计与实现_6575f5w2_223-wx(1).zip

    基于Spring Boot的养老院管理系统的设计与实现_6575f5w2_223-wx(1).zip

    数据结构排序算法:插入排序、希尔排序、冒泡排序及快速排序算法

    数据结构

    (42757812)0.96寸OLED显示屏STC8A8K64S4A12-IIC-例程

    内容来源于网络分享,如有侵权请联系我删除。另外如果没有积分的同学需要下载,请私信我。

    基于java的网上订餐系统(编号:96717170).zip

    基于java的网上订餐系统(编号:96717170).zip

    基于Java WEB旅游门票信息系统设计与实现_70rn7486_206-wx.zip

    基于Java WEB旅游门票信息系统设计与实现_70rn7486_206-wx.zip

    ST官方电机库FOC算法

    无刷电机永磁同步电机库,有感控制,无感控制库

Global site tag (gtag.js) - Google Analytics