搜索算法的一些涉及

  1. 前言:(知识点基本都是百度百科的)
    最近刚好想把蚁群算法用java写出来,刚好做剑指offer的题,一直都是树的搜索,都属于搜索算法,边学变写,刚刚好。加油,小伙子。
    1.1 在面对实际问题时,要学会转换成树的状态,利用树来解决问题
    1.2 回溯法就是比如,记录当前点,然后随机寻路,比如往左一直走,走不通的时候,就回溯到这个记录的当前点,再往右一直走试试。个人理解,回溯法更像是一种编程技巧,

几篇文章,自己看着合适,贴个连接:
https://zhuanlan.zhihu.com/p/24986203
https://blog.csdn.net/jiang_xinxing/article/details/58181185
https://blog.csdn.net/u012706811/article/details/51429924
https://www.cnblogs.com/zhangjunjie/p/3368269.html

  1. 搜索算法简介

    搜索算法是利用计算机的高性能来有目的的穷举一个问题解空间的部分或所有的可能情况,从而求出问题的解的一种方法。现阶段一般有枚举算法、深度优先搜索、广度优先搜索、A*算法、回溯算法、蒙特卡洛树搜索、散列函数等算法。在大规模实验环境中,通常通过在搜索前,根据条件降低搜索规模;根据问题的约束条件进行剪枝;利用搜索过程中的中间解,避免重复计算这几种方法进行优化。

    搜索算法实际上是根据初始条件和扩展规则构造的一颗“解答树”,并寻找符合条件状态的节点的过程,所以的搜索算法从最终的算法实现上来看,都可以划分为两个部分——控制结构(扩展结点的方式)和产生系统(扩展结点),而所有的。而所有的算法优化和改进主要都是通过修改其控制结构来完成的。这样,就将一个具体的问题抽象成了一个图论的模型——树,即搜索算法的使用第一步在于搜索树的建立。
    搜索树的建立完成后,完成搜索的过程就是找到一条从根结点到目标结点的路径。这种搜索算法的实现类似于图或者树的遍历,常用的两种实现方法为深度优先搜索(DFS——depth first search)和广度优先搜索(BFS——breadth first search)

  2. 深度优先搜索:(用栈来实现)

    深度优先搜索所遵循的搜索策略是尽可能“深”地搜索树。它的基本思想是:为了求得问题的解,先选择某一种可能情况向前(子结点)探索,在探索过程中,一旦发现原来的选择不符合要求,就回溯至父亲结点重新选择另一结点,继续向前探索,如此反复进行,直至求得最优解。深度优先搜索的实现方式可以采用递归或者栈来实现。

  3. 广度优先搜索:(用队列来实现)(D*算法的思想和这个差不多)

    类似树的按层遍历,其过程为:首先访问初始点Vi,并将其标记为已访问过,接着访问Vi的所有未被访问过可到达的邻接点Vi1、Vi2……Vit,并均标记为已访问过,然后再按照Vi1、Vi2……Vit的次序,访问每一个顶点的所有未被访问过的邻接点,并均标记为已访问过,依此类推,直到图中所有和初始点Vi有路径相通的顶点都被访问过为止。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值