とんぼの気持ちとんぼの気持ち
Home
  • Spring Cloud

    • Spring Cloud
    • Spring Cloud Alibaba
    • Spring Cloud Netflix
  • Zookeeper

    • Zookeeper
  • 分布式锁

    • 分布式锁
  • 分布式事务

    • 分布式事务
GitHub
Home
  • Spring Cloud

    • Spring Cloud
    • Spring Cloud Alibaba
    • Spring Cloud Netflix
  • Zookeeper

    • Zookeeper
  • 分布式锁

    • 分布式锁
  • 分布式事务

    • 分布式事务
GitHub

搜索算法

搜索算法目录

  • 线性搜索
  • 二分搜索
  • 插值搜索
  • 跳跃搜索
  • 指数搜索
  • 分块搜索
  • 深度优先搜索
  • 广度优先搜索
  • A* 搜索
  • Dijkstra 算法
  • 贝尔曼-福特算法
  • Floyd-Warshall 算法
  • 哈希查找
  • 分支限界搜索
  • IDDFS
  • 双向搜索
  • 迭代加深 A*
  • 贪心搜索
  • 统一代价搜索
  • 约束满足问题搜索
  • 模拟退火
  • 遗传算法
  • 蚁群算法
  • 粒子群优化
  • 深度强化学习

总结

1. 线性搜索 (Linear Search)

  • 描述:逐个检查每个元素,直到找到目标元素或遍历完整个数据结构。
  • 时间复杂度:O(n)
  • 空间复杂度:O(1)

2. 二分搜索 (Binary Search)

  • 描述:在有序数组中查找元素,通过反复将搜索范围减半来查找目标元素。
  • 时间复杂度:O(log n)
  • 空间复杂度:O(1)
  • 前提条件:数据必须是有序的

3. 插值搜索 (Interpolation Search)

  • 描述:改进的二分搜索,通过估计目标元素的位置来缩小搜索范围。
  • 时间复杂度:O(log log n) 平均,O(n) 最坏
  • 空间复杂度:O(1)
  • 前提条件:数据必须是有序的,且分布均匀

4. 跳跃搜索 (Jump Search)

  • 描述:在有序数组中查找元素,通过跳跃固定步长来缩小搜索范围,然后进行线性搜索。
  • 时间复杂度:O(√n)
  • 空间复杂度:O(1)
  • 前提条件:数据必须是有序的

5. 指数搜索 (Exponential Search)

  • 描述:在有序数组中查找元素,通过指数增长的步长来找到搜索范围,然后进行二分搜索。
  • 时间复杂度:O(log n)
  • 空间复杂度:O(1)
  • 前提条件:数据必须是有序的

6. 分块搜索 (Block Search)

  • 描述:将数据分成块,每块内进行线性搜索,块之间进行二分搜索。
  • 时间复杂度:O(√n)
  • 空间复杂度:O(1)
  • 前提条件:数据必须是有序的

7. 深度优先搜索 (Depth-First Search, DFS)

  • 描述:在图或树中,从起始节点开始,沿着每个分支尽可能深入地搜索。
  • 时间复杂度:O(V + E),其中 V 是顶点数,E 是边数
  • 空间复杂度:O(V)
  • 适用场景:图和树的遍历

8. 广度优先搜索 (Breadth-First Search, BFS)

  • 描述:在图或树中,从起始节点开始,逐层搜索每个节点。
  • 时间复杂度:O(V + E),其中 V 是顶点数,E 是边数
  • 空间复杂度:O(V)
  • 适用场景:图和树的遍历

9. A* 搜索 (A* Search)

  • 描述:启发式搜索算法,结合了广度优先搜索和最佳优先搜索,通过估计函数来找到最短路径。
  • 时间复杂度:O(E),其中 E 是边数
  • 空间复杂度:O(V)
  • 适用场景:路径查找

