算法导论 - 基础知识 - 函数的增长

各种语句和模块分析应遵循的规则:

(1)赋值语句和读写语句:运行时间取 O(1)。有函数调用的除外,此时要考虑函数的执行时间。

(2)顺序执行语句:运行时间有加法规则确定,即该序列中耗时最多的语句的执行时间。

(3)条件分支语句:运行时间有条件测试(通常为 O(1))加上分支中运行时间最长的语句的运行时间。

(4)循环语句:

运行时间是对输入数据重复执行n次循环体所耗时间的总和。

 

时间复杂度的运算法则:

设T1(n) = O(ƒ(n)),T2() = O(g(n)),则

①加法规则:T1(n) + T2(n) = O( max{ƒ(n),  g(n)} );

②乘法规则:T1(n) + T2(n) = O( ƒ(n) g(n) );

 

 接下来是对《算法导论》这一章的归纳:

首先是关于渐近记号

三种渐近记号:Θ记号、O记号、Ω记号。(这些描述记号都确定一类函数的集合,是集合!!!!

(1)Θ记号:(算法在某种情况下的运行时间)

Θ记号的定义:Θ(g(n))表示下类所描述函数的集合。

Θ(g(n)) = { f(n):存在正常量c1、c2、n0,使得对所有 n ≥ n0,有 0 ≤ c1g(n) ≤ f(n) ≤ c2g(n) }

理解:若存在正常量c1和c2,使得对于足够大的n,函数 f(n) 能“夹入”c1g(n)与c2g(n)之间,则 f(n)属于集合Θ(g(n))。(非常类似数学中的极限的定义)

换句话说,对所有 n≥n0,函数 f(n)在一个常量因子内等于 g(n)。我们称 g(n) 是 f(n) 的一个渐近紧确界

(2)O记号:(限制算法的最坏情况运行时间)

O记号的定义:O(g(n))表示下类所描述函数的集合。

O(g(n)) = { f(n):存在正常量c和n0,使得对于所有 n ≥ n0,有0 ≤ f(n) ≤ cg(n) }

我们使用O记号来给出函数的一个在常量因子内的上界,并称g(n)是f(n)的一个渐近上界

此处请注意,O记号描述算法的渐近上界,但不要求是渐近紧上界。(要注意区分渐近上界和渐近确界

(3)Ω记号:(限制算法的最佳情况运行时间)

Ω记号的定义:Ω(g(n))表示下类所描述函数的集合。

Ω(g(n)) = { f(n):存在正常量c和n0,使得对所有 n ≥ n0,有 0 ≤ cg(n) ≤ f(n) }

我们用Ω记号提供一个算法的渐近下界,称g(n)是f(n)的一个渐近下界。(此处同样不要求是渐近紧下界)

 

定理:对任意两个函数 f(n) 和 g(n),我们有 f(n) = Θ(g(n)),当且仅当 f(n) = O(g(n)) 且 f(n) = Ω(g(n))。

注:通常情况下使用该定理,我们可以通过算法的渐近上界渐近下界相等来证明算法的渐近确界存在并给出该确界。

但多数情况下,算法的最坏情况运行时间和最佳情况运行时间的确界不相等。例如插入排序,插入排序的最坏运行情况时间为 O(n^2),最佳情况运行时间为 Ω(n),此时无法用 Θ 记号描述该算法,但我们可以说在最坏运行情况下算法时间为Θ(n^2)(即补加一个算法条件来说明)。

 

还有两种描述算法不常用的记号:o记号、ω记号

o记号:

O记号描述的渐近上界可能是也可能不是渐近紧确的。我们使用 o 记号来表示一个非渐近紧确的上界,数学上常用该记号表示更高阶的无穷小量

ω记号:

我们使用 ω 记号来表示一个非渐近紧确的上界,数学上使用该记号表示更低价的无穷小量。

posted on 2020-02-29 01:02  Black_x  阅读(237)  评论(0编辑  收藏  举报