一、搜索算法
- 二分查找(Binary Search)
- 应用:在有序数组中查找特定元素,时间复杂度为O(log n)。
- 特点:通过不断将数组分成两半,缩小查找范围,直到找到目标元素或确定目标元素不存在。
- A*搜索算法
- 应用:图形搜索,如游戏地图中的路径规划。
- 特点:结合启发式函数评估节点,以找到从起点到终点的最短路径。
- 广度优先搜索(BFS)
- 应用:图的遍历、最短路径问题(无负权边)。
- 特点:从起始节点开始,逐层遍历图中的所有节点。
- 深度优先搜索(DFS)
- 应用:图的遍历、解决迷宫问题等。
- 特点:尽可能深地搜索图的分支,直到找到目标或分支结束,然后回溯。
二、排序算法
- 冒泡排序(Bubble Sort)
- 应用:小规模数据排序。
- 特点:通过重复交换相邻元素的位置,直到没有需要交换的元素为止,时间复杂度为O(n^2)。
- 快速排序(Quick Sort)
- 应用:大规模数据排序。
- 特点:选择一个基准元素,将数组分为两部分,递归地对这两部分进行快速排序,时间复杂度平均为O(n log n)。
- 归并排序(Merge Sort)
- 应用:大规模数据排序。
- 特点:将数组分成两半,对这两半分别进行归并排序,然后将排序好的两部分合并,时间复杂度为O(n log n)。
三、图算法
- Dijkstra算法
- 应用:在有向无环图(DAG)中计算单一起点到其他所有点的最短路径。
- 特点:使用贪心策略,逐步找到最短路径。
- Floyd-Warshall算法
- 应用:计算图中所有顶点对之间的最短路径。
- 特点:通过三重循环,动态规划地计算最短路径。
- 最小生成树算法(Prim、Kruskal)
- 应用:构建图的最小生成树,即包含图中所有节点的最小边权连通子图。
- 特点:Prim算法适用于加权无向图,Kruskal算法适用于加权有向图。
四、动态规划算法
- 背包问题(Knapsack Problem)
- 应用:资源分配、优化问题。
- 特点:通过状态转移方程,逐步求解最优解。
- 最长公共子序列(LCS)
- 应用:文本编辑、基因序列分析。
- 特点:找出两个序列中的最长公共子序列。
五、其他算法
- 哈希算法
- 应用:数据检索、安全加密。
- 特点:通过哈希函数将任意长度的输入映射为固定长度的输出,实现快速检索和加密。
- 数据压缩算法(霍夫曼编码、LZ77、LZ78)
- 应用:文本、图像、视频等数据压缩。
- 特点:通过减少数据中的冗余信息,实现数据压缩。
- 加密算法(RSA、Diffie-Hellman)
- 应用:信息安全、网络通信。
- 特点:通过复杂的数学运算,实现数据的加密和解密,确保数据的安全性。