基础知识- 算法复杂度
2017-11-15 10:56
225 查看
转自:http://www.cnblogs.com/mengdd/archive/2012/10/27/2742465.html
时间复杂度是一个算法运行时间的相对量度,因为执行简单操作所需要的时间因机器的软硬件环境不同而不一样,所以只讨论影响运行时间的另一个因素——算法中进行简单操作次数的多少,所以通常把算法中包含简单操作次数的多少叫做该算法的时间复杂度。
若解决一个问题的规模为n,即所处理的数据中包含n个元素,则算法的时间复杂度通常是n的一个函数f(n)。
一般只要大致计算出相应的数量级(Order)即可,所以采用大O表示,比如当f(n)为n的多项式时,取最高次幂即可。
比如内层循环的执行次数为 f(n)=2n2+3n,则时间复杂度为O(n2).
算法的时间复杂度通常有 O(1)(常量阶)、O(n½) 、 O(n)(线性阶)、 O(logn)(对数阶)、 O(nlogn)、 O(n2)(平方阶)、 O(n3)、 O(2n)(指数阶)、O(n!)等形式。
当n大于一定的值后,各种不同的数量级对应的值存在着如下关系:
O(logn)<O(n½)<O(n)< O(nlogn)< O(n2)<O(n3) <O(2n)<O(n!)
一个算法的时间复杂度还可以具体分为最好、最坏和平均三种情况,对于多数算法,平均和最差两种情况下的时间复杂度相应的数量级往往相同,也有一些算法,其最好、最坏、平均三种情况下的时间复杂度或相应数量级都相同。
一个算法的空间复杂度通常只考虑在运行过程中为局部变量分配的存储空间大小,它包括为参数表中值参变量分配的存储空间和为在函数体中定义的局部变量分配的存储空间两个部分。
若一个算法为递归算法,其空间复杂度为递归所使用的工作栈空间的大小,它等于一次调用所分配的临时存储空间的大小乘以被调用的次数(即为递归调用的次数加1,这个1表示开始进行的一次非递归调用)。
时间复杂度
时间复杂度(time complexity)又称时间复杂性或计算复杂度,它是算法有效性的度量之一。时间复杂度是一个算法运行时间的相对量度,因为执行简单操作所需要的时间因机器的软硬件环境不同而不一样,所以只讨论影响运行时间的另一个因素——算法中进行简单操作次数的多少,所以通常把算法中包含简单操作次数的多少叫做该算法的时间复杂度。
若解决一个问题的规模为n,即所处理的数据中包含n个元素,则算法的时间复杂度通常是n的一个函数f(n)。
一般只要大致计算出相应的数量级(Order)即可,所以采用大O表示,比如当f(n)为n的多项式时,取最高次幂即可。
比如内层循环的执行次数为 f(n)=2n2+3n,则时间复杂度为O(n2).
算法的时间复杂度通常有 O(1)(常量阶)、O(n½) 、 O(n)(线性阶)、 O(logn)(对数阶)、 O(nlogn)、 O(n2)(平方阶)、 O(n3)、 O(2n)(指数阶)、O(n!)等形式。
当n大于一定的值后,各种不同的数量级对应的值存在着如下关系:
O(logn)<O(n½)<O(n)< O(nlogn)< O(n2)<O(n3) <O(2n)<O(n!)
一个算法的时间复杂度还可以具体分为最好、最坏和平均三种情况,对于多数算法,平均和最差两种情况下的时间复杂度相应的数量级往往相同,也有一些算法,其最好、最坏、平均三种情况下的时间复杂度或相应数量级都相同。
空间复杂度
空间复杂度(space complexity)或称空间复杂性是对一个算法在运行过程中临时占用存储空间大小的量度,包括存储算法本身所占用的存储空间、算法的输入/输出数据所占用的存储空间和算法在运行过程中临时占用的存储空间等方面。一个算法的空间复杂度通常只考虑在运行过程中为局部变量分配的存储空间大小,它包括为参数表中值参变量分配的存储空间和为在函数体中定义的局部变量分配的存储空间两个部分。
若一个算法为递归算法,其空间复杂度为递归所使用的工作栈空间的大小,它等于一次调用所分配的临时存储空间的大小乘以被调用的次数(即为递归调用的次数加1,这个1表示开始进行的一次非递归调用)。
相关文章推荐
- 基础知识——算法复杂度 时间复杂度,空间复杂度简介
- 图像处理基础知识系列之一:边界跟踪之内边界跟踪算法解释
- 模板基础知识2——《C++程序设计语言(第四版)》第24章 泛型算法 笔记
- 从头开始学算法:考研机试题练习(C/C++)--基础知识
- 追踪算法理论知识基础
- Java核心技术卷I:基础知识(原书第8版):13.4 算法
- 算法心得 第二章 基础知识
- 基础知识 第一部分 算法导论 学习笔记
- java 基础知识-数组的7种算法(排序、求和、最值、遍历...)
- 学习算法你必须知道的一些基础知识(文末福利)
- 算法基础:分治模式,归并排序ΘΘΘΘΘΘ知识小结
- java基础知识之 算法 【冒泡排序】【快速排序】
- 算法分析基础---渐进复杂度
- 机器学习基础知识(一)机器学习常见算法分类汇总
- 七月算法课程《python爬虫》第三课: 爬虫基础知识与简易爬虫实现
- 【学习笔记】<算法导论>基础知识1.1
- 【说说网络流的那些事】网络流基础知识Ver0.1(算法篇)
- 算法基础知识科普:8大搜索算法之二叉搜索树(上)
- 数据结构&&算法基础知识
- 《大话数据结构》第2章 算法基础 2.9 算法的时间复杂度