Python算法00--时间复杂度和空间复杂度

通常,我们衡量一个算法的优劣,从「时间复杂度」和「空间复杂度」两个维度去考量

●时间复杂度

执行当前算法所消耗的时间

●空牛牛群官网间复杂度

执行当前算法需要占用多少内存空间

「时间复杂度」

我们先来看一个例子:

图1

我们通过打印程序的执行时间来看算法的「时间复杂度」。这种栗子存在弊端,受运行环境的影响,在性能高的机器上跑出来的结果与在性能低的机器上跑的结果相差会很大。

时间复杂度表示方法:「大O符号表示法」

公式:T[n]=O)

f表示每行代码执行次数之和,而O表示正比例关系,这个公式又叫算法的渐进时间复杂度。

通过「大O符号表示法」,图1的时间复杂度为:O

●常数阶O

图2

图2输出结果分别是0人0%A.1和10人0%B.2和0投票

有时候在Python中看到存在++i这种形式,这其实不是自增,只是简单的表示正负数的正号而已。正正得正,负负得正,所以++i和--i都是i。

无论代码执行了多少行,只要是没有循环等复杂结构,那这个代码的时间复杂度就都是O

图2代码在执行的时候,它消耗的时候并不随着某个变量的增长而增长,那么无论这类代码有多长,即使有几万几十万行,都可以用O来表示它的时间复杂度。

●线性阶O

从最开始图1的栗子,for循环里面的代码会执行n遍,因此它消耗的时间是随着n的变化而变化的,因此这类代码都可以用O来表示它的时间复杂度。

●平方阶O

如果把O的代码再嵌套循环一遍,它的时间复杂度就是O了。

●对数阶O

①先回火凤凰棋牌顾哈log

②举个栗子

图3

从图3代码中,变量i从1开始,while循环里面,每次都将i乘以2,当i的值大于n时,推出循环

也就是说当循环log次以后,这个代码就结束了。因此这个代码的时间复杂度为:O

●线性对数阶O

线性对数阶O其实将时间复杂度为O的代码循环N遍的话,那么它的时间复杂度就是n*O,也就是了O。

「空间复杂度」

●常数阶O

如果算法执行所需要的临时空间不随着某个变量n的大小而变化,即此算法空间复杂度为一个常量,可表示为O

空间复杂度S=O

●线性阶O

第3行新建一个数组出来,这个数据占用的大小随着for循环的增加而增加。所以

S=O

●平方阶O

二维数组,双层for循环生成。空间复杂度S=O

小憩一下

只有程序猿才看的懂的图

(责任编辑:牛牛群官网)

本文地址:/jianguochaohuo/20200606/5870.html

上一篇:网上招聘外卖骑手,工资8千,为啥没人干?网友:我读书少但不傻 下一篇:与OPPO联手围剿苹果越南市场Apple连续四个月输火凤凰棋牌小米