时间复杂度与空间复杂度

算法效率分析可以分为时间和空间两个方面,分别为时间复杂度与空间复杂度。

时间复杂度

进行算法分析时,算法的基本语句(关键语句)的执行次数与问题规模n的关系表示为T(n)。

T(n)由于同一问题本身的差异,如排序中输入数据序列的有序性不确定,T(n)会有最好情况Tmin(n)、平均情况Tavg(n)与最坏情况Tmax(n),实践表明,最坏情况是最有实际价值的。

实际问题中,n趋于极限时,我们关心的是T(n)的变化趋势或者说其量级(Order)。

应用数学中的渐近分析可以用来描述函数的渐近行为(变化趋势)。

算法的渐近分析就是估计当求解问题的规模 n 逐步增大时,时间开销 T(n) 的增长趋势。

相关的渐近符号有Θ、O、Ω、o、ω。分别读作:Theta,Omicron,Omega,omicron,omega。

下面是数学上的定义

O记号

image.png

设 f(n) 和 g(n) 是定义域 n 为自然数集合的函数,如果存在正的常数c和自然数n0,使得当n≥n0 时有f(n)≤cg(n),则称函数f(n)当n充分大时上有界,且g(n)是它的一个上界,记为f(n) = O(g(n))

f(n)=O(g(n))并不是数学上严格的等于的概念,也可以为fn ∈ O(g(n)),O表示一个函数的集合。

Ω记号

image.png

如果存在正的常数c和自然数n0,使得当n≥n0时有f(n)≥cg(n), 则称函数fn当n充分大时下有界,且gn是fn的一个下界,记为fn=Ω(g(n))

Θ记号

image.png

存在正的常数c1和c2和自然数n0,使得当n≥n0时有c2g(n)≤f(n)≤c1g(n),则当n充分大时,gn的常数倍既是上界也是下界,记为fn=Θ(g(n))。

o与ω

另外两个渐进符号 ο 和 ω 一般很少使用,指不那么紧密的上下界。

记号 含义 通俗理解
Θ 紧确界 相当于”=”
O 上界 相当于”<=”
ο 非紧的上界 相当于”<”
Ω 下界 相当于”>=”
ω 非紧的下界 相当于”>”
我们一般用 O 渐进上界来评估一个算法的时间复杂度,表示逼近的最坏情况。其他渐进符合基本不怎么使用。

通过例子理解

假设算法 A 的运行时间表达式:
T(n)= 5 * n^3 + 4 * n^2
求渐近上界:

f(n) = O(n^3),g(n) = n^3
f(n) = O(n^4),g(n) = n^4

两个 g(n) 都是上界,因为令 c = 5 时都存在:0 <= f(n) <= c * g(n))。

我们会取乘方更小的那个,因为这个界更逼近 f(n) 本身,所以我们一般说 f(n) = O(n^3),算法的复杂度为大欧 n 的三次方,表示最坏情况。

求渐近下界:
同理,渐近下界 Ω 刚好与渐近上界相反,表示最好情况。

f(n) = Ω(n^3),g(n) = n^3
f(n) = Ω(n^2),g(n) = n^2

我们准确评估的时候,要取乘方更大的那个,因为这个界更逼近 f(n) 本身,所以我们一般说 f(n) = Ω(n^3),算法的复杂度为大欧米伽 n 的三次方,表示最好情况。

我们发现当 f(n) = Ω(n^3) = O(n^3) 时,其实 f(n) = Θ(n^3)。

求o与ω

评估的时候,不那么准确去评估,在评估最坏情况的时候使劲地往坏了评估,评估最好情况则使劲往好的评估,但是它不能刚刚好,比如上面的结果:

f(n) = O(n^3),g(n) = n^3
f(n) = O(n^4),g(n) = n^4
f(n) = Ω(n^3),g(n) = n^3
f(n) = Ω(n^2),g(n) = n^2

// 我们可以说:
f(n) = ο(n^4),g(n) = n^4  往高阶的评估,不能同阶
f(n) = ω(n^2),g(n) = n^2  往低阶的评估,不能同阶

常见时间复杂度量级 & 排序算法的时间复杂度

常见时间复杂度量级


image.png

从高阶到低阶


image.png

排序算法的时间复杂度

排序算法 平均时间复杂度 最坏时间复杂度 最好时间复杂度 空间复杂度 稳定性
冒泡排序 O(n²) O(n²) O(n) O(1) 稳定
直接选择排序 O(n²) O(n²) O(n) O(1) 不稳定
直接插入排序 O(n²) O(n²) O(n) O(1) 稳定
快速排序 O(nlogn) O(n²) O(nlogn) O(nlogn) 不稳定
堆排序 O(nlogn) O(nlogn) O(nlogn) O(1) 不稳定
希尔排序 O(nlogn) O(ns) O(n) O(1) 不稳定
归并排序 O(nlogn) O(nlogn) O(nlogn) O(n) 稳定
计数排序 O(n+k) O(n+k) O(n+k) O(n+k) 稳定
基数排序 O(NM) O(NM) O(N*M) O(M) 稳定

空间复杂度
空间复杂度和时间复杂度的情况其实类似,但是它更加的简单。用最简单的方式来分析即可。主要有两个原则:

如果你的代码中开了数组,那么数组的长度基本上就是你的空间复杂度。比如你开了一个一维的数组,那么你的空间复杂度就是O(n),如果开了一个二维的数组,数组长度是n2,那么空间复杂度基本上就是n2

如果是有递归的话,那么它递归最深的深度,就是你空间复杂度的最大值。如果你的程序里边递归中又开了数组,那么空间复杂度就是两者的最大值

O(1)
function  f1(){
    const test =10;
    console.log(test);
    console.log(1);
    console.log(2);
    console.log(3)
}
O(n)
function f1(n) {
    let arr = [];
    for (let i = 0; i < n; i++) {
        console.log(4 * i);
        arr.push(i);
    }
    return arr;
}
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 214,504评论 6 496
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,434评论 3 389
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 160,089评论 0 349
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,378评论 1 288
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,472评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,506评论 1 292
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,519评论 3 413
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,292评论 0 270
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,738评论 1 307
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,022评论 2 329
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,194评论 1 342
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,873评论 5 338
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,536评论 3 322
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,162评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,413评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,075评论 2 365
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,080评论 2 352

推荐阅读更多精彩内容