数据结构和算法是什么
数据结构:数据之间的结构关系
算法:对数据的操作
数据结构+算法=程序设计
好的数据结构+好的算法=好的程序设计
数据结构之拆解
数据结构之逻辑结构-->逻辑上组织关系:线性,树形,图形,集合
数据结构之物理结构-->物理上存储结构:顺序存储,链式存储
ps:物理上的存储指的是在内存的存储结构,磁盘的数据组织一般由文件结构来描述
算法之拆解
算法即解决问题的方法,有输入有输出,有动作(CRUD)。
好的算法总的来说即时间效率高和存储量低,时间效率就是指的时间复杂度,存储量就是指的空间复杂度。
1. 时间复杂度,一般用大O表示法来描述:
按数量级递增依次为: O(1) < O(logn) < (n) < O(nlogn) < O(n^2) < O(n^3) < O(2^n) < O(n!) < O(n^n)
2. 空间复杂度:大数据领域中的bitmap存储法 算是对空间复杂度的算法的一个拆解吧。
经典的数据结构-逻辑结构-线性
1. 数组:在一个规整的内存中存储一些列数据
2. 链表:在内存的任何地方都可以存储
3. 散列:数组+链表
他们的RUD如下图
经典的数据结构-逻辑结构-树
- 二叉查找树(Binary Search Tree):image如下图,存在 不平衡导致退化成线性结构的问题
红黑树(Red Black Tree):基于BST,通过以下规则以达到平衡的目的。
Hashmap在1.8之后采用的底层数据结构为红黑树1)每个结点要么是红的,要么是黑的。
2)根结点是黑的。
3)每个叶结点(叶结点即指树尾端NIL指针或NULL结点)是黑的。
4)如果一个结点是红的,那么它的俩个儿子都是黑的。
5)对于任一结点而言,其到叶结点树尾端NIL指针的每一条路径都包含相同数目的黑结点。
B树(Balance Tree):二叉查找树结构由于树的深度过大而造成磁盘I/O读写过于频繁,进而导致查询效率低下,所以诞生了这种平衡的多叉树
B+树:B树的升级版,常用于mysql等数据库的索引的底层实现。
数组与平衡二叉树基于时间复杂度的对比
经典的算法
- 二分查找–>迭代
- 分治—–>递归
・・・