【数据结构基础复习系列】数学基础知识铺垫

指数

X A X B = X A + B X^{A}X^{B}=X^{A+B} XAXB=XA+B
X A X B = X A − B \frac{X^{A}}{X^{B}}=X^{A-B} XBXA=XAB
( X A ) B = X A B (X^{A})^{B}=X^{AB} (XA)B=XAB
X N + X N = 2 X N ≠ X 2 N {X^N}+{X^N}=2{X^N} \neq X^{2N} XN+XN=2XN=X2N
2 N + 2 N = 2 N + 1 2^N+2^N=2^{N+1} 2N+2N=2N+1

对数

定义: X A = B X^A=B XA=B,当且仅当 l o g X B = A log_XB=A logXB=A
l o g A B = l o g C B l o g C A log_AB=\frac{log_CB}{log_CA} logAB=logCAlogCB

级数

∑ i = 0 N 2 i = 2 N + 1 − 1 ⇒ ∑ i = 0 N A i = A N + 1 − 1 A − 1 \sum_{i=0}^{N}2^i=2^{N+1}-1\Rightarrow\sum_{i=0}^{N}A^i=\frac{A^{N+1}-1}{A-1} i=0N2i=2N+11i=0NAi=A1AN+11
∑ i = 1 N i = N ( N + 1 ) 2 ≈ N 2 2 \sum_{i=1}^Ni=\frac {N(N+1)}{2}\approx \frac{N^2}{2} i=1Ni=2N(N+1)2N2
∑ i = 1 N i 2 = N ( N + 1 ) ( 2 N + 1 ) 6 ≈ N 3 3 \sum_{i=1}^Ni^2=\frac {N(N+1)(2N+1)}{6}\approx \frac{N^3}{3} i=1Ni2=6N(N+1)(2N+1)3N3
∑ i = 1 N i k ≈ N k + 1 ∣ k + 1 ∣ \sum_{i=1}^Ni^k\approx \frac{N^{k+1}}{|k+1|} i=1Nikk+1Nk+1

模运算

如果N整除A和B,那么则说A和B模N同余(congruent),计为 A ≡ B ( m o d N ) A \equiv B(mod N) AB(modN),例如 81 ≡ 61 ( m o d 10 ) 81 \equiv 61(mod10) 8161(mod10)。性质:若 A ≡ B ( m o d N ) A \equiv B(mod N) AB(modN),则 A + C ≡ B + C ( m o d N ) A+C \equiv B+C(mod N) A+CB+C(modN) A C ≡ B C ( m o d N ) AC \equiv BC(mod N) ACBC(modN)

算法分析

定义1:如果 ∃ c , ∃ n 0 \exists c,\exists n_0 c,n0使得当 N ≥ n 0 N \geq n_0 Nn0时, T ( N ) ≤ c f ( N ) T(N) \leq cf(N) T(N)cf(N),则记为 T ( N ) = O ( f ( N ) ) T(N)=O(f(N)) T(N)=O(f(N))。念成“大O ⋯ ⋯ \cdots\cdots ”。
定义2:如果 ∃ c , ∃ n 0 \exists c,\exists n_0 c,n0使得当 N ≥ n 0 N \geq n_0 Nn0时, T ( N ) ≥ c g ( N ) T(N) \geq cg(N) T(N)cg(N),则记为 T ( N ) = Ω ( g ( N ) ) T(N)=\Omega (g(N)) T(N)=Ω(g(N))。念成“omega ⋯ ⋯ \cdots\cdots ”。
定义3 T ( N ) = Θ ( h ( N ) ) T(N)=\Theta (h(N)) T(N)=Θ(h(N))当且仅当 T ( N ) = O ( h ( N ) ) T(N)=O(h(N)) T(N)=O(h(N)) T ( N ) = Ω ( h ( N ) ) T(N)=\Omega (h(N)) T(N)=Ω(h(N))。念成“theta ⋯ ⋯ \cdots\cdots
定义4:如果 T ( N ) = O ( p ( N ) ) T(N)=O(p(N)) T(N)=O(p(N)) T ( N ) ≠ Θ ( p ( N ) ) T(N)\neq \Theta (p(N)) T(N)=Θ(p(N)),则 T ( N ) = o ( p ( N ) ) T(N)=o(p(N)) T(N)=o(p(N))。念成“小o ⋯ ⋯ \cdots\cdots ”。
用传统的不等式来计算增长率,则定义1表示T(N)的增长率小于等于 ( ≤ ) (\leq) ()f(N)的增长率;定义2表示表示T(N)的增长率大于等于 ( ≥ ) (\geq) ()g(N)的增长率;定义3表示表示T(N)的增长率等于 ( = ) (=) (=)h(N)的增长率;定义2表示表示T(N)的增长率小于 ( < ) (<) (<)p(N)的增长率。当我们说 T ( N ) = O ( f ( N ) ) T(N)=O(f(N)) T(N)=O(f(N)),我们是在保证T(N)以不快于f(N)的速度增长,因此 O O O表示一个上界, Ω \Omega Ω表示一个下届。
法则1
如果 T 1 ( N ) = O ( f ( N ) ) T_1(N)=O(f(N)) T1(N)=O(f(N)) T 2 ( N ) = O ( g ( N ) ) T_2(N)=O(g(N)) T2(N)=O(g(N)),那么
T 1 ( N ) + T 2 ( N ) = m a x ( O ( f ( N ) ) , O ( g ( N ) ) ) T_1(N)+T_2(N)=max(O(f(N)),O(g(N))) T1(N)+T2(N)=max(O(f(N)),O(g(N)))
T 1 ( N ) ∗ T 2 ( N ) = O ( O ( f ( N ) ) ∗ O ( g ( N ) ) ) T_1(N)*T_2(N)=O(O(f(N))*O(g(N))) T1(N)T2(N)=O(O(f(N))O(g(N)))
法则2:如果T(N)是一个k次多项式,则 T ( N ) = Θ ( N k ) T(N)= \Theta (N^k) T(N)=Θ(Nk)
法则3 ∀ 常 数 k \forall 常数k k l o g k N = O ( N ) log^kN=O(N) logkN=O(N),这说明对数增长很缓慢。
常见函数增长率排序
函 数 名 称 c 常 数 级 l o g N 对 数 级 l o g 2 N 对 数 平 方 级 别 N 线 性 级 N l o g N N 2 平 方 级 N 3 立 方 级 2 N 指 数 级 \begin{array}{|c|c|} \hline 函数 & 名称 \\ \hline c & 常数级\\ \hline logN & 对数级\\ \hline log^2N & 对数平方级别\\ \hline N & 线性级\\ \hline NlogN\\ \hline N^2 & 平方级\\ \hline N^3 & 立方级\\ \hline 2^N & 指数级\\ \hline \end{array} clogNlog2NNNlogNN2N32N线

