时间复杂度

 时间复杂度:

      算法的实行时间和原操作的执行次数是成正比的。从算法中选取一种对于所研究的问题来说是基本操作原操作,以该基本操作在算法中重复执行的次数作为算法运行时间的衡量准则。

随着规模的增大,算法执行所需要的时间的增长率和f(n)的增长率是相同的。用时间复杂度来表示算法的时间效率

     T (n) = O(f(n))

    T (n) 为算法的(渐近)时间复杂度

四, 大O复杂度表示法
大O时间复杂度并不表示代码真正的执行时间
而是表示代码执行时间随数据规模增长的变化趋势,
也称渐进时间复杂度,简称时间复杂度
当n趋向无限大时,公式中的低阶,常量,系数三部分并不左右增长趋势,
所以都近似可以忽略,只记录公式中的最大量级即可
更复杂的,如果上边例子1,2的循环中加载其他操作,则执行总时间可能为:
T(n)=O(5n+3)或T(n)=O(3n²+5n+2)等等
但他们的时间复杂度均可以记为:T(n)=O(n)和T(n)=O(n²)

时间复杂度和
2.计算方法:
  ①先找次数
  ②O( 次数)
 ③用常数1取代运行时间中的所有常数
  ④保留最高阶
  ⑤丢掉常数C

 

for(i = 0; i < n; ++i)1

for(j = 1; j < n; j++)2

{c[i][j]=0;} 3

语句1执行次数: n+1,大部分同学会认为这里是n,但是这个语句会一直执行到n,也就是会执行n+1次才会结束;

语句2执行次数: n* (1+n)=n*(n+1)=n^2+n;因为语句2是嵌套循环,前提必须是j<n,所以它只能执行n次

语句3执行次数: 双重循环 n^2;

总共f(n)=n+1+n^2+n+n^2=2n^2+2n+1--->O(n^2)

电脑的计算速度很快,一秒钟都上亿次,所以低阶项,和系数不考虑。

时间复杂度要遵循:

1、只保留高阶项,低阶项直接丢弃

2、系数不要

 for(int i=0;i<100;i++){++x;s = 0;}    语句频度为100,常数统一用1来代替,所以时间复杂度为   O( 1 )
3、先写出执行次数和n之间的关系式

for(int i = 0;i < n; i *= 2)

i 的变化为:1 2 4 8 ...n

2^x=n--->x = log以2为底的n次方(这里没法打出来)时间复杂度O(  log以2为底的n次方 )

七,常见时间复杂度举例


1:O(1)


O(1)表示是常量级时间复杂度,而并非只执行了一行代码
大O复杂度表示法,并不表示代码真正的执行时间,
仅表示代码执行时间随数据规模增长的变化趋势
所以,只要代码的执行时间不随n的增大而增大,时间复杂度就是O(1)

一般来讲,只要代码代码中不存在循环(或循环上限为一个常数),都是常量级

2:O(logn)和O(nlogn)   


这里是首次讨论对数阶时间复杂度,对数阶的时间复杂度非常常见,同时也比较难分析
public void sum1(int n) {
   int i = 1;
   
   while(i <= n){
       i = i * 2;
   }
   return i;
}

实际上,随n变化的变量i取值是一个等比数列:
20,21,22...2k...2x=n20,21,22...2k...2x=n      2^0, 2^1, 2^2 ... 2^k ... 2^x = n20,21,22...2k...2x=n

空间复杂度 :

函数中创建对象的个数关于问题规模的函数表达式
不是计算实际占用的空间,而是计算整个算法的辅助空间单元的个数,与问题规模没有关系(简单理解就是算法执行时创建的变量个数(包括临时变量)
空间可以重用,算递归最坏(最深)的一种情况

 

 

常用的时间复杂度所耗费的时间从小到大依次是:

O(1)<O(logn)<O(n)<O(nlogn)<O(n^2)<O(n^3)<O(2^n)<O(n!)<O(n^n)
曲线越陡,时间复杂度越大,越不好
 

 只要与n无关的空间变量的次数,就是o(1),也就是常数

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

TO_ZRG

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值