同我们学过的数据结构一样,大部分时候也不需我们发明算法,主要理解其原理和时间复杂度以及使用场景为主,大部分优化算法是以空间换时间。
查找
二分查找,查找数据需有序并且能够根据位置索引直接定位,比如ArrayList, java.util.Arrays.binarySearch
KMP,用于字符串高效查找
排序
选择排序
冒泡排序
希尔排序
快排,JDK中使用了优化的快排,java.util.Arrays.sort
堆排序
归并排序
基数排序
桶排
TimSort,归并排序的优化版,java中排序使用此方法
TOP—K
- 堆
- BFPRT,又称为”中位数的中位数算法”,该算法由Blum、Floyd、Pratt、Rivest、Tarjan提出,最坏时间复杂度为$O(n)
树
- 前序遍历
- 中序遍历
- 后续遍历
图
- 广度优先搜索BFS
- 深度优先搜索DFS
- 拓扑排序
- Dijkstra算法,有向图中查找单源最短路径,也即关键路径
- Floyd算法,有权图中查找任意两点间最短路径
- Prime算法,最小生成树
分治
贪心
递归
动态规划
基数估算
- LinerCount
- LogLogCount
- AdaptiveLogLogCount
- HyperLogLogCount
Hash算法
- MD5
- SHA,Secure Hash Algorithm
- MRUMRU
- CRC,循环冗余校验,Cyclic Redundancy Check
- adler
- good_fast_hash
加密算法
- AES,Advanced Encryption Standard
- DES,Data Encryption Standard
- RSA
- Base64
布隆算法
- BloomFilter, 判断一个元素是否在一个集合里,因哈希冲突可能误判
欧几里德算法
- 辗转相除法,求最大公约数
A*算法
- A*寻路算法,一种求最短有效路径的算法