今天看数据库,书中提到:由于索引是采用 B 树结构存储的,所以对应的索引项并不会被删除,经过一段时间的增删改操作后,数据库中就会出现大量的存储碎片, 这和磁盘碎片.内存碎片产生原理是类似的,这些存储碎片不仅占用了存储空间,而且降低了数据库运行的速度.如果发现索引中存在过多的存储碎片的话就要进行 “碎片整理”了,最方便的“碎片整理” 手段就是重建索引, 重建索引会将先前创建的索引删除然后重新创建索引,主流数据库管理系统都提供了重建索引的功能,比如 REINDEX.REBUILD 等,如果使用的数据…
我们这个专题介绍的动态查找树主要有: 二叉查找树(BST),平衡二叉查找树(AVL),红黑树(RBT),B~/B+树(B-tree).这四种树都具备下面几个优势: (1) 都是动态结构.在删除,插入操作的时候,都不需要彻底重建原始的索引树.最多就是执行一定量的旋转,变色操作来有限的改变树的形态.而这些操作所付出的代价都远远小于重建一棵树.这一优势在<查找结构专题(1):静态查找结构概论 >中讲到过. (2) 查找的时间复杂度大体维持在O(log(N))数量级上.可能有些结构在最差的情况下效率将…
B树: B+树 1) B+-tree的磁盘读写代价更低 B+-tree的内部结点并没有指向关键字具体信息的指针.因此其内部结点相对B 树更小.如果把所有同一内部结点的关键字存放在同一盘块中,那么盘块所能容纳的关键字数量也越多.一次性读入内存中的需要查找的关键字也就越多.相对来说IO读写次数也就降低了. 个盘快.当需要把内部结点读入内存中的时候,B 树就比B+ 树多一次盘块查找时间(在磁盘中就是盘片旋转的时间). 2) B+-tree的查询效率更加稳定 由于非终结点并不是最终指向文件内容的结点,而…
题目描述 有一棵树,每个结点有一个灯(初始均是关着的).每个灯能对该位置和相邻结点贡献1的亮度.现有两种操作: (1)将一条链上的灯状态翻转,开变关.关变开: (2)查询一个结点的亮度. 数据规模:\(1 \le n,q \le 10^5\) 简要题解 对于这种题,很容易想到任意指定一个根转化为有根树,每个结点维护值\(a_i\)表示它的所有儿子的贡献之和,这样再加上自己以及父亲的贡献就能回答一个询问了. 然而经过一波思考发现问题在于链修改时根本没法维护\(a_i\).因此需要用链修改时的常规操…
题目分析: 好题.本来是一道好的非套路题,但是不凑巧的是当年有一位国家集训队员正好介绍了这个算法. 首先考虑静态的情况.这个的DP方程非常容易写出来. 接着可以注意到对于异或结果的计数可以看成一个FWT的过程,进一步地可以注意到FWT在中途没有还原的必要.从FWT的过程中我们可以发现FWT具有可加性和交换律结合律. 这样原问题可以在静态的情况下通过树形DP做到$O(nm)$. 考虑动态的问题.根据<神奇的子图>命题报告及其拓展中描述的算法五,我们应该不难想到基于树链剖分的这样的做法. 首先对树…
线段树分裂 以某个键值为中点将线段树分裂成左右两部分,应该类似Treap的分裂吧(我菜不会Treap).一般应用于区间排序. 方法很简单,就是把分裂之后的两棵树的重复的\(\log\)个节点新建出来,单次时间复杂度严格\(O(\log n)\). 至于又有合并又有分裂的复杂度,蒟蒻一直不会比较有说服力的证明,直到看见SovietPower巨佬的题解 对于只有合并:合并两棵线段树的过程,是找到它们\(x\)个重合的节点的位置,并将它们合并,而对于不重合的节点会跳过. 注意到合并与分裂类似互逆过程,…
题目描述 给定一棵n个点的有根树,编号依次为1到n,其中1号点是根节点.每个节点都被染上了某一种颜色,其中第i个节点的颜色为c[i].如果c[i]=c[j],那么我们认为点i和点j拥有相同的颜色.定义depth[i]为i节点与根节点的距离,为了方便起见,你可以认为树上相邻的两个点之间的距离为1.站在这棵色彩斑斓的树前面,你将面临m个问题.每个问题包含两个整数x和d,表示询问x子树里且depth不超过depth[x]+d的所有点中出现了多少种本质不同的颜色.请写一个程序,快速回答这些询问. 输入…
目录 表达式树练习实践:C# 运算符 一,算术运算符 + 与 Add() - 与 Subtract() 乘除.取模 自增自减 二,关系运算符 ==.!=.>.<.>=.<= 三,逻辑运算符 &&.||.! 四,位运算符 &.|.^.~.<<.>> 五,赋值运算符 六,其他运算符 表达式树练习实践:C# 运算符 在 C# 中,算术运算符,有以下类型 算术运算符 关系运算符 逻辑运算符 位运算符 赋值运算符 其他运算符 这些运算符根据参数…
B+树比B树更适合实际应用中操作系统的文件索引和数据库索引 为什么选择B+树作为数据库索引结构?   背景 首先,来谈谈B树.为什么要使用B树?我们需要明白以下两个事实: [事实1]不同容量的存储器,访问速度差异悬殊.以磁盘和内存为例,访问磁盘的时间大概是ms级的,访问内存的时间大概是ns级的.有个形象的比喻,若一次内存访问需要1秒,则一次外存访问需要1天.所以,现在的存储系统,都是分级组织的.最常用的数据尽可能放在更高层.更小的存储器中,只有在当前层找不到,才向更低层.更大的存储器中寻找.这也…
一.简介 xgboost在集成学习中占有重要的一席之位,通常在各大竞赛中作为杀器使用,同时它在工业落地上也很方便,目前针对大数据领域也有各种分布式实现版本,比如xgboost4j-spark,xgboost4j-flink等.xgboost的基础也是gbm,即梯度提升模型,它在此基础上做了进一步优化... 二.损失函数:引入二阶项 xgboost的损失函数构成如下,即一个经验损失项+正则损失项: \[Cost(y,F_{m-1},f_m)=\sum_{i=1}^n L(y_i,F_{m-1}(x…