搜索算法
搜索算法目录
- 线性搜索
- 二分搜索
- 插值搜索
- 跳跃搜索
- 指数搜索
- 分块搜索
- 深度优先搜索
- 广度优先搜索
- 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)
- 描述:结合深度学习和强化学习,通过与环境交互来学习最优策略。
- 时间复杂度:取决于具体问题和模型
- 空间复杂度:取决于具体问题和模型
- 适用场景:复杂决策问题