常用算法总结
文章目录
- 常用算法总结
- 迭代算法(Iteration)
- 递归算法(Recursion)
- 回溯算法(Backtrack)
- 深度优先(Depth First Search, DFS)
- 广度优先(Breadth First Search, BFS)
- 动态规划(Dynamic Programming, DP)
- 分治算法(二分法, Binary Algorithm)
- 贪心算法(Greedy Algorithm)
- 滑动窗口(Slipping Window)
- 双指针(Double Pointer)
- 位运算(Bit)
- 自动机
- 搜索/排序算法
- 关于链表(List)
- 关于树(Tree)
- 关于图(Graph)
- 关于栈、队列、散列表(queue, stack, hashlist)
迭代算法(Iteration)
递归算法(Recursion)
- 二叉树的遍历算法
回溯算法(Backtrack)
- 八皇后问题
深度优先(Depth First Search, DFS)
- 全排列问题
广度优先(Breadth First Search, BFS)
类型
-
不需要确定当前深度
-
需要确定当前深度
习题
动态规划(Dynamic Programming, DP)
- 斐波那契数列
- 爬楼梯问题
- 背包问题
- 最长公共子序列
- 最优二叉搜索树
分治算法(二分法, Binary Algorithm)
-
二分排序
-
二分查找
贪心算法(Greedy Algorithm)
- 霍夫曼编码
滑动窗口(Slipping Window)
双指针(Double Pointer)
位运算(Bit)
要点
-
异或运算(xor)
- 任何数与0做异或运算,结果仍为原来的数。即:
a ⊕ 0 = a a \oplus 0 = a a⊕0=a
- 任何数与0做异或运算,结果仍为原来的数。即:
-
任何数和其自身做异或运算,结果为0。即:
a ⊕ a = 0 a \oplus a = 0 a⊕a=0- 异或运算满足交换律和结合律。即:
a ⊕ b = b ⊕ a a ⊕ b ⊕ c = a ⊕ ( b ⊕ c ) a\oplus b = b\oplus a \\ a \oplus b \oplus c = a\oplus (b\oplus c) a⊕b=b⊕aa⊕b⊕c=a⊕(b⊕c)
习题
- 不使用额外空间进行数交换
- 找到只出现奇数次的数字
自动机
搜索/排序算法
- 快速排序
- 希尔排序
- 插入排序
- 拓扑排序
- 二分排序
- 堆排序
关于链表(List)
- 单向链表
- 双向链表
- 广义表
关于树(Tree)
- 二叉树遍历
- 前序遍历
- 中序遍历
- 后序遍历
- 层序遍历
- 二叉搜索树
- 红黑树
- kd 树
- B 树
- 堆
- 极大堆
关于图(Graph)
- 最小生成树
- 最短路径问题
关于栈、队列、散列表(queue, stack, hashlist)
-
栈对于二叉树层序遍历的实现
-
最大优先级队列