时间复杂度计算

视频参考:【数据结构——时间复杂度计算】https://www.bilibili.com/video/BV13d4y1K74p?vd_source=b6379ad898bc655daa39f852409320e2

一层循环

(1)列出循环趟数t,每轮循环i的变化值

(2)找到t和i的关系

(3)找到循环终止条件

(4)联立两式,解方程

例题1:

i = n * n;
while(i != 1){
  i = i / 2;
}
t0123...
in^2n^2/2n^2/4n^2/8...

t和i的关系i = n^2/2^t

终止条件i = 1

联立 n^2/2^t = 1  => t = O(log2n)

例题2:

x = 0
while(n >= (x + 1)^2)
  x = x + 1;
t0123...
x0123...

t = x

n = (x + 1)^2

联立 => T = O(\sqrt{n})

两层循环

(1)列出外层循环中i的变化值

(2)列出内层语句的执行次数

(3)求和,写结果

例题1:

int m = 0,i,j;
for(i = 1;i <= n;i++){
  for(j = 1;j <= 2*i ;j++){
    m++;
  }
}
i12345...n
内层语句执行次数246810...2n

内层语句执行次数求和:n(2 + 2n)/2 = n(n+1)

=> T = O(n^2)

m++的执行次数为:n(n+1)

多层循环

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

方法二:列式求和

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

因此i,j,k相互依赖

算法时间复杂度是衡量算法执行时间与输入数据量之间关系的一个量度。它通常用大O符号(O-notation)来表示,用于描述算法运行时间的增长率。以下是一些基本概念和计算方法: 1. 基本操作:在算法中,执行时间主要由基本操作的执行次数决定,基本操作通常是算法中最简单的计算步骤。 2. 最坏情况分析:时间复杂度通常针对最坏的情况来分析,即输入数据最不利于算法性能的场景。 3. 大O表示法:大O符号用于表示上界,它忽略低阶项和常数系数。例如,如果一个算法的执行次数为3n² + 2n + 1,其时间复杂度表示为O(n²)。 4. 常见的时间复杂度: - O(1):常数时间复杂度,表示算法的执行时间不随输入数据的大小变化而变化。 - O(log n):对数时间复杂度,常见于使用二分查找的算法。 - O(n):线性时间复杂度,表示算法执行时间与输入数据量成正比。 - O(n log n):线性对数时间复杂度,常见于一些高效的排序算法,如快速排序和归并排序。 - O(n²):平方时间复杂度,常见于简单的嵌套循环结构。 - O(2^n):指数时间复杂度,这类算法随着数据量的增加而迅速变得非常慢。 5. 主定理(Master Theorem):用于解决递归式的时间复杂度计算问题,适用于分治算法中的递归运行时间分析。 计算时间复杂度时,需要确定算法中的主导循环,并分析该循环中基本操作的执行次数如何随输入数据量n的增长而增长。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值