算法基础(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),大概是因为渐近确界对某一种输入时有效的,而渐近上界对所有输入都有效,即使最坏情况下的运行时间上界。
参考文献:《算法导论》第三章
- 算法基础(1)关于时间复杂度计算之函数增长
- 算法时间复杂度计算
- 算法时间复杂度计算
- 算法时间复杂度计算
- 算法时间复杂度计算
- 算法时间复杂度计算
- 算法时间复杂度计算
- 算法时间复杂度计算
- 算法-计算时间复杂度
- 算法时间复杂度基础
- 关于使用二分思想算法的时间复杂度的计算
- 关于计算时间复杂度和空间复杂度
- 关于计算时间复杂度和空间复杂度
- 算法时间复杂度的计算
- 算法时间复杂度的计算
- 算法时间复杂度的计算
- 算法时间复杂度的计算
- 算法时间复杂度的计算
- 启动一个线程是用run()还是start()?
- CSS3 圆角(border-radius)
- 构造器Constructor是否可被重写?
- 雅安加油,中国加油!
- 当一个线程进入一个对象的一个synchronized方法后,其它线程是否可进入此对象的其它方法?
- 算法基础(1)关于时间复杂度计算之函数增长
- helper_seo::base64_transform【'decode小黑中国Q1440580】
- 浅析Android线程模型
- 从phpMyAdmin批量导入Excel内容到MySQL
- hashcode()与equals()详解(例子)
- android中finish()与system.exit(0)的区别
- 装饰模式
- java接口
- Android 只开启一个Activity实例