算法基础(1)关于时间复杂度计算之函数增长

来源:互联网 发布:青铜器铭文翻译软件 编辑:程序博客网 时间:2024/04/29 18:10

算法是什么?简单的说就是一系列计算步骤,用来将输入的数据转换成输出的结果。

这是个概念而已,具体的对算法的理解在以后的具体算法中领悟吧(啊。。。多么痛的领悟哭)

首先,我觉得对于算法最先考虑的是时间复杂度,所以我们先从这方面开始吧。这篇算是数学基础吧,以后看解释算法的时间复杂度时更容易些。甚至自己分析是有个基本的概念和方法。

好了闲话少说,言归正传(亲们时间紧张的话,这句前面的都可以不看哦)

1.渐近记号

对于算法的效率,通常是考虑算法的运行时间如何随着输入规模无限增大而增加。T(n)为定义在整数域上的,算法最坏情况下的运行时间。即输入为整数规模。


其中f(n)应为集合中的一元,但通常用等号表示如f(n) =O(n);

以上是正式的定义,下面给出直观的图例


2.一些性质(待补充)

(1) 一般来说,对于多项式,ad>0,p(n) = O(nd);

(2) O(1)表示常量或变量的常值;

(3) 任何底大于1的指数函数比任意多项式函数增长的快;

(4) 任何正的多项式函数都比多项对数函数增长的快;

(5) 按数量级递增排列,常见的时间复杂度有:常数阶O(1),对数阶O(logn),线性阶O(n),线性对数阶O(nlogn),平方阶O(n^2),立方阶O(n^3),指数阶O(2^n)<O(n!)<O(n^n)

(6)  记号O的运算性质:1. O(f)+O(g) = O(f+g)

                                          2. O(f)+O(g) = O(max(f,g))

                                          3. O(cf(n)) = O(f(n)),其中C为常数、

                                          4. O(f)O(g) = O(fg)

                                         

为了方便比较,通常的做法从算法中选取一个基本的运算操作,计算其重复执行的次数,以此作为评价算法时间复杂度的标准。

重点在于找到关键操作。

PS:在我看见的大多数题里,都写的是O(n),大概是因为渐近确界对某一种输入时有效的,而渐近上界对所有输入都有效,即使最坏情况下的运行时间上界。


参考文献:《算法导论》第三章


原创粉丝点击