一. 初识数据结构
数据结构(Data Structure):是操作系统中组织数据的集合
算法:是解决某一类问题的思想,在特定数据结构上,一组输入按照特定的方式输出
数据结构是算法的基石. 如果把算法比作一位成功的蓝人,那么数据结构就是他背后默默付出支持他的铝人…
研究算法的最终目的就是如何花更少的时间,如何占用更少的内存去完成相同的需求
数据结构可以分为两大类:
-
逻辑数据结构:反映数据元素之间的逻辑关系,与数据在计算机中存储的位置无关
-
物理数据结构:逻辑数据在计算机中真正存储的形式
我们都知道,在计算机的内存中,是没有逻辑结构这一说,都是一块块内存单元,逻辑结构是为了能更好的理解和解决而问题而抽象出来的. 它在计算机中不存在,但是我们可以通过物理结构模拟出来
数据结构的组成方式:
- 线性结构 (数组,链表,栈,队列,哈希表)
- 树 (二叉树,红黑树,B+树,二叉堆)
- 图
- 其他数据结构 (哈希链表,位图)
算法应用的领域:
- 运算
- 查找
- 排序
- 最优决策
- 面试 (敲黑板了,这才是重点)
二. 时间复杂度和空间复杂度
衡量算法好坏的标准:
- 时间复杂度
- 空间复杂度
1. 时间复杂度
- 算法函数中的常数可以忽略;
- 算法函数中最高次幂的常数因子可以忽略;
- 算法函数中最高次幂越小,算法效率越高
常见时间复杂度的一个总结:
描述 | 增长的数量级 | 说明 | 举例 |
---|---|---|---|
常数级别 | 1 | 普通语句 | 两个数相加 |
对数级别 | logN | 二分策略 | 二分查找 |
线性级别 | N | 循环 | 找出最大元素 |
线型对数级别 | NlogN | 分治思想 | 归并排序 |
平方级别 | N^2 | 双层循环 | 检查所有元素对 |
立方级别 | N^3 | 三层循环 | 检查所有三元组 |
指数级别 | 2^N | 穷举查找 | 检查所有子集 |
时间复杂度从低到高依次为:
O(1) < O(logn) < O(n) < O(nlogn) < O(n^2) < O(n^3)
2. 空间复杂度分析
基本数据类型内存占用情况:
数据类型 | 内存占用字节数 |
---|---|
byte | 1 |
short | 2 |
int | 4 |
long | 8 |
float | 4 |
double | 8 |
boolean | 1 |
char | 2 |