1.学习数据结构的意义
1>数据量巨大
2>人对于大量数据使用意识增加
3>计算机算力的提升,计算一次的时间0.2~0.3ns
4>合理规划数据在数据层面保持对数据高度可观的操作性
2.常见的时间复杂度
1>概念:x是数据量,x>1且x足够大,要想达到某种数据操作目的而需要的计算次数,就是时间复杂度
2>
时间复杂度排序o(1)<o(logn)<o(n)<o(nlogn)<o(n^2)
3>
o(1) 按索引值查找
o(n) 按数组值查找
o(logn) 二分查找、折半查找 每次查找剩余之前一半的数 x/2^n
4>常见的数据结构
数组(有序、无序)
链表(有序、无序)有序链表不能用于折半查找
栈(先进后出)队列(先进先出)
树
*无序树
完全树(对应数组)
满树
哈夫曼树(最优二叉树,应用场景用于压缩)
*有序树(左子树的值要比根节点小,右子树的值要比根节点大,相等的左右都可以放,不具有这个特点的叫无序树)
平衡树
红黑树(近似二叉平衡树)
B类树(多叉平衡树)B树 B+树
非平衡树(如何转平衡树)
*图
无向图
有向图
有向带权图
5>常见的数据结构增删改查的时间复杂度
6>非平衡树如何转平衡树
遍历方式
广度遍历
深度遍历:先序遍历
中序遍历
后序遍历
先序 12 8 4 1 6 7 10 19 15 17 24 21 31
中序 1 4 6 7 8 10 12 15 17 19 21 24 31
后序 1 7 6 4 10 8 17 15 21 31 24 19 12
中序遍历有序树可以得到有序序列
哈夫曼树 哈夫曼编码
1.路径和路径长度:从根节点到后代节点的道路称为路径,通路当中分支节点的个数称为路径长度,若规定根节点的层数为1,则从根节点到第L层节点的长度为 L-1
2.节点的权:若树中节点赋给一个有着某种意义的数值,就叫这个节点的权
3.带权路径长度:从根节点到该节点的路径长度与该节点的权的乘积
4.树的带权路径长度:树中所有叶子节点带权路径之和,记作WPI,权值越大的节点离根节点越近的二叉树就是最优二叉树,也叫哈夫曼树。
例如 13 8 7 3构造哈夫曼树
选最小的3和7加起来做10和8一层
以此类推……每次挑最小的两个组成一棵树,两个数的和作为根加入数组中进行新的构造。
i love baoding and dog
空格:4
o:3
d:3
a:2
n:2-
g:2
i:2
l:1
v:1
e:1
b:1