详解时间复杂度计算公式(附例题细致讲解过程)
创始人
2024-04-10 00:47:42
0

这几天开始刷力扣上面的算法题,有些题目上面限制时间复杂度空间复杂度,题目虽然写出来了,但是很没底。印象里数据结构老师讲过一点,沉睡的记忆苏醒了。只记得一个时间复杂度是O(n),空间复杂度是S(n)。for循环常常是O(n),具体是怎么算的不清楚。所以在看了相关的视频教学后,总结一下时间复杂度的计算公式,希望能给大家的学习带来帮助!

目录

一、什么是时间复杂度 

二、单层循环时间复杂度计算公式

三、两层循环时间复杂度计算公式

四、多层循环时间复杂度计算公式

方法一:抽象为计算三维物体体积

方法二:列式求和


一、什么是时间复杂度 

时间复杂度(Time complexity)是一个函数,它定性描述该算法的运行时间。这是一个代表算法输入值的字符串的长度的函数. 时间复杂度常用大O表述,不包括这个函数的低阶项和首项系数。

时间复杂度大小比较:

时间复杂度分类:

  • 算法完成工作最少需要多少基本操作叫做最优时间复杂度,是一种最乐观最理想的状态。
  • 算法完成工作最多需要多少基本操作叫做最坏时间复杂度,是算法的一个保障。
  • 算法完成工作平均需要多少基本操作叫做平均时间复杂度,它可以均匀全面的评价一个算法的好坏。

时间复杂度基本计算规则:

  1. 基本操作即只有常数项,认为其时间复杂度为O(1)
  2. 顺序结构,时间复杂度按加法进行计算
  3. 循环结构,时间复杂度按乘法进行计算
  4. 分支结构,时间复杂度取最大值
  5. 判断一个算法效率时,往往只需要关注操作数量的最高次项,其他次要项和常数项可以忽略
  6. 在没有特殊说明时,我们所分析的时间复杂度都是指最坏时间复杂度

二、单层循环时间复杂度计算公式

 解题步骤

  1. 列出循环趟数t及每轮循环i的变化值
  2. 找到t与i的关系
  3. 确定循环停止条件
  4. 联立两式解方程
  5. 写结果

 例题分析

 例一:

i = n*n;
whlie(i != 1)i = i/2;

第一步:列出循环趟数t及每轮循环i的变化值:

t0123
in^{2}\frac{n^2}{2}\frac{n^2}{4}\frac{n^2}{8}

第二步:找到t与i的关系:

 i=\frac{n^{2}}{2^{t}}

第三步:确定循环停止条件:

i = 1

第四步:联立第二步第三步两式解方程:

\frac{n^{2}}{2^{t}} = 1 \quad\quad n^2 = 2^t \quad\quad t = \log_2n^2

t = \log_2n^2 = 2\log_2n

所以得到时间复杂度为:

T = O(\log_2n)

例二:

x = 0;
while (n>=(x+1)*(x+1))x = x+1;

第一步:列出循环趟数t及每轮循环x的变化值:

t01234
x01234

第二步:找到t与x的关系:

 t = x

第三步:确定循环停止条件:

n = (x+1)^2

第四步:联立第二步第三步两式解方程:

(t +1)^2 = n

t = \sqrt[]{n}-1

所以得到时间复杂度为:

T=O(\sqrt[]{n})

 例三:

int i = 1;
while (i<=n)i = i *2

第一步:列出循环趟数t及每轮循环i的变化值:

t01234
i01234

第二步:找到t与x的关系:

 i = 2^t

第三步:确定循环停止条件:

i = n

第四步:联立第二步第三步两式解方程:

2^t = n

t = \log_2n

所以得到时间复杂度为:

T = O(\log_2n)

 例四:

int i = 0;
while (i*i*i<=n)i ++;

第一步:列出循环趟数t及每轮循环i的变化值:

t01234
i01234

第二步:找到t与x的关系:

 i=t

第三步:确定循环停止条件:

i^3 = t

第四步:联立第二步第三步两式解方程:

t^3 = n

t = \sqrt[3]{n}

所以得到时间复杂度为:

T=O( \sqrt[3]{n})

 例五:

y = 0;
while (y+1)*(y+1) <= ny = y+1;

第一步:列出循环趟数t及每轮循环y的变化值:

t01234
y01234

第二步:找到t与x的关系:

 t = y

第三步:确定循环停止条件:

(y+1)^2= n

第四步:联立第二步第三步两式解方程:

(t +1)^2 = n

t = \sqrt[]{n}-1

所以得到时间复杂度为:

T=O(\sqrt[]{n})

