• 数据结构与算法系列一(开篇)


    1.引子

    1.1.为什么要学习数据结构与算法?

    有人说,数据结构与算法,计算机网络,与操作系统都一样,脱离日常开发,除了面试这辈子可能都用不到呀!

    有人说,我是做业务开发的,只要熟练API,熟练框架,熟练各种中间件,写的代码不也能“飞”起来吗?

    于是问题来了:为什么还要学习数据结构与算法呢?

    #理由一:
        面试的时候,千万不要被数据结构与算法拖了后腿
    #理由二:
        你真的愿意做一辈子CRUD Boy吗
    #理由三:
        不想写出开源框架,中间件的工程师,不是好厨子

    1.2.如何系统化学习数据结构与算法?

    我想好了,还是需要学习数据结构与算法。但是我有两个困惑:

    1.如何着手学习呢?

    2.有哪些内容要学习呢?

    学习方法推荐:

    #学习方法
    1.从基础开始,系统化学习
    2.多动手,每一种数据结构与算法,都自己用代码实现出来
    3.思路更重要:理解实现思想,不要背代码
    4.与日常开发结合,对应应用场景

    学习内容推荐:

    数据结构与算法内容比较多,我们本着实用原则,学习经典的、常用的数据结构、与常用算法

    #学习内容:
    1.数据结构的定义
    2.算法的定义
    3.复杂度分析
    4.常用数据结构
        数组、链表、栈、队列
        散列表、二叉树、堆
        跳表、图
    5.常用算法
        递归、排序、二分查找
        搜索、哈希、贪心、分治
        动态规划、字符串匹配

    2.考考你

    #考考你:
    1.你能用自己的话给数据结构下定义吗?
    2.你能用自己的话给算法下定义吗?
    3.你知道复杂度分析吗?
    4.你知道时间复杂度分析吗?
    5.你知道空间复杂度分析吗?
    6.你知道大O表示法的含义吗?

    3.讨论分享

    #考考你答案:
    1.你能用自己的话给数据结构下定义吗?
      1.1.数据结构,就是【存储数据】的结构
      1.2.比如:图书馆将书籍分类、按照规律编号存储
      1.3.那么按照规律编号,就是“书籍数据”的存储结构
      
    2.你能用自己的话给算法下定义吗?
      2.1.算法,就是【操作数据】的方法
      2.2.比如:你要找书,一本一本的找是算法
      2.3.比如:你要找书,根据书籍的分类找也是算法
    
    3.你知道复杂度分析吗?
      3.1.数据结构与算法核心二字决:快、省
      3.2.快,是指执行效率要高
      3.3.省,是指消耗的空间要少
      3.4.通过复杂度分析,可以衡量算法的执行效率
      3.5.通过复杂度分析,可以衡量算法的空间消耗
    
    4.你知道时间复杂度分析吗?
      4.1.【时间】复杂度分析,用于衡量算法的执行效率
      
    5.你知道空间复杂度分析吗?
      5.1.【空间】复杂度分析,用于衡量算法的空间消耗
    
    6.你知道大O表示法的含义吗?
      6.1.大O表示法:时间复杂度,表示数据规模的增长,与算法执行时间的增长趋势
      6.2.大O表示法:空间复杂度,表示数据规模的增长,与算法存储空间的增长趋势
      6.3.大O表示法公式:T(n)=O(f(n))
      6.4.公式解读:
        T(n):代表代码执行时间
        n:代表数据规模
        f(n):代表每行代码执行的次数总和
        O:表示代码执行时间T(n),与代码执行次数f(n)成正比
        
      6.5.栗子:
      public int sum(int n){
        int sum = 0;
        for(int i=1;i<=n;i++){
          sum +=i;
        }
        
        return sum;
       }
       a.以上代码时间复杂度是:O(n)
       b.大O表示法公式:T(n)=O(f(n))
       c.由于f(n)是一个线性函数,推导出:T(n)=O(n)
  • 相关阅读:
    .NET反编译工具:de4dot
    Hadoop API:遍历文件分区目录,并根据目录下的数据进行并行提交spark任务
    hive优化之——控制hive任务中的map数和reduce数
    Spark:将RDD[List[String,List[Person]]]中的List[Person]通过spark api保存为hdfs文件时一直出现not serializable task,没办法找到"spark自定义Kryo序列化输入输出API"
    spark算子:combineByKey
    spark分区数,task数目,core数,worker节点个数,excutor数量梳理
    spark算子:partitionBy对数据进行分区
    算子:sample(false, 0.1)抽样数据
    hive:默认允许动态分区个数为100,超出抛出异常:
    Oracle ADDM性能诊断利器及报告解读
  • 原文地址:https://www.cnblogs.com/itall/p/12330199.html
Copyright © 2020-2023  润新知