算法基础复习

基础知识

  • 常见排序算法
算法 W ( n ) W(n) W(n) A ( n ) A(n) A(n)
插入 n 2 n^2 n2 n 2 n^2 n2
冒泡 n 2 n^2 n2 n 2 n^2 n2
快速 n 2 n^2 n2 O ( n log ⁡ n ) O(n\log n) O(nlogn)
O ( n log ⁡ n ) O(n\log n) O(nlogn) O ( n log ⁡ n ) O(n\log n) O(nlogn)
二分归并 O ( n log ⁡ n ) O(n\log n) O(nlogn) O ( n log ⁡ n ) O(n\log n) O(nlogn)

函数渐进的界

渐进上界 f ( n ) = O ( g ( n ) ) ⇔ ∃ c , n 0 ∈ N + , ∀ n > n 0 , 0 ≤ f ( n ) ≤ c   g ( n ) f(n)=O(g(n))\Leftrightarrow \exist c,n_0\in \mathbb{N}^{+},\forall n>n_0,0\le f(n)\le c\, g(n) f(n)=O(g(n))c,n0N+,n>n0,0f(n)cg(n)

渐进下界 f ( n ) = Ω ( g ( n ) ) ⇔ ∃ c , n 0 ∈ N + , ∀ n > n 0 ​ , 0 ≤ c g ( n ) ≤ f ( n ) f(n)=Ω(g(n))⇔∃c,n_0 ∈N + ,∀n>n_0​ ,0≤cg(n)≤f(n) f(n)=Ω(g(n))c,n0N+,n>n0,0cg(n)f(n)

渐进紧确界 f ( n ) = Θ ( g ( n ) ) ⇔ f ( n ) = O ( g ( n ) ) 当且仅当 f ( n ) = Ω ( g ( n ) ) f(n)=\Theta(g(n))\Leftrightarrow f(n)=O(g(n))\text{当且仅当} f(n)=\Omega(g(n)) f(n)=Θ(g(n))f(n)=O(g(n))当且仅当f(n)=Ω(g(n))

非渐进紧确上界 f ( n ) = o ( g ( n ) ) ⇔ ∀ c , ∃ n 0 ∈ N + , ∀ n > n 0 , 0 ≤ f ( n ) < c   g ( n ) f(n)=o(g(n))\Leftrightarrow \forall c,\exist n_0\in \mathbb{N}^{+},\forall n>n_0,0\le f(n)< c\, g(n) f(n)=o(g(n))c,n0N+,n>n0,0f(n)<cg(n)

非渐进紧确下界 f ( n ) = ω ( g ( n ) ) ⇔ ∀ c , ∃ n 0 ∈ N + , ∀ n > n 0 , 0 ≤ c    g ( n ) < f ( n ) f(n)=\omega (g(n))\Leftrightarrow\forall c,\exist n_0\in \mathbb{N}^{+},\forall n>n_0,0\le c\; g(n)<f(n) f(n)=ω(g(n))c,n0N+,n>n0,0cg(n)<f(n)

log ⁡ ( n ! ) = Θ ( n log ⁡ n ) n 1 log ⁡ n = O ( 1 ) \log(n!)=\Theta(n\log n) \quad n^{\frac{1}{\log n}}=O(1) log(n!)=Θ(nlogn)nlogn1=O(1)

C n + m − 1 m = ( n + m − 1 ) ! m ! ( n − 1 ) ! = Θ ( ( 1 + ε ) n + m − 1 ) C_{n+m-1}^m=\dfrac{(n+m-1)!}{m!(n-1)!}=\Theta((1+\varepsilon)^{n+m-1}) Cn+m1m=m!(n1)!(n+m1)!=Θ((1+ε)n+m1)

Stirling公式 n ! = 2 π n ( n e ) n ( 1 + Θ ( 1 n ) ) \text{Stirling公式}\quad n!=\sqrt{2\pi n}(\dfrac{n}{e})^n(1+\Theta(\dfrac{1}{n})) Stirling公式n!=2πn (en)n(1+Θ(n1))
∑ k = 1 n 1 / k = ln ⁡ n + O ( 1 ) ∑ t = 1 k t 2 t − 1 = ( k − 1 ) 2 k + 1 \sum_{k=1}^n 1/k=\ln n+O(1)\quad \sum^{k}_{t=1}t2^{t-1}=(k-1)2^k+1 k=1n1/k=lnn+O(1)t=1kt2t1=(k1)2k+1

