练习了将近一个月的搜索算法了,也有了一些小小的感悟。

搜索算法的两个关键问题:
(1):如何找到整个解空间。
(2):如何剪枝。
我的感悟是关于解空间的。问题的解往往需要经过一系列操作之后才能得到,而在这一系列的操作中,每一步的操作都会得到一个状态,当最终这个状态与目标状态相同时,此时也就是得到了结果,所以在搜索的过程中,着重需要处理的就是操作和状态。只有考虑了所有可能的操作,才会得到所有可能的状态。下面举例说明。
以NYOJ的21题《三个水杯》为例(这道题的题目及解题报告在本博客中,读着可先阅读题目),问题所包含的所有操作如下图:
每一步都有6种操作方法,那是不是按照这6种操作方法进行搜索,就可以得到结果了呢?先来看看下面这组测试数据:
6 3 1
4 1 1
按照6中操作方法所得的搜索树如下图:

如图中红色箭头所示的搜索路径A→B→A……,A→C→A……,如果按照深度优先进行搜索(当然,这道题最好使用宽度优先搜索,这里只是为了说明问题),这里出现了死循环。那是不是只要避免出现这种搜索路径,就能避免出现死循环呢?遗憾的是出现死循环的路径还可以是更复杂一些的,所以很难通过对操作进行限制来解决出现重复状态。
既然因为同一个状态在搜索树中重复出现,导致搜索的无穷尽。容易想到在状态上做文章,也就是将搜索中出现的状态保存下来,当得到新的状态时,判断该状态是否出现过,出现过则舍弃,如下图:

通过这个例子,发现当考虑了所有的操作时,还要对操作所得状态进行判断,是否已出现过,来避免重复搜索。这道题我纠结了好久,就是因为我想通过限制操作来避免出现重复状态,而出现重复状态的情况有很多,很难考虑全面。其实判断状态是否重复我之前也都做过,就是在搜索迷宫的过程中,操作就是移动的方向,而状态就是位置,为了避免重复搜索就在地图上做标记,当时这样做的时候觉得顺理成章,不过在这题里,却并没有能直接这样做。
总结下,在搜索整个解空间时,首先是考虑所有的操作,然后通过保存已出现状态,来防止重复搜索。如果很容易通过对操作进行限制来防止状态的重复出现,或是保存状态所需的内存空间过大的话,那就不宜保存状态。
本人菜鸟,有高见者请赐教!

搜索算法的感悟——解空间相关推荐

  1. Java数据库篇之mysql VS postgresql

    目录 1.综述 2.索引方面 2.1 Postgresql: 单列,多列,唯一,表达式索引,部分索引 2.2 Mysql四大索引:主键,唯一,普通,全文 2.3 mysql索引注意事项 2.4 何时使 ...

  2. 捕食搜索matlab代码,第8章——捕食搜索算法分析.ppt

    第8章--捕食搜索算法分析 * 捕食搜索算法--计算举例 * 捕食搜索算法--计算举例 * 捕食搜索算法--计算举例 * 课程全部结束欢迎提问,批评 谢谢大家! * * 第八章 捕食搜索算法 * Pr ...

  3. 19图的搜索算法总结与比较

    图的搜索算法小结 1.深度优先搜索与广度优先搜索算法有何区别 通常深度优先搜索法不全部保留结点,扩展完的结点从数据存储结构栈中弹出删去,这样,一般在数据栈中存储的结点数就是解空间树的深度,因此它占用空 ...

  4. 局部遮荫光伏matlab,一种基于随机蛙跳全局搜索算法的局部阴影光伏阵列MPPT控制的制作方法...

    本发明涉及一种局部阴影光伏阵列多峰MPPT控制方法,特别涉及一种基于随机蛙跳全局搜索算法的局部阴影光伏列阵多峰MPPT控制. 背景技术: 伴随太阳能发电的普及,光伏阵列的运行环境变的越来越复杂,局部遮 ...

  5. 回溯法采用的搜索策略_17图的搜索算法之回溯法

    回 溯 法 回溯算法实际是一个类似枚举的搜索尝试方法,它的主题思想是在搜索尝试中找问题的解,当不满足求解条件就"回溯"返回,尝试别的路径.回溯算法是尝试搜索算法中最为基本的一种算法 ...

  6. tsp问题的c语言编码,原创:TSP有关问题解决方案-禁忌搜索算法C实现

    1 /*****************************************************************************2 ** Copyright: NEW ...

  7. 智能优化算法:闪电搜索算法-附代码

    智能优化算法:闪电搜索算法-附代码 文章目录 智能优化算法:闪电搜索算法-附代码 1.算法原理 1.1 过渡放电体 1.2 空间放电体 1.3 引导放电体 2.算法结果 3.参考文献 4.Matlab ...

  8. 头歌平台-人工智能导论实验(盲目搜索算法)

    广度优先搜索 def PlayMazz(mazz, start, end):'''走迷宫,从start走到end:param mazz: 图:param start: 图的起点:param end: ...

  9. 【优化规划】基于matlab禁忌搜索算法求解配电网无功补偿优化规划问题【含Matlab源码 1842期】

    一.基于禁忌搜索算法的无功优化参数选择及流程 禁忌搜索方法是Glover F在1986年首次提出的一种智能启发式算法.鉴于禁忌搜索算法是对局部邻域搜索的一种扩展,通过引入一个灵活的存储结构和相应的禁忌 ...

  10. 【ML4CO论文精读】具有离散拆分送货和取货的车辆路径问题的禁忌搜索算法(Meng Qiu, 2018)

    Paper: A Tabu Search algorithm for the vehicle routing problem with discrete split deliveries and pi ...

最新文章

  1. php文件的标准格式化,PHP获取文件大小并格式化的几种方法
  2. 在Python中访问字典中的任意元素
  3. 使用System.Transactions
  4. uefi模式下win10安装双系统ubuntu18.04LTS
  5. jzoj3188-找数【质数筛,数论】
  6. JavaScript试题练习题
  7. 7-32 中位数 (10 分)
  8. php 获取当前action,ThinkPHP3.2.2获取当前Action名称
  9. 将Vim打造成Python快速开发环境(一)
  10. mybatis update返回值的意义
  11. python三维可视化:配置tvtk
  12. eclipse sdk 无法更新
  13. 「 机器人学 」“增量式/绝对式编码器”讲解
  14. 使用ipop共享串口提高工作效率
  15. pythondebug教学_python debug的使用方式
  16. 数字图像处理(冈萨雷斯)_数字图像处理笔记总结
  17. 机器学习项目开发经验
  18. struts1和struts2的区别
  19. python argparse bool_python argparse 解析命令行参数
  20. 1.PCIe扫盲——PCIe简介

热门文章

  1. NEFU锐格实验一[字符串]
  2. 1999年秋浙江省计算机等级考试二级c 编程题,2004年秋浙江省计算机等级考试二级C 编程题(2) (C++代码)...
  3. 东北大学计算机学院教授,东北大学之计算机系
  4. java 正态分布数_生成正态分布的数
  5. QThread: Destroyed while thread is still running的处理方法
  6. 蓝色简约的工业大学学校网站静态模板
  7. PS亮度蒙版插件TKActions V5 Mac版
  8. 杂题收录+简要题解3【杭电多校】
  9. 《她身之欲》(珠三角阅流动人口社群特殊职业研究)阅读感想
  10. 微信订阅号和服务号的区别