Published on

Math for algorithms

Authors

Math basics for algorithm

A.1 求和公式及其性质

  • 等差 k=1nk=n(n+1)2\sum_{k=1}^n k = \frac{n(n+1)}{2}
k=1nk2=n(n+1)(2n+1)6\sum_{k=1}^n k^2 = \frac{n(n+1)(2n+1)}{6} k=1nk3=n2(n+1)24\sum_{k=1}^n k^3 = \frac{n^2(n+1)^2}{4}
  • 线性性质
k=1n(cak+bk)=ck=1nak+k=1nbk\sum_{k=1}^n (ca_k+b_k) = c\sum_{k=1}^n a_k + \sum_{k=1}^n b_k k=1nΘ(f(k))=Θ(k=1nf(k))\sum_{k=1}^n \Theta\left(f(k)\right) = \Theta \left( \sum_{k=1}^n f(k) \right)
  • 几何级数
k=0nxk=1+x+x2++xn=xn+11x1\sum_{k=0}^n x^k = 1 + x + x^2 + \ldots + x^n = \frac{x^{n+1} - 1}{x - 1} k=0xk=1x1\sum_{k=0}^{\infty} x^k = \frac{1}{x - 1}
  • 调和级数
Hn=1+12+13+14++1n=k=1n1k=lnn+O(1)H_n = 1 + \frac{1}{2} + \frac{1}{3} + \frac{1}{4} + \ldots + \frac{1}{n} = \sum_{k=1}^n \frac{1}{k} = \ln{n} + O(1)
  • 级数积分与微分
k=0kxk=x(1x)2\sum_{k=0}^{\infty} kx^k = \frac{x}{(1-x)^2}
  • 列项级数 telescopes
k=1n(akak1)=ana0\sum_{k=1}^{n} (a_k - a_{k-1}) = a_n - a_0 k=0n1(ak1ak)=a0an\sum_{k=0}^{n-1} (a_{k-1} - a_k) = a_0 - a_n k=1n11k(k+1)=k=1n1(1k1k+1)=11n\sum_{k=1}^{n-1} \frac{1}{k(k+1)} = \sum_{k=1}^{n-1} \left(\frac{1}{k} - \frac{1}{k+1}\right) = 1 - \frac{1}{n}
  • 乘积 lg(k=1nak)=k=1nlgak\lg\left(\prod_{k=1}^{n} a_k \right) = \sum_{k=1}^{n} \lg{a_k}

A.2 确定求和时间的界

  • 数学归纳法

  • 确定级数中各项的界

  • k=11k=limnk=1n1k=limnΘ(lgn)=\sum_{k=1}^{\infty} \frac{1}{k} = \lim_{n \to \infty} {\sum_{k=1}^{n} \frac{1}{k}} = \lim_{n \to \infty} {\Theta(\lg n)} = \infty
Hn=k=1n1k=1+12+13+14++1nlnn+1H_n = \sum_{k=1}^n \frac{1}{k} = 1 + \frac{1}{2} + \frac{1}{3} + \frac{1}{4} + \ldots + \frac{1}{n} \leq \ln{n} + 1
  • 通过积分求和的近似

    • if f(x)f(x) 单调递增:

      m1nf(x)dxk=mnf(k)mn+1f(x)dx \int_{m-1}^{n} f(x)\,dx \leq \sum_{k=m}^n f(k) \leq \int_{m}^{n+1} f(x)\,dx
    • if f(x)f(x) 单调递减:

      mn+1f(x)dxk=mnf(k)m1nf(x)dx \int_{m}^{n+1} f(x)\,dx \leq \sum_{k=m}^n f(k) \leq \int_{m-1}^{n} f(x)\,dx
    Hn=k=1n1k1n+11xdx=ln(n+1)H_n = \sum_{k=1}^n \frac{1}{k} \geq \int_{1}^{n+1} \frac{1}{x}\,dx = \ln{(n+1)} k=2n1k1n1xdx=ln(n)\sum_{k=2}^n \frac{1}{k} \leq \int_{1}^{n} \frac{1}{x}\,dx = \ln{(n)} Hn=k=1n1klnn+1H_n = \sum_{k=1}^n \frac{1}{k} \leq \ln{n} + 1

重点

  • Illustrate function call stack

  • Describe how to convert recursion to iteration

    • one function call

    • 2 or more function calls

    • tail recursion

  • PERMUTATION

PERM(A, k)
  if(k == n)
    PRINT(A)
  for i = 1 to n
    SWAP(A, i, k)
    PERM(A, k+1)
    SWAP(A, i, k)

PERM(A, 1)
  • DFS and stack

  • BFS and queue