zoukankan      html  css  js  c++  java
  • 对于搜索的新理解

    搜索是什么?

    1.问题全状态空间

    2.搜索空间

    3.解路径

    分类

    一,盲目搜索(只是搜索的顺序不同)

    1.深度优先搜索

    2.宽度优先搜索

    二,启发式搜索

    A*算法

    分类来讲

    1.深度优先搜索

    例题:皇后问题

    存在的问题:1.深度问题,2.死循环问题

    解决办法:1.对搜索深度加以限制

                      2.记录从初始状态到当前状态的路径

    性质:一般不能保证找到最优解

              当深度现在不合理时,可能找不到解,可以将算法改为可变深度限制

              最坏的情况,搜索空间相当于穷举

              是一个通用的与问题无关的方法

            节省内存,只存储从初始节点到当前节点的路径

    2.宽度优先搜索

    优先扩展深度浅的节点

    通常用一个队列来实现

    例题:八数码

    性质:当问题有解时,一定能找到解

              当问题为单位耗散值,且问题有解时,一定能找到最优解

              方法与问题无关,具有通用性

              效率较低

              存储量比较大

    【对比】

                 深搜  广搜           
    不保证最优解,除非枚举所有情况 每步代价相同时,一定能找到最优解
    空间消耗低 空间消耗高
    具有通用性
    效率低

    迭代加深搜索(dbfs)

    解决宽搜内存大和深搜不能保证最优解的问题

    解决方案:枚举最大的代价,用深搜判断是否有解--》卡时间

    3.启发式搜索(A*搜索)

    关键在于对当前局面作出预估,判断当前局面到目的的局面至少还需要多少步

    估价函数决定了A*算法的优劣

    练习题:1.01迷宫

                   2.高手去散步

                   3.血色先锋队

  • 相关阅读:
    NSString
    xib和storyboard的使用方法
    drawRect画线和使用CGContext
    CGAffineTransform动画
    【概念】静态成员
    【c#】Application.Exit和Close有什么不同
    【c#】const和readonly关键字
    【概念】设计模式
    【概念】常见数据结构与算法
    【概念】索引器
  • 原文地址:https://www.cnblogs.com/ZDHYXZ/p/8428207.html
Copyright © 2011-2022 走看看