1. 提高个人软实力,编码的地基, 程序 = 数据结构 + 算法
    1. 灯泡关闭问题
    2. 求出大于或等于N的最小回文素数
  2. 数据结构和程序设计的关系
    1. 数据结构是告诉算计算机如何存储组织数据
    2. 算法是告诉计算机如何运算数据
    3. 数据结构是程序设计的基础
  3. 避免成为CURD程序员
  4. 使代码性能更佳,锻炼思考能力,解决问题的能力,提高个人核心竞争力

如何学习数据和算法

  1. 由易到难,由浅入深,逐步建立自信
  2. 勤加练习,将每个算法从不同角度实现

数据结构的基本知识介绍

数据结构是指相互之间存在一种或多种特定关系的数据元素的集合
常见的数据结构类型
集合结构:数据元素之间没有任何关系,统一被放在集合的容器中
线性结构: 数据元素之间的关系是一对一的且是一种先后的次序
树形结构: 数据元素之间的关系是一对多
图形结构: 数据元素是多对多

算法常识

算法是一系列解决问题的清晰指令
算法的五大特性:

  1. 输入
  2. 输出
  3. 有穷性
  4. 确定性
  5. 可行性

时间复杂度
大O表示法的基本规则:

  1. 运行时间是常数级,用常数1表示
  2. 保留最高阶项
  3. 如果最高阶存在,则省去最高阶项前面的系数

常见的时间复杂度:

  1. O(1), 最优,执行时间不受数据多少的限制
  2. O(logN), 相当好,如二分查找算法
  3. O(n), 还不错, 执行时间等于元素个数
  4. O(nlognM), 还可以,如快速排序算法
  5. O(n^2), 有点慢,如双重for循环
  6. O(n^3), 特别慢, 如矩阵乘法
  7. O(2^n), 超级慢,添加一点数据就会将时间拖得特别长
  8. O(n!), 奇慢无比,如旅行商问题

时间复杂度是衡量一个算法好坏的重要指标
一般情况下,随着规模n的增大,次数T(n)的增长较慢的算法为最优算法
时间复杂度是指当前算法消耗的时间

空间复杂度
它是对一个算法运行过程中临时占用存储空间的大小
一般记做,S(n) = O(f(n))
固定部分,代码占用的空间,定义变量所占据的空间
可变部分, 动态分配的空间,递归栈所需的空间