温故知新之数据结构算法复杂度
2014-06-08 17:06
316 查看
1、影响算法效率的主要因素
算法采用的策略和方法
问题的输入规模
编译器所产生的代码
计算机执行速度
2、时间复杂度
随着问题规模n的增大,它们操作数量的差异会越来越大,因此实际算法在时间效率上的差异也会变得非常明显!
判断一个算法的效率时,往往只需要关注操作数量的最高次项,其它次要项和常数项可以忽略。
在没有特殊说明时,我们所分析的算法的时间复杂度都是指最坏时间复杂度。
3、空间复杂度
算法采用的策略和方法
问题的输入规模
编译器所产生的代码
计算机执行速度
2、时间复杂度
// 时间复杂度:2n + 5 long sum1(int n) { long ret = 0; \\1 int* array = (int*)malloc(n * sizeof(int)); \\1 int i = 0; \\1 for(i=0; i<n; i++) \\n { array[i] = i + 1; } for(i=0; i<n; i++) \\n { ret += array[i]; } free(array); \\1 return ret; \\1 } \\时间复杂度: n + 3 long sum2(int n) { long ret = 0; \\1 int i = 0; \\1 for(i=1; i<=n; i++) \\n { ret += i; } return ret; \\1 } \\时间复杂度: 3 long sum3(int n) { long ret = 0; \\1 if( n > 0 ) { ret = (1 + n) * n / 2; \\1 } return ret; \\1 }
随着问题规模n的增大,它们操作数量的差异会越来越大,因此实际算法在时间效率上的差异也会变得非常明显!
判断一个算法的效率时,往往只需要关注操作数量的最高次项,其它次要项和常数项可以忽略。
在没有特殊说明时,我们所分析的算法的时间复杂度都是指最坏时间复杂度。
3、空间复杂度
//空间复杂度:12 + n long sum1(int n) { long ret = 0; \\4 int* array = (int*)malloc(n * sizeof(int)); \\4 + 4 * n int i = 0; \\4 for(i=0; i<n; i++) { array[i] = i + 1; } for(i=0; i<n; i++) { ret += array[i]; } free(array); return ret; } \\空间复杂度: 8 long sum2(int n) { long ret = 0; \\4 int i = 0; \\4 for(i=1; i<=n; i++) { ret += i; } return ret; } \\空间复杂度: 4 long sum3(int n) { long ret = 0; \\4 if( n > 0 ) { ret = (1 + n) * n / 2; } return ret; }多数情况下,算法执行时所用的时间更令人关注,如果有必要,可以通过增加空间复杂度来降低时间复杂度,同理,也可以通过增加时间复杂度来降低空间复杂度,具体问题,具体分析。
相关文章推荐
- 数据结构(四)算法的时间复杂度
- 数据结构(算法的时间复杂度和空间复杂度)
- 【数据结构与算法】复杂度度量与分析
- 【数据结构与算法】时间复杂度的计算
- 数据结构之算法时间复杂度
- 数据结构——算法、算法的时间复杂度和空间复杂度
- 算法备忘录——基础数据结构与复杂度
- 数据结构基础篇(3)--算法时间复杂度的常用算法
- 数据结构与算法之各种排序算法的复杂度
- 程序猿必修课之数据结构(二)算法和算法的复杂度
- 数据结构与算法学习笔记——算法的时间和空间复杂度
- 数据结构(一):数据结构的基本概念和算法的时间和空间复杂度
- 数据结构:算法的复杂度
- 【数据结构与算法】【时间复杂度】如何计算时间复杂度
- 考试笔记03_数据结构_基本算法复杂度
- s数据结构,算法,算法时间复杂度
- Pku acm 1125 Stockbroker Grapevine 数据结构题目解题报告(八)---- 弗洛伊德(floyd)算法
- 数据结构及算法-何谓数据结构
- 数据结构知识——树的三种不同遍历算法解析
- Pku acm 1469 COURSES 数据结构题目解题报告(十一)---- 匈牙利算法求二分图的最大匹配