- 提高个人软实力,编码的地基, 程序 = 数据结构 + 算法
- 灯泡关闭问题
- 求出大于或等于N的最小回文素数
- 数据结构和程序设计的关系
- 数据结构是告诉算计算机如何存储组织数据
- 算法是告诉计算机如何运算数据
- 数据结构是程序设计的基础
- 避免成为CURD程序员
- 使代码性能更佳,锻炼思考能力,解决问题的能力,提高个人核心竞争力
如何学习数据和算法
- 由易到难,由浅入深,逐步建立自信
- 勤加练习,将每个算法从不同角度实现
数据结构的基本知识介绍
数据结构是指相互之间存在一种或多种特定关系的数据元素的集合
常见的数据结构类型
集合结构:数据元素之间没有任何关系,统一被放在集合的容器中
线性结构: 数据元素之间的关系是一对一的且是一种先后的次序
树形结构: 数据元素之间的关系是一对多
图形结构: 数据元素是多对多
算法常识
算法是一系列解决问题的清晰指令
算法的五大特性:
- 输入
- 输出
- 有穷性
- 确定性
- 可行性
时间复杂度
大O表示法的基本规则:
- 运行时间是常数级,用常数1表示
- 保留最高阶项
- 如果最高阶存在,则省去最高阶项前面的系数
常见的时间复杂度:
- O(1), 最优,执行时间不受数据多少的限制
- O(logN), 相当好,如二分查找算法
- O(n), 还不错, 执行时间等于元素个数
- O(nlognM), 还可以,如快速排序算法
- O(n^2), 有点慢,如双重for循环
- O(n^3), 特别慢, 如矩阵乘法
- O(2^n), 超级慢,添加一点数据就会将时间拖得特别长
- O(n!), 奇慢无比,如旅行商问题
时间复杂度是衡量一个算法好坏的重要指标
一般情况下,随着规模n的增大,次数T(n)的增长较慢的算法为最优算法
时间复杂度是指当前算法消耗的时间
空间复杂度
它是对一个算法运行过程中临时占用存储空间的大小
一般记做,S(n) = O(f(n))
固定部分,代码占用的空间,定义变量所占据的空间
可变部分, 动态分配的空间,递归栈所需的空间
