• 搜索


    •深度优先搜索(DFS)
    •广度优先搜索(BFS)
    •迭代加深搜索(IDDFS)
    •剪枝
    •记忆化搜索
     
    •1.状态:
    •对搜索情况的描述就叫做状态
    •比如你遍历一个树,你可以把遍历到的节点作为状态,也可以把遍历过的节点作为状态
    (搜索要确定好状态)
    •2.搜索树:
    •不同的状态之间能够相互转移,即我可以从一个状态变化成另一个状态
    •例如把一个序列作为状态,当你对这个序列进行操作后,你能得到另一个序列,表示你移动到了另一个状态
    •不同状态之间的转移关系组成了一个树结构(虽然有时候也可能是图结构)
    •因此状态也常常被称为节点
    3.剪枝
    •可行性剪枝:对于绝对到不了目标状态的状态直接cut
    •最优化剪枝:对于绝对成不了最终答案的状态直接cut
    •剪枝类别很少,具体的应用是丰富多样的
    •考虑剪枝的时候,可以直接从最优和可行两个角度考虑
    •考虑什么状态一定到不了目标
    •考虑什么状态一定不会成为最优值
    •思考剪枝的一个重要思路是在极端情况下能不能满足题目要求
     
     
    •剪枝的时候也必须保证正确性,如果搜不到正确答案跑得飞快也没有意义
    •但是大部分情况请尽可能把你能想到的(保证正确的)剪枝丢上去
     
     可通过更改枚举顺序使方案最优
     
    4.记忆化搜索
    •刚才我们记录d[i][j]的过程实际上就是一个记忆化搜索的过程
    •所谓记忆化搜索,就是记录状态的某些属性(比如从起始状态到此状态的最优花费)
    •储存这些属性可能会让之后的搜索更方便,或者更快
    •记忆化搜索最常见的应用有两个
    •一个是储存最优值进行剪枝
    •另一个某些属性需要遍历状态的后续状态才能得到,储存这些属性就可以防止重复遍历
     5.迭代加深搜索
    •有时候某个问题状态没法存,深度又不知道有多深,dfs和bfs都遇到了自己的难处
    •这个时候迭代加深ID(Iterative Deepen)应运而生,结合了二者的优点
    •首先它是逐层搜索,保证第一次达到目标就是最优解,避免了更深层的深入
    •有时候状态数随层数深入程指数爆炸趋势,上下两层之间状态数差距非常大
    •其次它的遍历方式仍然是dfs,这样方便回溯,不用储存状态
     
  • 相关阅读:
    第2节 2020.05.16 智能互联网之关键系统实践篇【二】
    如何学习系统架构
    cas机制学习
    乐观锁和悲观锁
    qps和tps计算
    brpc的channel和controller学习
    protobuf和brpc
    gflags学习
    一致性哈希学习
    cmake常用命令学习
  • 原文地址:https://www.cnblogs.com/zyfltyyz/p/11719257.html
Copyright © 2020-2023  润新知