当前位置:网站首页>时间复杂度和空间复杂度
时间复杂度和空间复杂度
2022-07-27 16:47:00 【兔头哥哥】
1、前言
算法(Algorithm)是指用来操作数据、解决程序问题的一组方法。对于同一个问题,使用不同的算法,也许最终得到的结果是一样的,但在过程中消耗的资源和时间却会有很大的区别。
那么我们应该如何去衡量不同算法之间的优劣呢?
主要还是从算法所占用的「时间」和「空间」两个维度去考量。
- 时间维度:是指执行当前算法所消耗的时间,我们通常用[时间复杂度]来描述。
- 空间维度:是指执行当前算法所需要占用多少内存空间,我们通常用[空间复杂度]来描述。
因此,评价一个算法的效率主要是看它的时间复杂度和空间复杂度情况。然而,有的时候时间和空间却又是「鱼和熊掌」,不可兼得的,那么我们就需要从中去取一个平衡点。
下面我来分别介绍一下「时间复杂度」和「空间复杂度」的计算方式。
二、时间复杂度
我们想要知道一个算法的「时间复杂度」,很多人首先想到的的方法就是把这个算法程序运行一遍,那么它所消耗的时间就自然而然知道了。
这种方式可以吗?当然可以,不过它也有很多弊端。
这种方式非常容易受运行环境的影响,在性能高的机器上跑出来的结果与在性能低的机器上跑的结果相差会很大。而且对测试时使用的数据规模也有很大关系。再者,并我们在写算法的时候,还没有办法完整的去运行呢。
因此,另一种更为通用的方法就出来了:「 大O符号表示法 」,即 T(n) = O(f(n))
我们先来看个例子:
for(i=1; i<=n; ++i)
{
j = i;
j++;
}
通过「 大O符号表示法 」,这段代码的时间复杂度为:O(n) ,为什么呢?
在大O符号表示法中,时间复杂度的公式是:T(n) = O( f(n) ),其中f(n)表示每行代码执行次数之和,而O表示正比例关系,这个公式的全称是:算法的渐进时间复杂度。
我们继续看上面的例子,假设每行代码的执行时间都是一样的,我们用1颗粒度时间来表示,那么这个例子的第一行耗时是1个颗粒时间,第三行的执行时间是n个颗粒时间,第四行的执行时间也是n个颗粒时间(第二行和第五行是符号,暂时忽略),那么总时间就是1个颗粒时间 + n颗粒时间 + n颗粒时间,即(1+2n)个颗粒时间,即:T(n) = (1+2n)*颗粒时间,从这个结果可以看出,这个算法的耗时是随着n的变化而变化,因此,我们可以简化的将这个算法的时间复杂度表示为:T(n) = O(n)
边栏推荐
- Daily question (02): inverted string
- Greedy method, matroid and submodular function (refer)
- sql 时间处理(SQL SERVER\ORACLE)
- Browser rendering principle analysis suggestions collection
- Opening and using Alibaba cloud object storage OSS
- Questions about webservice
- 让你的聊天气泡丰富多彩
- HDU1323_Perfection【水题】
- C language preprocessing instruction
- 换行问题双保险
猜你喜欢

Webmagic+selenium+chromedriver+jdbc grabs data vertically.

ES6 learning notes (1) - quick start

Performance analysis of continuous time system (1) - performance index and first and second order analysis of control system

sql 字段类型转换

c语言:15、结构体

Idea optimization strategy

C语言案例:密码设置及登录> 明解getchar与scanf

Performance analysis of continuous time systems (2) - second order system performance improvement methods PID, PR

Unity shows Kinect captured shots

VIVO应用市场APP上架总结
随机推荐
SQL Server top keyword usage
SSM project uses filter to realize login monitoring
Unity shows Kinect captured shots
MySQL learning notes (2) -- stored procedures and stored functions
Summary of "performance test" of special test
The understanding of string in C.
An article allows you to master threads and thread pools, and also solves thread safety problems. Are you sure you want to take a look?
New system installation mysql+sqlyog
5W奖金池/面向高校,2022法律科技创新大赛报名火热进行中
Daily question (02): inverted string
C # one method returns multiple values. Suggestions collection
Automatic testing of Web UI: Selenium syntax explanation is the most complete in the history
200行代码快速入门文档型数据库MonogoDB
Webmagic+selenium+chromedriver+jdbc grabs data vertically.
Sword finger offer17- print from 1 to the maximum n digits - Analog
我想咨询下,我们的maxcompute spark程序需要访问redis,开发环境和生产环境redi
Unity learning notes - six common functions of object movement
ES6学习笔记(1)——快速入门
Unity display Kinect depth data
X-shell remote connection virtual machine