时间复杂度

目录

目录

一、初识时间复杂度

例1:

例2:

总结:

再次强调:

二、时间复杂度计算

方式一:T(n) = 常数

方式二:T(n) = 常数*n + 常数

方式三:多项式

方式四:对数

总结

口算练习

练习 1

练习 2

练习3

练习4

练习5

思考

思考 1

思考 2

时间复杂度对比

1.O(1)

2.O(log n);

3.O(n)

4.O(n log n)

5.O(n²)

6.O(n³)

7.O(2^n)

总结:时间复杂度排序

 文章说明:


一、初识时间复杂度

例1:

查看代码执行了几步

答:执行了两次

  1. println
  2. return

例2:

查看代码执行了几步

答:执行了九次,公式3n+3次,n == i

步骤:

  1. int i = 0;
  2. i < 2;
  3. println
  4. i++ 此刻i = 1
  5. i < 2
  6. println
  7. i++ 此刻i = 2
  8. i < 2
  9. return

总结:

一段代码的执行次数会用 T(n) 表示

n:数据输入的大小或者是输入数据的数量

T:在输入数量为n的时候这一段代码的总执行次数

所以

例1的执行次数是:T(n) = 2

例2的执行次数表示为:T(n) = 3n + 3

问题:T(n) 作为衡量代码的执行速度的依据,当代码比较多的时候,再去使用就会比较麻烦,还要一条条语句去数,而且函数调用函数时,运算起来也很麻烦,所以算法使用 T(n) 简化的估算值来衡量代码的执行速度,这个简化的估算值叫做时间复杂度

再次强调:

  • 一段代码的执行次数会用 T(n) 表示
  • 算法使用 T(n) 简化的估算值来衡量代码的执行速度,这个估算值叫时间复杂度

那么估算值怎么计算的的呢????

二、时间复杂度计算

方式一:T(n) = 常数

T(n) = 常数时 ,T(n) 估算为1

所以 例1中T(n) = 2 的时间复杂度是 1

方式二:T(n) = 常数*n + 常数

T(n) = 常数*n + 常数 时

  1. 后面的常数可以省略掉,因为随着n的增大,第一部分(常数*n)会越来越大,而第二部分一直不变,也就是说,第二部分相当于第一部分与第二部分相比相当于不存在,所以可以直接省略,最后变成了T(n) = 常数*n
  2. 然而常数又可以直接当成1,所以最终的结果是: T(n) = n

方式三:多项式

面对多项式,只需要保留最大的次方数

比如:T(n) = 5n³+6666n² + 233 时间复杂度为 T(n) = n³

说明:

因为随着n的增大,后面的项的增长远远不及n的最高次项大,所以可以直接省略低次项

方式四:对数

下面有

总结

如下这总时间复杂度表示并不完整

T(n) = 2 → T(n) = 1

T(n) = 3n + 3 → T(n) = n

T(n) = 5n³+6666n² + 233 → T(n) = n³

应该再加上大写字母O,如下

T(n) = 2 → T(n) = O(1)

T(n) = 3n + 3 → T(n) = O(n)

T(n) = 5n³+6666n² + 233 → T(n) = O(n³)

口算练习

练习 1

如下代码的时间复杂度是多少?

答:O(1);

练习 2

如下代码的时间复杂度是多少?

答:O(n);

练习3

如下代码的时间复杂度是多少?

答:O(n²);

所以有几次循环,时间复杂度就是n的多少次方,故此:a重循环,时间复杂度就是O(n^a)

练习4

如下代码的时间复杂度是多少?

答:O(n²);

因为:T(n) = n² + n = O(n²);

练习5

如下代码的时间复杂度是多少?

答:还是 O(n²);

思考

思考 1

如下代码的时间复杂度是多少?

当i = 0 时,内循环就会执行 n 次

当i = 1 时,内循环就会执行 n - 1 次

当i = 2 时,内循环就会执行 n - 2 次

以此类推 ... ... 直到

当i = n - 2 时,内循环就会执行 2 次

当i = n - 1 时,内循环就会执行 1 次

大师,我悟了... ...😀😀😀 😀😀😀

结果也就是一个等差数列

也就是O(n²);

思考 2

当 n = 8时,代码执行了几步?

当 n = 16时,代码执行了几步?

答:T(8) = 3;

T(16) = 4;

代码执行步数有了,那么时间复杂度时多少?

发现代码执行步数取决于 i*=2

你悟了吗... ...

将T(n)放到等号的左边

然后去掉时间复杂度和常系数,故此得

log2n的底数和系数也要去掉,得

O(log n)

时间复杂度对比

1.O(1)

时间复杂度是一条直线

2.O(log n);

随着数据量越来越大,时间复杂度越来越小,最后趋向于一条直线

3.O(n)

时间复杂度随着数据量的增大而增大

4.O(n log n)

5.O(n²)

6.O(n³)

7.O(2^n)

总结:时间复杂度排序

由低到高如表

另外:

 

 文章说明:

文章是看的B站视频做的笔记,视频链接是

小学生也能看懂的时间复杂度(大概吧)_哔哩哔哩_bilibili

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值