数据结构-算法-时间复杂度计算

本文介绍了算法时间复杂度的定义,强调了在分析时重点关注最高次幂的增长率。通过实例展示了如何推导大O阶,包括计算1到100的和以及矩阵乘法的时间复杂度,并对常见时间复杂度阶的效率进行了比较。此外,还涉及了Hanoi问题的递归算法时间复杂度分析。
摘要由CSDN通过智能技术生成
               

算法的时间复杂度定义为:

在进行算法分析时,语句总的执行次数T(n)是关于问题规模n的函数,进而分析T(n)随n的变化情况并确定T(n)的数量级。算法的时间复杂度,也就是算法的时间量度,记作:T(n}=0(f(n))。它表示随问题规模n的增大,算法执行时间的埔长率和 f(n)的埔长率相同,称作算法的渐近时间复杂度,简称为时间复杂度。其中f( n)是问题规横n的某个函数。

根据定义,求解算法的时间复杂度的具体步骤是:

  ⑴ 找出算法中的基本语句;
  算法中执行次数最多的那条语句就是基本语句,通常是最内层循环的循环体。
  ⑵ 计算基本语句的执行次数的数量级;
  只需计算基本语句执行次数的数量级,这就意味着只要保证基本语句执行次数的函数中的最高次幂正确即可,可以忽略所有低次幂和最高次幂的系数。这样能够简化算法分析,并且使注意力集中在最重要的一点上:增长率。
  ⑶ 用大Ο记号表示算法的时间性能。
  将基本语句执行次数的数量级放入大Ο记号中。


如何推导大o阶呢?我们给出了下面 的推导方法:

1.用常数1取代运行时间中的所有加法常数。
2.在修改后的运行次数函数中,只保留最髙阶项。
3.如果最高阶项存在且不是1,则去除与这个项相乘的常数。

简单的说,就是保留求出次数的最高次幂,并且把系数去掉。  如T(n)=2n^2+n+1 =O(n^2)

举个例子。

#include "stdio.h"int main(){    int i, j, x = 0, sum = 0, n = 100/* 执行1次 */    for( i = 1; i <= n; i++)    /* 执行n+1次 */    {        sum = sum + i;               /* 执行n次 */           for( j = 1; j <= n; j++)    /* 执行n*(n+1)次 */        {            x++;                /* 执行n*n次 */            sum = sum + x;      /* 执行n*n次 */        }    }    printf("%d", sum);          /* 执行1次 */}


按照上面推导“大O阶”的步骤,我们来看

第一步:“用常数 1 取代运行时间中的所有加法常数”,

则上面的算式变为:执行总次数 =3n^2 + 3n + 1

(直接相加的话,应该是T(n) = 1 + n+1 + n + n*(n+1) + n*n + n*n + 1 = 3n^2 + 3n

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值