运行时间计算

以简化分析,一般约定:不存在特定的时间单位 ,抛弃一些常数系数和低阶项,从而要做的是计算大O运行时间(即上界)。程序可以提前结束,但是绝不可以拖后。
一个简单的例子,计算 ∑ i = 1 N i 3 \sum_{i=1}^Ni^3 i=1Ni3的程序片段:

	Sum(int N){
		int i,PartialSum;
/*1*/	PartialSum=0;
/*2*/	for(i=0;i<N;i++)
/*3*/		PartialSum += i*i*i;
/*4*/	return PartialSum;
}

函数变量声明不计算时间,第1行和第4行各占一个单元时间。第3行每执行一次占用四个单元的时间(3个乘法运算1个加法运算)。第3行的i初始化占一个时间单位,测试N+1个单位,自增N个单位。因此,总的时间开销是6N+4,则说该函数是O(N)。
假设每一个程序段都像上述来分析是不明智的,于是得到一些一般法则:
法则1:FOR循环
一次for循环的运行时间至多是循环内部语句时间乘以迭代次数。
法则2:嵌套的FOR循环
有里向外分析,在一组嵌套循环语句内部语句时间乘以该组for循环的大小。

for(i=0;i<N;i++)
	for(j=0;j<N;j++)
		语句;

上述程序段的运行时间就为 O ( N 2 ) O(N^2) O(N2)
法则3:顺序语句
将各个语句的运行时间一次求和即可,意味着其中的最大值就是运行的时间。

for(i=0;i<N;i++)
	语句;
for(i=0;i<N;i++)
	for(j=0;j<N;j++)
		语句;

上述程序端的运行时间 O ( N ) + O ( N 2 ) O(N)+O(N^2) O(N)+O(N2),抛去低阶项,则程序的运行时间为 O ( N 2 ) O(N^2) O(N2)
法则4:IF/ELSE语句
if中的判断时间开销,if中的执行语句开销,else中的执行语句开销,这个时间开销估计会过高,但绝不会过低。

补充

等比数列( a n = a 1 ⋅ q ( n − 1 ) a_n=a_1\cdot q^{\left(n-1\right)} an=a1q(n1))求和公式:
S n = n × a 1 ( q = 1 ) S_n=n\times a_1\quad (q=1) Sn=n×a1(q=1)
S n = a 1 ⋅ 1 − q n 1 − q = a 1 − a n ⋅ q 1 − q ( q ≠ 1 ) S_n=a_1\cdot \frac{1-q_n}{1-q}=\frac{a_1-a_n\cdot q}{1-q} \quad (q\neq1) Sn=a11q1qn=1qa1anq(q=1)
等差数列( a n = a 1 + ( n − 1 ) d a_n=a_1+(n-1)d an=a1+(n1)d)求和公式:
S n = n a 1 + n ( n − 1 ) 2 d = 1 2 n ( a 1 + a n ) , n ∈ N ∗ S_n=na_1+\frac{n(n-1)}{2}d=\frac{1}{2}n(a_1+a_n),n\in N^* Sn=na1+2n(n1)d=21n(a1+an),nN

你可能感兴趣的:(课程总结)