《数据结构与算法之美》笔记 -复杂度分析

本文都是复制粘贴,非原创。看原创请移步极客时间-王争-数据结构与算法之美。如侵权,请及时私信通知。

2018-09-27 09:54:00
数据结构指的是“一组数据的存储结构”,算法指的是“操作数据的一组方法”。数据结构是为算法服务的,算法是要作用再特定的数据结构上的。

学什么
  1. 效率和资源消耗的度量衡–复杂度分析。
  2. 最常用、最基础的20个数据结构与算法,学习他们的:“来历”、“特点”、“适合解决什么问题”和“实际的应用场景”。
    数据结构(10):数组、链表、栈、队列、散列表、二叉树、堆、跳表、图、Tire树
    算法(10): 递归、排序、二分查找、搜索、哈希算法、贪心算法、分治算法、回溯算法、动态规划、字符串匹配算法
怎么学
  1. 边学边练,每周花 1~2 小时集中攻关三节课涉及的数据结构和算法,全部写出来。
  2. 主动提问、多思考、多互动。在留言区增加自己的留言。
  3. 自我激励,每次学习完做一篇学习笔记。
  4. 沉下心不要浮躁,先把这些基础的数据结构和算法,还有学习方法熟练掌握后,再追求更高层次。

2018-09-27 10:49:21

为什么要有复杂度分析
  1. 由于要求软件在计算的过程中速度快,内存小
  2. 所以分别对执行时间占用空间两个维度进行性能评估。
  3. 于是创造了时间复杂度空间复杂度两个概念来描述性能问题,统称复杂度
  4. 复杂度描述的是算法执行时间(或占用空间)与数据规模的增长加速度
复杂度分析比事后统计法的优势
  1. 不依赖执行环境、成本低、效率高、易操作、指导性强。
  2. 编写出性能更优的代码,有利于降低系统开发和维护成本。
如何进行复杂度分析
  1. 大O表示法
    1)来源
    算法的执行时间与每行代码的执行次数成正比,用T(n) = O(f(n))表示,其中T(n)表示算法执行总时间,f(n)表示每行代码执行总次数,而n往往表示数据的规模。
    2)特点
    时间复杂度为例,由于时间复杂度描述的是算法执行时间与数据规模的增长变化趋势,常量阶、低阶以及系数实际上对这种增长趋势不产决定性影响,所以忽略。
    时间复杂度不是速度,是加速度。
  2. 复杂度分析法则
    1)单段代码看高频:比如循环。
    2)多段代码取最大:比如一段代码中有单循环和多重循环,那么取多重循环的复杂度。
    3)嵌套代码求乘积:比如递归、多重循环等
    4)多个规模求加法:比如方法有两个参数控制两个循环的次数,那么这时就取二者复杂度相加。
常用的复杂度级别

多项式阶:随着数据规模的增长,算法的执行时间和空间占用,按照多项式的比例增长。包括
O(1)(常数阶)、O(logn)(对数阶)、O(n)(线性阶)、O(nlogn)(线性对数阶)、O(n2)(平方阶)、O(n3)(立方阶)
非多项式阶:随着数据规模的增长,算法的执行时间和空间占用暴增,这类算法性能极差。包括O(2^n)(指数阶)、O(n!)(阶乘阶)

如何掌握好复杂度分析方法

多练。。。


吐槽应该划掉:
为什么学习数据结构?因为我学的是面向工资的编程。

猜你喜欢

转载自blog.csdn.net/rabbitbride/article/details/82862758
今日推荐