【时间复杂度的计算】

一、时间复杂的的概念

1、定义

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

时间复杂度的大小比较:
在这里插入图片描述
时间复杂度的分类:

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

2、基本计算规则

  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(n^2)/2(n^2)/4(n^2)/8

第二步:找到t和i的关系
i = (n2)/2t
第三步:确定循环停止条件
i =1
第四步:联立第二步和第三步两式解方程:
在这里插入图片描述
所以得到的时间复杂度为:
在这里插入图片描述
例题分析二:

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

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

t0123
x0123

第二步:找到t与x的关系:
t = x
第三步:确定循环停止的条件
在这里插入图片描述
第四步:联立第二步和第三步解方程
在这里插入图片描述
所以时间复杂度为:
在这里插入图片描述

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

解题步骤:

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

例题分析一:

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

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

i1234567n

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

内层语句执行次数2468102*n

第四步:求和,写结果
2+4+6+8+…+2*n = n(n+1)
所以时间复杂度为:
在这里插入图片描述
例题分析二:

for(i = 0;i<n;i++)
    for(j=0;j<m;j++)
        a[i][j] = 0;

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

i01234n-1

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

内层语句执行次数mmmmm

第三步:求和,写结果
m * (n-1-0+1) = m*n
在这里插入图片描述
例题分析三:

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

注意此处外层循环中不是k++而是k *=2,所以先计算外层循环的单层时间复杂度:

循环趟数t123456
k12481632

循环趟数t和k关系:
在这里插入图片描述
循环停止条件为:k =n
联立两式,得:
在这里插入图片描述
外层的时间复杂度就为:
在这里插入图片描述
计算内层时间复杂度为O(n)
总体时间复杂度为:
在这里插入图片描述

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

例题分析一:

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

1、法一:抽象为计算三维物体的体积

在这里插入图片描述
时间复杂度为:
在这里插入图片描述

2、法二:列式求和

在这里插入图片描述
在这里插入图片描述

算法的时间复杂度是衡量算法执行时间与输入数据量之间关系的一个量度。它通常用大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、付费专栏及课程。

余额充值