数据结构算法笔记 lesson2 算法 时间复杂度和空间复杂度
2016-10-29 08:43
609 查看
算法
例如 : 1+2+3+4+……+100传统循环加法
int sum = 0 ; for(int i = 1; i < = 100 ; i++ ) { sum+= i ; } printf("%d",sum);
需要运行100次
用高斯算法:
int i ,sum = 0 , n = 100; sum =(1+n) * n / 2 ; printf("%d",sum);
只需要运行一次
度量算法效率
不计循环索引的递增,循环终止条件、变量声明、打印结果等操作。判断一个算法的效率是,函数中的常数和其他次要项可以忽略,只需要关注最高项的阶数。
时间复杂度
在进行算法分析时,语句总的执行次数T(n)是关于问题规模n的函数,进而分析T(n)随n的变化情况并确定T(n)的数量级。T(n)=O(f(n))表示问题规模n的增大,算法执行时间的增长率和f(n)的增长率相同。
一般情况下,随着输入规模n的增大 ,T(n)增长最慢的算法为最优算法
分析一个算法的时间复杂度
用常数1取代运行时间中的所有加法常数只保留最高阶像
将常数项置1
常数阶 O(1)
printf("Hello world!\n"); printf("Hello world!\n"); printf("Hello world!\n");
线性阶 O(n)
int sum =0 ,n = 100; for (int i=0;i<n;i++) sum+=i;
平方阶 O(n^2)
int n = 100; for(int i=0;i<n;i++) for(int j = 0; j<100;j++) printf("Hello world!\n");
对数阶 O(log n)
int i =1 ,n=100; while (i<n) i*=2;
函数调用的时间复杂度分析
for(int = i;i<n;i++) { function(i); } void function(i) { printf("i"); }
时间复杂度: O(n)
常用的时间复杂度所耗费的时间
O(1)<O(log n)<O(n)<O(nlog n) <O(n^2)<O(n^3)<O(2^n)<O(n!)<O(n^n)空间复杂度
算法的空间复杂度通过计算算法所需的存储空间实现算法的空间复杂度的计算公式 S(n)=O(f(n))
相关文章推荐
- 试设计一个算法,将数组A(0..n-1)中的元素循环右移k位,并要求空间复杂度为O(1),时间复杂度为O(n)。
- 掌握算法的渐近时间复杂度和空间复杂度的意义与作用
- 算法——时间复杂度和空间复杂度
- 算法-时间复杂度和空间复杂度
- 《编程之美》中买书问题算法。空间复杂度O(n),时间复杂度O(n),求挑战
- 常用算法时间复杂度和空间复杂度表
- 常用的算法时间复杂度和空间复杂度
- (学习笔记 2)时间复杂度和空间复杂度
- 常见算法时间复杂度和空间复杂度
- 算法-时间复杂度和空间复杂度
- 数据结构-算法效率的度量-时间复杂度和空间复杂度
- 数据结构与算法学习笔记——算法的时间和空间复杂度
- 算法的复杂度包括时间复杂度和空间复杂度分别如何计算?
- 数据结构与算法笔记之--时间复杂度和空间复杂度
- 算法复杂度——时间复杂度和空间复杂度
- 算法复杂度——时间复杂度和空间复杂度
- 算法基础-时间复杂度和空间复杂度(转载)
- 算法时间复杂度与空间复杂度分析
- 算法的时间复杂度和空间复杂度笔记
- 数据挖掘算法的空间复杂度与时间复杂度分析