基础算法
- 搜索与优化 一般的深搜不能满足题目要求。当题目一时没有头绪或者无从下手时不妨考虑搜索。剪 枝的原则:正确、高效。一般分为可行性剪枝和最优性剪枝。还可以使用记忆化搜索。
- 快速幂
复杂度 O(log n)。需要取模时基数和返回值都需要被取模。 - 二分查找 根据中值合法性缩小可行范围。O(log n)。
- 归并排序求逆序对 利用辅助数组排序。合并过程中可以求出逆序对的个数。复杂度 O(n*log n)。
- 数据离散化 对数据排序,然后从小到大扫描一遍,如果和前一个元素相同则编号为前一个元素,否 则计数器加一,编号为计数器编号。时间复杂度 O(n*log n)。
- 动态规划与递推 设计好状态,决策考虑全面,转移可分为转入和转出型。滚动数组时需要清空数组,并 判断合法状态。压成一维的时候注意转移的后效性。树形动态规划请注意父节点的倒置 子树对答案的影响。
- 矩阵乘法与矩阵快速幂 两个矩阵可以相乘,当且仅当前者行数与后者列数相等,结果为一个矩阵。矩阵乘法不 满足交换律。快速幂可以在重载运算符后类比普通快速幂做。
- 最大公约数与扩展欧几里得 用于求逆元和求解同余方程。对于其中的某一个解的最小非负整数解,可以是取模加模 再取模。
- 费马小定理 不适用于强伪质数。但是适用于大多数情况。可以用于求模质数下的逆元。
10. 线性筛除质数 每一个合数数都能分解除一个最小质因子。利用此性质筛除质数,复杂度 O(n)。
11. KMP 字符串匹配
预处理模式串的失配转移参数 next[i],若下一位失配则指针 cur 跳转到 next[cur]。 若cur = 0则结束跳转。复杂度O(n+m)。
12. 字符串哈希
设定哈希种子为一个质数,必须大于字符集大小。如果