1. 算法的特征
    ·输入项(Input):一个算法有0个或多个输入,对所求解问题特定实例描述的统称;
    ·输出项(Output):一个算法有一个或多个输出,经计算和处理之后得到的信息,即针对输入问题实例的答案;
    ·确定性(Definiteness):算法可描述为由若干语义明确的基本操作组成的指令序列;
    ·可行性(Effectiveness):算法的任每一基本操作在对应的计算模型中均可兑现。
    ·有穷性(Finiteness):任意算法都应在执行有限次基本操作之后终止并给出输出;
    ·正确性(correctness):算法所给的输出应该能够符合由问题本身在事先确定的条件。

  2. 程序性能分析

·时间复杂度:执行时间的这一变化趋势可表示为输入规模的一个函数,具体地,特定算法处理规模为n的问题所需的时间可记作T(n)。

·渐进复杂度:注重时间复杂度的总体变化趋势和增长速度的策略与方法,即所谓的渐进分析(asymptotic analysis)。
大O记号:渐进上界(最差时间复杂度)
具体地,若存在正的常数c和函数f(n),使得对任何n>>2都有
T(n)cf(n)T(n) \leq c \cdot f(n)
即在n足够大之后,f(n)给出了T(n)增长速度的一个渐进上界,并记为
T(n)=O(f(n))T(n) = O(f(n))
大O记号的性质:
(1)对于任一常数c>0c>0,有O(f(n))=O(cf(n))O(f(n)) = O(c \cdot f(n));
(2)对于任意常数a>b>0a>b>0,有O(na+nb)=O(na)O(n^a + n^b) = O(n^a)

大Ω记号:渐进下界(最好时间复杂度)
若存在正的常数c和函数g(n),使得对任何n>>2都有
T(n)cg(n)T(n) \geq c \cdot g(n)
即在n足够大之后,g(n)给出了T(n)增长速度的一个渐进下界,并记为
T(n)=Ω(g(n))T(n) = \Omega(g(n))

大Θ记号:确界(平均时间复杂度)
若存在正的常数c1<c2c_1 < c_2和函数h(n),使得对任何n>>2都有
c1h(n)T(n)c2h(n)c_1 \cdot h(n) \leq T(n) \leq c_2 \cdot h(n)
即在n足够大之后,h(n)给出了T(n)增长速度的一个确界,并记为
T(n)=Θ(h(n))T(n) = \Theta(h(n))
数据结构笔记(一)——基础
·空间复杂度:程序允许所需内存的大小,可记作S(n)。

  1. 减而治之(decrease-and-conquer)算法策略:(线性)递归每深入一层,待求解问题的规模都缩减一个常数,直至最终蜕化为平凡的小(简单)问题。
    ·例:
    T(n)=T(n1)+O(1)=T(n1)+c1//T(n) = T(n-1) + O(1) = T(n-1) + c_1//递推关系
    T(0)=O(1)=c2//T(0) = O(1) = c_2//边界条件
    T(n)=c1n+c2=O(n)T(n) = c_1 n + c_2 = O(n)

  2. 分而治之(divide-and-conquer)算法策略:将其分解为若干规模更小的子问题,再通过递归机制分别求解。这种分解持续进行,直到子问题规模缩减至平凡情况。
    ·每一递归实例都可能做多次递归,故称作“多路递归”(multi-way recursion)。通常都是将原问题一分为二,故称作“二分递归”(binary recursion)。但无论是分解为两个还是更大常数个子问题,对算法总体的渐进复杂度并无实质影响。

  3. 主定理求时间复杂度:设a1a\geq 1b>1b > 1为常数,f(n)f(n)为一函数,T(n)=aT(n/b)+f(n)T(n) = aT(n/b) + f(n),则T(n)T(n)可能有如下的渐进界:
    ①若f(n)<nlogbaf(n)<n^{log_b^a},且是多项式的小于,即 ϵ>0\exists \epsilon>0,有f(n)=O(nlogbaϵ)f(n) = O(n^{log_b^a - \epsilon}),则T(n)=Θ(nlogba)T(n) = \Theta(n^{log_b^a})
    ②若f(n)=nlogbaf(n)=n^{log_b^a},,则T(n)=Θ(nlogbalogn)T(n) = \Theta(n^{log_b^a}log n)
    ③若f(n)>nlogbaf(n)>n^{log_b^a},且是多项式的大于,即 ϵ>0\exists \epsilon>0,有f(n)=O(nlogba+ϵ)f(n) = O(n^{log_b^a + \epsilon}),且对c<1\forall c<1与所有足够大的n,有af(n/b)cf(n)af(n/b) \leq cf(n),则T(n)=Θ(f(n))T(n) = \Theta (f(n))

相关文章: