0%

算法设计与分析 复习总结

算法复习总结

第一节 时间复杂度计算

Akra-Bazzi定理:常数$a_i>0, 0<b_i<1$,

别忘了等差数列和等比数列的求和公式

扩展二项式定理

$\binom{n}{m}=C_n^m(0\leq m\leq n)$,

当$\alpha<0$时:

第二节 最小生成树

Prim 和 Kruskal

第三节 最短路

三角不等式:$d_w(s, v) = d_w(s, u) + w(u, v)$

松弛操作:$d_w(s, v) = \min\left\{d_w(s, u) + w(u, v), d_w(s, v)\right\}$

单源最短路

  • DAG上的单源最短路:$O(n+m)$(拓扑排序$O(n+m)$,初始化$O(n)$,拓扑序枚举点松弛$O(n+m)$)
  • Bellman-Ford:$O(nm)$
  • Dijkstra:$O(n\log{n}+m)$

多源最短路

  • Floyd-Warshall:$O(n^3)$
  • Johnson’s:先建到所有点距离为$0$的超级源点,用B-F求出超级源点的单源最短路作为势能$h$,让图中每条边的边权$w’(u,v)=w(u,v)+h(u)-h(v)$,再对新图跑$n$遍Dijkstra,再变换回去就行,$O(n(n\log{n}+m))$

第四节 分治

快速傅里叶变换

欧拉公式(背!):$e^{i\theta} = \cos{\theta} + i\sin{\theta}$

卷积定理

  • 时域卷积$=$频域乘积 $f(t)\otimes g(t) = F(\omega)\odot G(\omega)$
  • 时域乘积$=$频域卷积 $f(t)\odot g(t) = F(\omega)\otimes G(\omega)$

周期函数$c_n=\frac{1}{T}\int_{-\frac{T}{2}}^{\frac{T}{2}}{f(t)\cdot e^{-i\cdot (n\omega_0)t}}\dd{t}$,非周期函数$F(\omega)=\int_{-\infty}^{\infty}{f(t)\cdot e^{-i\omega t}}\dd{t}$

积分不收敛时用拉普拉斯变换$F(\omega)=\int_{0}^{+\infty}{f(t)\cdot e^{-(\sigma \cdot i\omega t)}}\dd{t}$($\sigma$足够小就收敛)

DFT:$y[K]=\sum\limits_{n=0}^{N-1}{x[n]\cdot e^{-\frac{2\pi}{N}Kn\cdot i}}, K=0,1,\cdots,N-1\quad(\text{默认}T=N,也就是周期函数)$

FFT:分奇偶,递归…

时间复杂度$T(N) = 2T(\frac{N}{2})+O(N)=O(N\log{N})$,空间复杂度$O(\frac{N}{B}\log_M{N})$

vEB树

第五节 动态规划

Subproblem 定义子问题

Relate Subprob 关联子问题

Topological order 拓扑序

Base cases 边界情况

Original 原始问题

Time Analysis 时间复杂度分析

第六节 均摊分析

聚合分析

零存整取

势能法

第七节 P/NP问题

P:多项式时间算法、弱多项式时间($\log_n{U}$)、伪多项式时间($nU$)

NP:确定性时间算法猜一个解,再用确定性图灵机多项式时间内验证

EXP:只能在指数时间内解决的问题

R(ecursive):能在有限时间内解决的问题

第九节 哈希

全域哈希:$A$为一系列哈希函数$h$的集合,每个$h\in H$映射$U$到${1, 2, \cdots, M-1}$,如果对所有的$x\neq y\in U,Pr[h(x)=h(y)] \leq \frac1M \Leftrightarrow \frac{|\{h\in H|h(x)=h(y)\}|}{|H|} \leq \frac1M$,那么称它为全域的。

坚持原创技术分享, 您的支持将鼓励我继续创作!