03_时间复杂度和空间复杂度
2016-09-21 11:02
183 查看
程序在计算机上的运行时间取决于下列因素:
1.算法采用的策略、方案
2.代码质量
3.输入规模
4.机器执行指令的速度
我们看下等差数列求和的两种算法的执行情况
第一种算法:
int sum = 0; //执行1次 int n = 100; //执行1次
for (int i = 1; i <= n; i++) { //执行n+1次
sum = sum + i; //执行n次
}
System.out.println(sum); //执行1次
第二种算法:
第一种算法执行了2n+4次,第二种算法执行了3次
当输入规模很大的时候,也就是n值很大的时候,两种算法的执行效率就可以看成n:1
int x = 0; int sum = 0;
int n = 100;
for (int i = 0; i < n; i++) {
for (int j = 0; j < n; j++) {
x++;
sum = sum + x;
}
}
这个算法的执行次数呢?有一个嵌套的for循环,输入规模很大的时候可以抽象为n²
算法效率的度量方法
算法的时间复杂度
在进行算法分析时,语句总的执行次数T(n)是关于问题规模n的函数,进而分析T(n)随n的变化情况并确定T(n)的数量级。
算法的时间复杂度,也就是算法的时间量度,记作:T(n)=O(F(n))。它表示随问题规模n的增大,算法执行时间的增长率和f(n)的增长率相同,称作算法的渐近时间复杂度,简称为时间复杂度。其中f(n)是问题规模n的某个函数。这种记法称作大O标记法
一般情况下,随着输入规模n的增大,T(n)增长最慢的算法为最优算法。
以上三个算法的时间复杂度分别是O(1),O(n),O(n²)
时间复杂度(大O记法)的推导原则:
用常数1取代运行时间中的所有加法常数。
在修改后的函数中,只保留最高项。
如果最高阶项存在且不是1,则去除与这个项相乘的常数。
算法的空间复杂度
也就是算法所需的内存空间,记作:S(n)=O(F(n))。其中,n为问题规模,f(n)为关于n所占存储空间的函数。
1.算法采用的策略、方案
2.代码质量
3.输入规模
4.机器执行指令的速度
我们看下等差数列求和的两种算法的执行情况
第一种算法:
int sum = 0; //执行1次 int n = 100; //执行1次
for (int i = 1; i <= n; i++) { //执行n+1次
sum = sum + i; //执行n次
}
System.out.println(sum); //执行1次
第二种算法:
int n = 100; //执行1次 sum = (1 + n) * n / 2; //执行1次 System.out.println(sum); //执行1次
第一种算法执行了2n+4次,第二种算法执行了3次
当输入规模很大的时候,也就是n值很大的时候,两种算法的执行效率就可以看成n:1
int x = 0; int sum = 0;
int n = 100;
for (int i = 0; i < n; i++) {
for (int j = 0; j < n; j++) {
x++;
sum = sum + x;
}
}
这个算法的执行次数呢?有一个嵌套的for循环,输入规模很大的时候可以抽象为n²
算法效率的度量方法
算法的时间复杂度
在进行算法分析时,语句总的执行次数T(n)是关于问题规模n的函数,进而分析T(n)随n的变化情况并确定T(n)的数量级。
算法的时间复杂度,也就是算法的时间量度,记作:T(n)=O(F(n))。它表示随问题规模n的增大,算法执行时间的增长率和f(n)的增长率相同,称作算法的渐近时间复杂度,简称为时间复杂度。其中f(n)是问题规模n的某个函数。这种记法称作大O标记法
一般情况下,随着输入规模n的增大,T(n)增长最慢的算法为最优算法。
以上三个算法的时间复杂度分别是O(1),O(n),O(n²)
时间复杂度(大O记法)的推导原则:
用常数1取代运行时间中的所有加法常数。
在修改后的函数中,只保留最高项。
如果最高阶项存在且不是1,则去除与这个项相乘的常数。
算法的空间复杂度
也就是算法所需的内存空间,记作:S(n)=O(F(n))。其中,n为问题规模,f(n)为关于n所占存储空间的函数。
相关文章推荐
- 时间复杂度和空间复杂度(1)
- 《编程之美》中买书问题算法。空间复杂度O(n),时间复杂度O(n),求挑战
- 时间复杂度和空间复杂度
- 时间复杂度和空间复杂度详解
- 排序总结-时间复杂度和空间复杂度
- 现有1,2……一直到n的无序数组,求排序算法,并且要求时间复杂度为O(n),空间复杂度为O(1),使用交换,而且只能交换两个数
- 时间复杂度和空间复杂度详解
- 现有1,2……一直到n的无序数组,求排序算法,并且要求时间复杂度为O(n),空间复杂度为O(1),使用交换,而且只能交换两个数
- 时间复杂度和空间复杂度[数据结构]
- 时间复杂度和空间复杂度详解
- 一个整型数组里除了一个数字之外,其他的数字都出现了两次。要求时间复杂度是O(n),空间复杂度是O(1),如何找出数组中只出现一次的数字
- ver[SIZE]保存的是[iBegin,iBegin+SIZE-1]区间的值,且无重复,请以O(N)时间复杂度和O(1)空间复杂度进行排序
- 时间复杂度和空间复杂度
- 数据结构2:算法时间复杂度和空间复杂度的计算
- 时间复杂度和空间复杂度
- 时间复杂度和空间复杂度
- 在O(n)时间复杂度O(1)空间复杂度求一个数组中出现多次和未出现的数字
- 数据结构算法笔记 lesson2 算法 时间复杂度和空间复杂度
- 时间复杂度和空间复杂度
- 每天一道LeetCode-----找到序列中第一个没有出现的正整数,要求时间复杂度是O(n),空间复杂度是O(1)