算法的两大性能指标:时间复杂度和空间复杂度
算法是对特点问题求解步骤的一种描述。同时具备有5个重要特性:
① 有穷性:一个算法必须重视在执行有穷步之后结束,且每一步都可在有穷时间内完成。
② 确定性:算法中每一条指令必须有确切的含义,读者理解时不会产生二义性。并且,在任何条件下,算法只要唯一的一条执行路径,即对于相同的输入只能得出相同的输出。
③ 可行性:一个算法是能行的,即算法中描述的操作都是可以通过已经实现的基本运算执行有限次来实现的。
④ 输入:一个算法有零个或多个输入,只写输入取之于某个特定的对象的集合。
⑤ 输出:一个算法有一个或多个输出,这些输出视同输入有着某些特定关系的量。
评价算法的两大性能指标:时间复杂度和空间复杂度。
时间复杂度
时间频度
一个算法中的语句执行次数。记为T(n);
时间复杂度
时间频度中,n称为问题的规模,当n不断变化时,时间频度T(n)也会不断变化。为了知道变化时呈现什么规律,引入时间复杂度。
若存在某个函数f(n),当 n –> ∞时,T(n) / f(n) 为不等于0的常数,则称f(n)是T(n)的同数量级函数。记为T(n) = O(f(n));称O(f(n))为算法的渐进时间复杂度,简称时间复杂度。
随之n的增大,时间的增长率和f(n)的增长率成正比。f(n)越小,算法的时间复杂度越低,算法的效率越高。
最坏时间复杂度
最坏情况下的时间复杂度称为最坏时间复杂度。最坏情况下的时间复杂度是算法在任何输入实例上运行时间的上界。
不特别说明的情况下,讨论的时间复杂度即为最坏时间复杂度。
平均时间复杂度
所有可能的输入实例均以等概率出现的情况下,算法的期望运行时间。
常见的时间复杂度
常用的时间复杂度所耗费的时间从小到大依次是:
O(1) < O(logn) < (n) < O(nlogn) < O(n^2) < O(n^3) < O(2^n) < O(n!) < O(n^n)
常数阶复杂度
int i;
i=n;
运行时间与n无关,是一个常数,所以复杂度是一个常数阶复杂度
线性阶复杂度
int i, j;
for(i=0; i < n; i++) {
function(i);
}
void function(int count) {printf(“%d”, count);
}
其t(n) = n ,所以时间复杂度为o(n)线性阶数
平方阶复杂度
inti, j, n = 100;
for( i=0; i < n; i++ )
{for( j=0; j < n; j++ ){printf(“I love FishC.com\n”);}
}
其t(n) = n^2 ,所以时间复杂度为o(n^2)平方阶复杂度
对数阶复杂度
int i = 1, n = 100;
while( i < n )
{i = i * 2;
}
由于每次i*2之后,就举例n更近一步,假设有x个2相乘后大于或等于n,则会退出循环。
于是由2^x = n得到x = log(2)n,所以这个循环的时间复杂度为O(logn)。
nlogn阶复杂度
for(m=1; m<n; m++)
{i = 1;while(i<n){i = i * 2;}
}
指数阶复杂度
int i = 1, n = 100,j=0;
while( i <2^n )
{j += i ;
}
所用的时间t(n)=2^n,所以时间复杂度为 指数阶
常用排序算法的复杂度
空间复杂度
定义:算法的空间复杂度通过计算算法所需的存储空间实现,算法的空间复杂度的计算公式记作:S(n)=O(f(n)),其中,n为问题的规模,f(n)为语句关于n所占存储空间的函数。
一个算法在计算机存储器上所占用的存储空间包括三个方面:
1、存储算法本身所占用的存储空间;
与算法书写的长短成正比,要压缩此方面的存储空间,则必须编写出精短的算法。
2、算法的输入输出数据所占用的存储空间;
由解决的问题决定,是通过参数表由调用函数传递而来,不随算法的不同而改变。
3、算法在运行过程中临时占用的存储空间;
随算法的不同而不同。主要包括动态分配的空间、以及递归栈所需的空间等。
一个算法的空间复杂度只考虑在运行过程中为局部变量分配的存储空间的大小,它包括为参数表中形参变量分配的存储空间和为在函数体中定义的局部变量分配的存储空间两个部分。
时间与空间的取舍
在设计算法的时候当然是时间用的越少越好,空间用的越少越好,但是实际中这两个方面都是一个矛盾的存在体。所以设计算法需要针对不同的应用来设计。
当在运行时间要求较高,且空间比较充足的情况下就可以用空间来换取时间,一般高新能的场合。
当在一些运行时间不高的嵌入式场合,而内存特别稀缺的情况下,就可以用时间来换空间。
总之,针对不同的情况,为了解决同一个问题也会有不同的算法,根据实际情况,选择合适的算法
算法的两大性能指标:时间复杂度和空间复杂度相关推荐
- JAVA数据结构和算法:第一章(时间复杂度和空间复杂度)
数据结构 数据结构基础概念 不论是哪所大学,数据结构和算法这门课都被贯上无趣.犯困.困难的标签,我们从最基础最通俗的语言去说起,保证通俗易懂. 数据结构到底是什么呢?我们先来谈谈什么叫数据. 数据:数 ...
- 算法简介——二分查找,时间复杂度,空间复杂度
文章目录 前言 二分查找 时间复杂度 大O表示法 空间复杂度 小结 前言 算法(Algorithm)是指解题方案的准确而完整的描述,是一系列解决问题的清晰指令,算法代表着用系统的方法描述解决问题的策略 ...
- 协同过滤算法_利用数据分析量化协同过滤算法的两大常见难题
点击上方"蓝色字体",选择 "设为星标" 关键讯息,D1时间送达! 推荐系统自从问世以来解决了许多不同的商业产品问题,深受广大互联网从业者的喜爱.传统的互联网电 ...
- 数据结构和算法:(2)时间复杂度和空间复杂度
首先需要明确一个概念,我们研究算法的复杂度,侧重的是研究算法随着输入规模扩大增长量的一个抽象,而不是精确的定位需要执行多少次. 我们在分析一个算法的运行时间时,重要的是把基本操作的数量和输入模式关联起 ...
- 算法的时间复杂度、空间复杂度、稳定性
1.算法的概念: 算法 (Algorithm),是对特定问题求解步骤的一种描述. 解决一个问题往往有不止一种方法,算法也是如此.那么解决特定问题的多个算法之间如何衡量它们的优劣呢?有如下的指标: 2. ...
- 数据结构: 算法的时间复杂度和空间复杂度
1.算法的概念: 算法 (Algorithm),是对特定问题求解步骤的一种描述. 解决一个问题往往有不止一种方法,算法也是如此.那么解决特定问题的多个算法之间如何衡量它们的优劣呢?有如下的指标: 2. ...
- LeetCode0:学习算法必备知识:时间复杂度与空间复杂度的计算
算法(Algorithm)是指用来操作数据.解决程序问题的一组方法.算法是大厂.外企面试的必备项,也是每个高级程序员的必备技能.针对同一问题,可以有很多种算法来解决,但不同的算法在效率和占用存储空间上 ...
- 算法:算法概述【时间复杂度、空间复杂度】
一.算法定义 算法:为了实现业务目的的各种方法和思路就是算法.同样的数据,同样的目的, 不同的算法,不同的方法和思路,效率就会不同 算法是一种独立的存在 , 它并不依附于代码 , 代码只是实现算法思想 ...
- 算法时间复杂度和空间复杂度详解
1.算法的概念: 算法 (Algorithm),是对特定问题求解步骤的一种描述. 解决一个问题往往有不止一种方法,算法也是如此.那么解决特定问题的多个算法之间如何衡量它们的优劣呢?有如下的指标: 2. ...
- a*算法的时间复杂度_算法基础——时间复杂度amp;空间复杂度
关注.星标公众号,学点计算机知识. 整理:persistenceBin 今天来跟大家继续分享一下数据结构的基础知识--算法效率的度量:时间复杂度和空间复杂度.首先来跟大家分享一下在电影<复仇者联 ...
最新文章
- AI化身监工,上班还能摸鱼吗?
- oracle 清理定期备份文件,RAC RMAN定期备份及删除脚本
- Selenium常用API的使用java语言之7-控制浏览器操作
- python链式赋值与C++赋值的结果比较与分析
- 【BZOJ 3636】教义问答手册 (分治+整体二分+dp)
- 02-print的用法
- tcp_v4_connect函数分析
- 时尚美妆图片,让你饱眼福的唯美壁纸
- 如何:在 Windows 窗体 ListView 控件中启用平铺视图 【转载】
- 国内首家,携程试点每周两天居家办公反响热烈,76%的员工主动报名
- 网络变压器 网络变压器设计线路分类及其设计目的和侧重点
- 【加拿大签证】加拿大访问学者签证所需材料【加拿大访学签证,超详细,看一篇就够了】
- win7 升级到 win10 补丁
- 表示学习(特征学习)
- 使用jquery实现图形点击文字按顺序验证码案例及代码完整版
- MybatisPlus极速入门教程
- Delphi 编写数字签名验证并获取签名信息
- 关于likely()与unlikely函数
- 什么是短链接?长连接?
- web.xm配置详解
热门文章
- php文字如何排版,文字如何实现完美UI?文本排版设计告诉你
- 【MindSpore易点通机器人-01】你也许见过很多知识问答机器人,但这个有点不一样
- python设置休眠时间_如何在Python中实现时间睡眠?
- 计算机是如何计算 log 函数的?
- 8种教你如何快速提高平面设计技巧
- 光纤通道网络FC vs 以太网光纤通道FCoE
- 计算机组成原理mips汇编大作业报告(冒泡排序、选择排序)
- Ctrl+Shift+F 输入法变成繁体 输入法简体繁体切换
- 通过doi可以检索到文献_什么是DOI?如何获取文献的DOI?
- zkonline java_U.ARE.U4000B指纹仪,ZKOnline SDK,java服务器端指纹特征码验证--转载