10. Dijkstra 算法 (Dijkstra's Algorithm)

  • 描述:在加权图中查找从起始节点到其他节点的最短路径。
  • 时间复杂度:O(V^2) 或 O(E + V log V)(使用优先队列)
  • 空间复杂度:O(V)
  • 适用场景:加权图的最短路径查找

11. 贝尔曼-福特算法 (Bellman-Ford Algorithm)

  • 描述:在加权图中查找从起始节点到其他节点的最短路径,允许负权重边。
  • 时间复杂度:O(VE)
  • 空间复杂度:O(V)
  • 适用场景:加权图的最短路径查找,允许负权重边

12. Floyd-Warshall 算法 (Floyd-Warshall Algorithm)

  • 描述:在加权图中查找所有节点对之间的最短路径。
  • 时间复杂度:O(V^3)
  • 空间复杂度:O(V^2)
  • 适用场景:加权图的所有节点对最短路径查找

13. 哈希查找 (Hash Search)

  • 描述:通过哈希函数将键映射到哈希表中的位置,进行查找。
  • 时间复杂度:O(1) 平均,O(n) 最坏
  • 空间复杂度:O(n)
  • 适用场景:快速查找

14. 分支限界搜索 (Branch and Bound)

  • 描述:用于解决组合优化问题,通过分支和限界策略来减少搜索空间。
  • 时间复杂度:取决于具体问题
  • 空间复杂度:取决于具体问题
  • 适用场景:组合优化问题,如旅行商问题

15. IDDFS (Iterative Deepening Depth-First Search)

  • 描述:结合深度优先搜索和广度优先搜索的优点,通过逐步增加深度限制来进行搜索。
  • 时间复杂度:O(b^d),其中 b 是分支因子,d 是深度
  • 空间复杂度:O(d)
  • 适用场景:图和树的遍历,特别是当搜索深度未知时

16. 双向搜索 (Bidirectional Search)

  • 描述:从起点和终点同时进行搜索,直到两者相遇,从而减少搜索空间。
  • 时间复杂度:O(b^(d/2)),其中 b 是分支因子,d 是深度
  • 空间复杂度:O(b^(d/2))
  • 适用场景:路径查找

17. 迭代加深 A* (Iterative Deepening A*, IDA*)

  • 描述:结合 A* 和迭代加深搜索,通过逐步增加估计成本限制来进行搜索。
  • 时间复杂度:取决于启发式函数
  • 空间复杂度:O(d)
  • 适用场景:路径查找

18. 贪心搜索 (Greedy Best-First Search)

  • 描述:每次选择估计离目标最近的节点进行扩展,使用启发式函数来指导搜索。
  • 时间复杂度:O(b^m),其中 b 是分支因子,m 是最大深度
  • 空间复杂度:O(b^m)
  • 适用场景:路径查找

19. 统一代价搜索 (Uniform Cost Search)

  • 描述:类似于 Dijkstra 算法,每次扩展代价最小的节点,适用于加权图。
  • 时间复杂度:O(b^m),其中 b 是分支因子,m 是最大深度
  • 空间复杂度:O(b^m)
  • 适用场景:路径查找

20. 约束满足问题搜索 (Constraint Satisfaction Problem, CSP)

  • 描述:用于解决约束满足问题,通过变量赋值和约束传播来进行搜索。
  • 时间复杂度:取决于具体问题
  • 空间复杂度:取决于具体问题
  • 适用场景:约束满足问题,如数独、图着色

21. 模拟退火 (Simulated Annealing)

  • 描述:启发式搜索算法,通过模拟物理退火过程来找到全局最优解。
  • 时间复杂度:取决于冷却计划
  • 空间复杂度:O(1)
  • 适用场景:优化问题

22. 遗传算法 (Genetic Algorithm)

  • 描述:基于自然选择和遗传学原理,通过选择、交叉和变异来搜索最优解。
  • 时间复杂度:取决于种群大小和迭代次数
  • 空间复杂度:取决于种群大小
  • 适用场景:优化问题

23. 蚁群算法 (Ant Colony Optimization)

  • 描述:基于蚂蚁觅食行为,通过信息素的积累和挥发来找到最优路径。
  • 时间复杂度:取决于蚂蚁数量和迭代次数
  • 空间复杂度:取决于蚂蚁数量
  • 适用场景:路径优化问题

24. 粒子群优化 (Particle Swarm Optimization)

  • 描述:基于群体智能,通过粒子的位置和速度更新来搜索最优解。
  • 时间复杂度:取决于粒子数量和迭代次数
  • 空间复杂度:取决于粒子数量
  • 适用场景:优化问题

25. 深度强化学习 (Deep Reinforcement Learning)

  • 描述:结合深度学习和强化学习,通过与环境交互来学习最优策略。
  • 时间复杂度:取决于具体问题和模型
  • 空间复杂度:取决于具体问题和模型
  • 适用场景:复杂决策问题
Edit this page
最后更新时间:
贡献者: hyfly233, hyfly233