时间复杂度和空间复杂度的分析
2017-12-26 22:25
246 查看
时间复杂度
本质就是在计算基本操作重复执行的次数 ,并且大多数情况下分析的是最坏情况的,通常用O()来表示
计算的时候两个准则:
1.忽略掉那些常数
2.关注函数式中增长最快的表达式
常用的时间复杂度有以下几种,算法时间复杂度依次增加:O(1)常数型、O(log2 n)对数型、O(n)线性、O(nlog2 n)二维型、O(n^2)平方型、O(n^3)立方型、O(2^n)指数型、通过下图我们感受下这几种时间复杂度的差异
在这里我们为了更加直观感受高效程序和低效程序的差别再来分享一张表
由上图我们可以看出时间复杂度越大,程序的效率越低,并且在二维型以下时间复杂度差距不是很大,可见程序的时间复杂度
在二维型以下都是比较高效的
空间复杂度
计算整个算法的辅助空间单元的个数,并不是计算实际占用的空间,辅助空间指的是为局部变量和形参所开辟的空间
示例
斐波那契数列递归算法时间复杂度
递归算法的时间复杂度是:递归次数*每次递归中执行基本操作的次数
递归算法的空间复杂度是:递归的深度*每次压栈所需的空间个数
递归有运行时堆栈,求的是递归最深的那一次压栈所耗费的空间的个数
时间复杂度:O(2^N) 【深度是n,节点个数就是2^n】
空间复杂度:O(N)
斐波那契数列非递归算法时间复杂度
空间复杂度:O(N)
本质就是在计算基本操作重复执行的次数 ,并且大多数情况下分析的是最坏情况的,通常用O()来表示
计算的时候两个准则:
1.忽略掉那些常数
2.关注函数式中增长最快的表达式
常用的时间复杂度有以下几种,算法时间复杂度依次增加:O(1)常数型、O(log2 n)对数型、O(n)线性、O(nlog2 n)二维型、O(n^2)平方型、O(n^3)立方型、O(2^n)指数型、通过下图我们感受下这几种时间复杂度的差异
在这里我们为了更加直观感受高效程序和低效程序的差别再来分享一张表
由上图我们可以看出时间复杂度越大,程序的效率越低,并且在二维型以下时间复杂度差距不是很大,可见程序的时间复杂度
在二维型以下都是比较高效的
空间复杂度
计算整个算法的辅助空间单元的个数,并不是计算实际占用的空间,辅助空间指的是为局部变量和形参所开辟的空间
示例
斐波那契数列递归算法时间复杂度
long long Fib(int n) { assert(n >= 0); return n<2 ? n : Fib(n - 1) + Fib(n-2); }
递归算法的时间复杂度是:递归次数*每次递归中执行基本操作的次数
递归算法的空间复杂度是:递归的深度*每次压栈所需的空间个数
递归有运行时堆栈,求的是递归最深的那一次压栈所耗费的空间的个数
时间复杂度:O(2^N) 【深度是n,节点个数就是2^n】
空间复杂度:O(N)
斐波那契数列非递归算法时间复杂度
long long *Fib(int n) { assert(n>=0); long long *array = new long long[n + 1]; array[0] = 0; if (n > 0) { array[1] = 1; } for (int i = 2; i <n+1; i++) { array[i] = array[i - 1] + array[i - 2]; } return array; }时间复杂度:O(N)
空间复杂度:O(N)
相关文章推荐
- 七种排序方法(稳定性、空间复杂度、时间复杂度)分析总结
- 时间复杂度和空间复杂度分析
- 排序算法的C语言实现以及各个算法的时间复杂度和空间复杂度分析(冒泡排序)
- 对于一颗完全二叉树,要求给所有节点加上一个pNext指针,指向同一层的相邻节点;如果当前节点已经是该层的最后一个节点,则将pNext指针指向NULL;给出程序实现,并分析时间复杂度和空间复杂度。
- 算法时间复杂度与空间复杂度分析
- 时间复杂度和空间复杂度的分析
- 对于一颗完全二叉树,要求给所有节点加上一个pNext指针,指向同一层的相邻节点;如果当前节点已经是该层的最后一个节点,则将pNext指针指向NULL;给出程序实现,并分析时间复杂度和空间复杂度。
- 对于一颗完全二叉树,要求给所有节点加上一个pNext指针,指向同一层的相邻节点;如果当前节点已经是该层的最后一个节点,则将pNext指针指向NULL;给出程序实现,并分析时间复杂度和空间复杂度。
- 以斐波那契数列为例分析递归算法的时间复杂度和空间复杂度
- 二分查找算法,斐波那契数列的递归及非递归。(分析时间复杂度及空间复杂度)
- 数据挖掘算法的空间复杂度与时间复杂度分析
- 分析时间复杂度及空间复杂度
- 时间复杂度和空间复杂度详解
- 时间复杂度和空间复杂度详解 http://blog.csdn.net/booirror/article/details/7707551
- 动态规划求数组中和最大字串的值 以及 字符串的循环移位(要求空间复杂度O(1),时间复杂度O(n))
- 时间复杂度和空间复杂度
- 1.时间复杂度和空间复杂度
- 插入排序和shell排序及其时间复杂度和空间复杂度分析
- 时间复杂度和空间复杂度详解
- 算法第一弹:时间复杂度和空间复杂度