知识整理及技巧总结——搜索

注:只整理了一些比较常用的并且考的可能大的知识点

  1. Flood Fill
    • 典型例题
      P1514 [NOIP2010 提高组] 引水入城
  2. 搜索剪枝
    • 常用搜索剪枝:
      • 优化搜索顺序
        大部分情况下,我们应该优先搜索分支较少的结点
      • 排除等效冗余
        不考虑顺序的情况下,一般用组合数搜索,不用排列数
      • 可行性剪枝
        如果当前状态已不合法,那么当前状态的所有子状态均不合法,退出
      • 最优性剪枝
        如果当前搜到的状态已比当前的最优解差,显然所有子状态一定不是最优解,退出
      • 记忆化搜索(DP)
    • 典型题目
      • [NOIP2009 提高组] 靶形数独
      • [NOIP2011 提高组] Mayan 游戏
      • [NOIP2015 提高组] 斗地主
      • 小木棍
  3. 折半搜索/双向搜索
    • 折半搜索,即 meet in middle。
      • 是一类可以优化搜索复杂度的方法。假设原来的搜索复杂度为 \(O(2^n)\),一般可将其优化成搜索复杂度 \(O(2^{\frac{n}{2}})\),合并复杂度 \(O(n)\)\(O(n\log n)\)的方法。
      • 在搜索起点和终点确定的情况下,分别从起点和终点开始搜索,当到达相应深度的节点相遇时就停止,对所有搜索到的叶子节点统计答案,一般可以用 \(O(1)\) 的 unordered_map 或 \(O(log n)\) 的 map,也有 pbds 中 \(O(1)\) 的 cc_hash_table 和 gp_hash_table,也可以自己手写 hash 表。
    • 典型题目
  4. 启发式搜索
    一般不太常用,主要思想就是通过贪心来实现一个正确性较高的估价函数,通过估价函数进一步判断接下来的操作。
posted @ 2023-08-23 19:58  week_end  阅读(20)  评论(0)    收藏  举报