三、两层循环时间复杂度计算公式

 解题步骤

  1. 列出循环中i的变化值
  2. 列出内层语句的执行次数
  3. 求和,写结果

 例题分析

例一:

int m=0,i,j;
for (i=1;i<=n;i++)for(j=1;j<=2*i;j++)m++;

第一步列出循环中i的变化值:

第二步列出内层语句的执行次数:

i12345......n
内层语句执行次数246810......2*n次

第三步 求和,写结果

2+4+...+2n = \frac{2+2n}{2}n = n(n+1)

T= O(n^2)

 例二:

for (i=0;i

第一步列出循环中i的变化值:

第二步列出内层语句的执行次数:

i01234......n-1
内层语句执行次数mmmmm......m次

第三步 求和,写结果

m*(n-1-0+1) = m*n

T = O(mn)

 例三:

count = 0;
for (k=1;k<=n;k*=2)for(j=1;j<=n;j++)count ++;

这里k*=2,不再是++,所以要先用单层循环求出变换趟数:

t1234
k1234

k = 2^{t-1}

t = \log_2k +1

内层每个都是n,求和则可以得到:

T= O(n\log_2n)

 例四:

for (i=n-1;i>=1;i--)for(j=1;j<=i;j++)if A[j] > A [j+1]A[j]与A[j+1]交换;

第一步列出循环中i的变化值:

第二步列出内层语句的执行次数:

in-1n-2......2
内层语句执行次数n-2n-3......1次

第三步 求和,写结果

\frac{n-2+1}{2}*(n-2) = \frac{n+1}{2}*(n-2)

T=O(n^2)

四、多层循环时间复杂度计算公式

方法一:抽象为计算三维物体体积

方法二:列式求和

例一:

for(i=0;i<=n;i++)for(j=0;j<=i;j++)for(k=0;k

方法一:抽象为计算三维物体体积:

 i依赖于n,j依赖于i,k依赖于j,三者都可以看成是n,再由体积公式V = \frac{1}{3}Sh可以求出

T= O(n^3)

方法二:列式求和:

\sum_{i=0}^{n}\sum_{j=0}^{i}\sum_{k=0}^{j-1} = \sum_{i=0}^{n}\sum_{j=0}^{i}\(j-1-0+1)= \sum_{i=0}^{n}\sum_{j=0}^{i}\j

\sum_{i=0}^{n}\sum_{j=0}^{i}\j= \sum_{i=0}^{n}\frac{i(i+1)}{2}=\sum_{i=0}^{n}(i^2+i)=\frac{1}{2}\sum_{i=0}^{n}i^2=\frac{1}{2}\sum_{i=0}^{n}i=O(n^3)

T = O(n^3)

相关内容

热门资讯

建科院:按照现行法律法规,不涉... 金融界8月22日消息,有投资者在互动平台向建科院提问:“董秘,你好!公司主营城市规划业务占营收比24...
肆意侵吞单位资金,这个公安局长... 据山西省纪委监委网站8月21日消息,经晋中市委批准,晋中市纪委监委对介休市原市长助理、公安局党委书记...
欧洲股市涨势暂歇 投资者权衡经... 欧洲股市在连续三日上涨后持稳,投资者权衡欧元区商业活动数据,同时将焦点转向杰克逊霍尔经济研讨会。 斯...
让政策“红利”流向真正专注于技... 本报记者 周怿 8月18日,国家税务总局曝光了“新三样”领域两起偷骗税案件,警示任何试图以偷骗税损害...
墨央行:美国政策变化引发墨西哥... 当地时间8月21日,墨西哥央行表示,美国政府的政策变化持续对墨西哥通胀预期带来不确定性。考虑到美国贸...
“好房子”政策引领,厨电创新聚... 2025年8月20日,由中国家电网主办的“好房子 好厨电 好生活——2025中国厨电行业高峰论坛”在...
请求立案!公益律师团队为日军“... 今年是中国人民抗日战争暨世界反法西斯战争胜利80周年,而一群无辜受害者的悲惨遭遇仍刺痛着世人的良知。...
解雇6000名推特员工,马斯克... 马斯克 凤凰网科技讯 北京时间8月22日,据路透社报道,埃隆·马斯克(Elon Musk)及其社交媒...
牢牢坚持知识产权制度的发展导向 周建军(国务院国资委研究中心研究员) 知识产权制度与技术创新、经济社会发展的成效密切相关。我国即将开...
聚焦杰克逊霍尔!鲍威尔演讲或成... 智通财经获悉,美联储鲍威尔将于周五(北京时间晚上10点)在怀俄明州杰克逊霍尔举行的全球央行年会上发表...