大O表示法_时间复杂度
2017-07-18 19:03
393 查看
引入原因:用另一个(通常更简单的)函数来描述一个函数数量级的渐近上界。
定义:如果一个问题的规模是n,解这一问题的某一算法所需要的时间为T(n),它是n的某一函数。T(n)称为这一算法的“时间复杂度”。
某个算法的复杂度到达了这个问题复杂度的下界,那就称这样的算法是最佳算法
决定算法复杂度的是执行次数最多的语句
复杂度与时间效率的关系:
c < log2n < n < n*log2n < n2 < n3 < 2n < 3n < n! (c是一个常量)
|————————–|————————–|————-|
较好 一般 较差
几个特殊情况的复杂度
1.并列循环的复杂度分析
将各个嵌套循环的时间复杂度相加
例如:
for (i=1; i<=n; i++)
x++;
for (i=1; i<=n; i++)
for (j=1; j<=n; j++)
x++;
解:
第一个for循环
T(n) = n
f(n) = n
时间复杂度为Ο(n)
第二个for循环
T(n) = n2
f(n) = n2
时间复杂度为Ο(n2)
整个算法的时间复杂度为Ο(n+n2) = Ο(n2)。
⒉函数调用的复杂度分析
例如:
public void printsum(int count){
int sum = 1;
for(int i= 0; i
定义:如果一个问题的规模是n,解这一问题的某一算法所需要的时间为T(n),它是n的某一函数。T(n)称为这一算法的“时间复杂度”。
某个算法的复杂度到达了这个问题复杂度的下界,那就称这样的算法是最佳算法
决定算法复杂度的是执行次数最多的语句
复杂度与时间效率的关系:
c < log2n < n < n*log2n < n2 < n3 < 2n < 3n < n! (c是一个常量)
|————————–|————————–|————-|
较好 一般 较差
几个特殊情况的复杂度
1.并列循环的复杂度分析
将各个嵌套循环的时间复杂度相加
例如:
for (i=1; i<=n; i++)
x++;
for (i=1; i<=n; i++)
for (j=1; j<=n; j++)
x++;
解:
第一个for循环
T(n) = n
f(n) = n
时间复杂度为Ο(n)
第二个for循环
T(n) = n2
f(n) = n2
时间复杂度为Ο(n2)
整个算法的时间复杂度为Ο(n+n2) = Ο(n2)。
⒉函数调用的复杂度分析
例如:
public void printsum(int count){
int sum = 1;
for(int i= 0; i
相关文章推荐
- 单链表的删除算法时间复杂度O(1)和O(n)
- 题目:输入一个整形数组,数组里有正数也有负数。数组中连续的一个或多个整数组成一个子数组,每个 子数组都有一个和。求所有子数组的和的最大值。要求时间复杂度为 O(n)。
- 大Ο表示算法的时间复杂度
- 时间复杂度最小的最短路径算法?由这个想到的
- 各种排序算法的稳定性和时间复杂度小结
- 各种排序算法的稳定性和时间复杂度小结
- 各种排序算法的稳定性和时间复杂度小结
- 满足min.push.pop操作时间复杂度为o(1)的栈
- 时间复杂度和空间复杂度
- 递归算法的时间复杂度分析
- 自定义栈-pop-push-min-时间复杂度都为O(1)
- 递归算法的时间复杂度分析
- 冒泡法最好情况下实现时间复杂度O(n)代码
- 递归算法的时间复杂度分析 转载
- 逆序数 时间复杂度O(nlgn)
- 排序算法的时间复杂度
- 数据结构与算法笔记之--时间复杂度和空间复杂度
- 时间复杂度
- 算法的时间复杂度分析
- 时间复杂度和空间复杂度