007【入门】时间复杂度和空间复杂度

本博客是观看b站左程云的课程所做的笔记,如需观看原视频请至b站搜索观看

前置知识:选择排序、冒泡排序、插入排序、等差数列
建议:不要跳过

  1. 常数操作,固定时间的操作,执行时间和数据量无关

  2. 时间复杂度,一个和数据量有关、只要高阶项、不要低阶项、不要常数项的操作次数表达式 举例:选择、冒泡、插入

  3. 严格固定流程的算法,一定强调最差情况!比如插入排序

  4. 算法流程上利用随机行为作为重要部分的,要看平均或者期望的时间复杂度,因为最差的时间复杂度无意义 用生成相邻值不同的数组来说明

  5. 算法流程上利用随机行为作为重要部分的,还有随机快速排序(【必备】课)、跳表(【扩展】课)
    也只在乎平均或者期望的时间复杂度,因为最差的时间复杂度无意义

  6. 时间复杂度的内涵:描述算法运行时间和数据量大小的关系,而且当数据量很大很大时,这种关系相当的本质,并且排除了常数时间的干扰

  7. 空间复杂度,强调额外空间;常数项时间,放弃理论分析、选择用实验来确定,因为不同常数操作的时间不同

  8. 什么叫最优解,先满足时间复杂度最优,然后尽量少用空间的解

  9. 时间复杂度的均摊,用动态数组的扩容来说明(等比数列、均摊的意义)

    并查集、单调队列、单调栈、哈希表等结构,均有这个概念。这些内容【必备】课都会讲

  10. 要用代码结构来判断时间复杂度,比如只有一个while循环的冒泡排序,其实时间复杂度0(N^2)

  11. 不要用代码结构来判断时间复杂度,比如:N/1+N/2+N/3++N/N,这个流程的时间复杂度是
    O( N ∗ l o g N N*logN NlogN),著名的调和级数

  12. 间复杂度只能是对算法流程充分理解才能分析出来,而不是简单的看代码结构!这是一个常见的错误!甚至有些算法的实现用了多层循环嵌套,但时间复杂度是O(N)的。在【必备】课程里会经常见到

  13. 常见复杂度一览:O(1)O( l o g N logN logN)O(N)O( N ∗ l o g N N*logN NlogN)O(N2)…O(NK)O(2N)…O(kN).O(N!)

  14. 时间复杂度非常重要,可以直接判断某个方法能不能通过一个题目,根据数据量猜解法,【必备】课都会讲

  15. 这套课会讲很多算法和数据结构,也会见到很多的时间复杂度的表达,持续看课即可

推荐自己观看视频,这一点不好写

1. 常数时间的操作

运算、寻址、hash函数

2. 时间复杂度

选择排序:

第一轮从N个数中选出最小的 N个

第二轮从N-1个数中选出最小的 N-1个

第N论从1个数中选出最小的 1个

时间复杂度[N + (N-1) + … + 1] = a * n 2 n^2 n2 + b * n + c => O( n 2 n^2 n2)

冒泡排序也类似

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值