数据结构
captxb
这个作者很懒,什么都没留下…
展开
-
2_哈夫曼树和哈夫曼算法
问题现在我们要对a,b,c,d,e,f,g 7个字符进行编码,一种笨办法就是每个字符都用3bit进行编码,这样7个字符可以表示为000, 001, 010, 011, 100, 101, 110按照上面的编码方式,如果a出现1次,b出现2次,c出现3次……那么这个文件一共要占(1+2+…+7) * 3 = 84bit这样编码固然解决了无歧义性的问题,但是如果我们把g编码为11...原创 2019-03-02 11:25:54 · 168 阅读 · 0 评论 -
1_B树和B+树
(1) 当树保存在磁盘上时,由于磁盘读写速度远远慢于CPU计算速度,所以要尽量减少磁盘IO次数,即便要更多计算的计算量也是值得的(2) 如果查找树保存在磁盘上,为了减少磁盘的IO次数,基本策略就是减少树的高度(如果一个磁盘块就能装下树的所有结点那就太好了),减少树的高度意味着增加每个结点的分叉个数(3) B树和B+树都是M叉平衡树B树(1) 定义M阶B树1° 根结点至少...原创 2019-03-02 20:57:13 · 214 阅读 · 0 评论 -
3_二叉堆与堆排序
首先现在有这么个需求:一堆元素依次加入一个队列,但是它们有权值,每次都让权值小的元素先出队。笨办法就是每次都顺序扫描所有元素,聪明的办法就是让队列在加入和离开元素时总保持有序;二叉堆就可以解决上面的问题,它的形状和二叉树一样,入队和出队操作都是O(logN)的,而且一个数组就搞定,不用像二叉树一样把每个元素的左右儿子都链接住,因为二叉堆是一棵__完全二叉树__接下来的说明都以小顶堆...原创 2019-03-04 09:33:25 · 143 阅读 · 0 评论 -
4_红黑树
参考资料什么是红黑树?面试必问!《数据结构:思想与实现》,翁惠玉,俞勇定义(0) 首先是一棵__二叉查找树__(1) 每个结点要么是红色,要么是黑色(2) 根结点一定是黑色(3) NULL结点是黑色(4) 每个红色结点的两个子节点必然是黑色推论:任意路径上不能出现连续的两个红色结点(5) 从__任意__一个结点到NULL结点的所有路径都包含相同数量的黑色结点推论1:如...原创 2019-03-08 19:51:38 · 243 阅读 · 0 评论 -
7_二叉树的非递归遍历
TreeNode类 class TreeNode { TreeNode left; TreeNode right; int value; public TreeNode(int value) { this.value = value; } }实现 class TraverseNonRecur...原创 2019-03-20 19:53:45 · 118 阅读 · 0 评论 -
8_ST表
全名叫Sparse Table这种数据结构针对的应用场景是数组固定、频繁查询一定范围内数组的最小/最大值。由于查询是频繁的,所以要考虑使用表来预存储信息。常规的想法是存储所有从i到k范围内的最小值,这样查询的时间复杂度是O(1),但是建表的时间复杂度是O(n^2)。那ST表的做法是想办法将建表复杂度从O(n2)降到O(nlogn)。为了完成这一操作,需要考虑将区间长度每次二分,这样就会...原创 2019-03-21 18:45:08 · 95 阅读 · 0 评论 -
10_二叉树的性质
对于一棵__非空__的二叉树,叶结点数目是度为2结点数目+1即,n0 = n2 + 1证明: 度为0(叶结点)、1、2的结点数目分别为n0, n1, n2 则 总结点数目 n = n0 + n1 + n2 设树枝数量为 b,除了根结点,每个结点都唯一的连接一个树枝,所以 b = n - 1 = n0 + n1 + n2 - 1; (1) 又每个度为2的结点产...原创 2019-04-06 21:22:50 · 94 阅读 · 0 评论 -
9_平方根分解和线段树(以LeetCode307为例)
Problem /* Given an integer array nums, find the sum of the elements between indices i and j (i ≤ j), inclusive. The update(i, val) function modifies nums by updating the element at i...转载 2019-04-01 17:25:14 · 251 阅读 · 0 评论