主定理

T ( n ) = a T ( n / b ) + f ( n ) a ≥ 1 , b > 1 , T ( n ) ∈ N T(n)=aT(n/b)+f(n) \quad a\ge 1,b> 1,T(n)\in \mathbb{N} T(n)=aT(n/b)+f(n)a1,b>1,T(n)N

  1. f ( n ) = O ( n log ⁡ b a − ε ) , ε > 0 , f(n)=O(n^{\log_ba-\varepsilon}),\varepsilon>0, f(n)=O(nlogbaε),ε>0,那么 T ( n ) = Θ ( n log ⁡ b a ) T(n)=\Theta(n^{\log_ba}) T(n)=Θ(nlogba)
  2. f ( n ) = Θ ( n log ⁡ b a ) , f(n)=\Theta(n^{\log_ba}), f(n)=Θ(nlogba),那么 T ( n ) = Θ ( n log ⁡ b a log ⁡ n ) T(n)=\Theta(n^{\log_ba} \log n) T(n)=Θ(nlogbalogn)
  3. f ( n ) = Ω ( n log ⁡ b a + ε ) , ε > 0 , ∃ c ∈ ( 0 , 1 ) , ∀ n > n 0 , a f ( n / b ) ≤ c f ( n ) , f(n)=\Omega(n^{\log_ba+\varepsilon}),\varepsilon>0,\exist c\in(0,1),\forall n>n_0,af(n/b)\le cf(n), f(n)=Ω(nlogba+ε),ε>0,c(0,1),n>n0af(n/b)cf(n),那么 T ( n ) = Θ ( f ( n ) ) T(n)=\Theta(f(n)) T(n)=Θ(f(n))

多米诺性质

¬ P ( x 1 , x 2 , ⋅ ⋅ ⋅ , x k ) → ¬ P ( x 1 , x 2 , ⋅ ⋅ ⋅ , x k + 1 ) , 0 < k < n \neg P(x_1,x_2,···,x_{k})\rightarrow\neg P(x_1,x_2,···,x_{k+1}),0<k<n ¬P(x1,x2,⋅⋅⋅,xk)¬P(x1,x2,⋅⋅⋅,xk+1),0<k<n

一般选择问题

  • 问题:选第 k k k
  • 输入:数组 S , S . l e n g t h = n S,S.length=n S,S.length=n
  • 输出:第 k k k小的数

n = m ( 2 r + 1 ) , ∣ A ∣ = ∣ D ∣ = ⌊ m 2 ⌋    , ∣ B ∣ = ∣ C ∣ = ⌈ m 2 ⌉ r + ⌊ m 2 ⌋ n=m(2r+1),|A|=|D|=\lfloor \frac{m}{2}\rfloor\;,|B|=|C|=\lceil \frac{m}{2}\rceil r+\lfloor \frac{m}{2}\rfloor n=m(2r+1),A=D=2m,B=C=2mr+2m

r = n 2 m − 1 2 r=\frac{n}{2m}-\frac{1}{2} r=2mn21

剩余子问题规模至多为:
∣ A ∣ + ∣ B ∣ + ∣ D ∣ = m + ⌊ m 2 ⌋ 2 m n − 1 2 ⌈ m 2 ⌉ |A|+|B|+|D|=\frac{m+\lfloor \frac{m}{2}\rfloor}{2m}n-\frac{1}{2}\lceil \frac{m}{2}\rceil A+B+D=2mm+2mn212m

T ( n ) ≤ T ( n / m ) + T ( m + ⌊ m 2 ⌋ 2 m n ) + f ( n ) T(n)\le T(n/m)+T(\frac{m+\lfloor \frac{m}{2}\rfloor}{2m}n)+f(n) T(n)T(n/m)+T(2mm+2mn)+f(n)

反证法

n n n 为文件的总数, f i f_i fi​ 为文件 i i i 的被检索概率, s i s_i si​ 为文件 i i i 的存储空间大小。
贪心策略:按照比值 f s \dfrac{f}{s} sf从大到小排序
平均检索时间
T π = ∑ i = 1 n ( f i × ∑ j = 1 i s π ( i ) ) . T_\pi=\sum^n_{i=1}(f_i\times \sum_{j=1}^{i}s_{\pi (i)}). Tπ=i=1n(fi×j=1isπ(i)).
π ( i ) 表示排序 π 中第 i 个位置的文件 π(i) 表示排序 π 中第 i 个位置的文件 π(i)表示排序π中第i个位置的文件

假设存在最佳排序 π ∗ , \pi ^*, π,该排序中至少存在一对文件 π ∗ ( i ) 和 π ∗ ( j ) ( i ≠ j ) , \pi^*(i)\text{和}\pi^*(j)(i\neq j), π(i)π(j)(i=j),满足 f π ∗ ( i ) / s π ∗ ( i ) < f π ∗ ( j ) / s π ∗ ( j ) f_{\pi^*(i)}/s_{\pi^*(i)}<f_{\pi^*(j)}/s_{\pi^*(j)} fπ(i)/sπ(i)<fπ(j)/sπ(j) π ∗ ( i ) > π ∗ ( j ) \pi^*(i)>\pi^*(j) π(i)>π(j)
另构造 π ′ , π ′ ( k ) = π ∗ ( k ) , k ∉ { i , j } , π ′ ( i ) = π ∗ ( j ) , π ′ ( j ) = π ∗ ( i ) \pi',π'(k)=π^*(k),k\notin \{i,j\},π'(i)=π^∗(j),π'(j)=π^∗(i) π,π(k)=π(k),k/{i,j},π(i)=π(j)π(j)=π(i)
两种排序的平均检索时间只差
Δ = T π ′ − T π ∗ = ∑ k = 1 n ( f π ′ ( k ) × ∑ w = 1 k s π ′ ( w ) ) − ∑ k = 1 n ( f π ∗ ( k ) × ∑ w = 1 k s π ∗ ( w ) ) = f π ′ ( i ) × ∑ w = 1 i s π ′ ( w ) + f π ′ ( j ) × ∑ w = 1 j s π ′ ( w ) − f π ∗ ( i ) × ∑ w = 1 i s π ∗ ( w ) − f π ∗ ( j ) × ∑ w = 1 j s π ∗ ( w ) = f π ′ ( j ) × s π ′ ( i ) − f π ∗ ( j ) × s π ∗ ( j ) = f π ∗ ( i ) × s π ∗ ( j ) − f π ∗ ( j ) × s π ∗ ( j ) < 0 \begin{aligned} \Delta &= T_{\pi'}-T_{\pi^*}\\ &=\sum^n_{k=1}(f_{\pi'(k)}\times\sum_{w=1}^{k}s_{\pi' (w)}) -\sum^n_{k=1}(f_{\pi^*(k)}\times\sum_{w=1}^{k}s_{\pi^* (w)}) \\ &=f_{\pi'(i)}\times\sum_{w=1}^{i}s_{\pi'(w)} +f_{\pi'(j)}\times\sum_{w=1}^{j}s_{\pi' (w)} -f_{\pi^*(i)}\times\sum_{w=1}^{i}s_{\pi^* (w)} -f_{\pi^*(j)}\times\sum_{w=1}^{j}s_{\pi^* (w)} \\ &=f_{\pi'(j)}\times s_{\pi'(i)} -f_{\pi^*(j)}\times s_{\pi^*(j)} \\ &=f_{\pi^*(i)}\times s_{\pi^*(j)} -f_{\pi^*(j)}\times s_{\pi^*(j)} \\ &< 0 \end{aligned} Δ=TπTπ=k=1n(fπ(k)×w=1ksπ(w))k=1n(fπ(k)×w=1ksπ(w))=fπ(i)×w=1isπ(w)+fπ(j)×w=1jsπ(w)fπ(i)×w=1isπ(w)fπ(j)×w=1jsπ(w)=fπ(j)×sπ(i)fπ(j)×sπ(j)=fπ(i)×sπ(j)fπ(j)×sπ(j)<0
由于 Δ < 0 \Delta<0 Δ<0,这说明:按照排序 π ′ π' π的平均检索时间小于按照排序 π ∗ \pi^∗ π的平均检索时间,这与 π ∗ π^∗ π 是最优排序的假设矛盾。
即假设不成立,不存在一个最优排序不是按照 f / s f/s f/s​ 从大到小排序的。
所以,最优的贪心策略是按照 f / s f/s f/s​ 从大到小排序。

  • 49
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值