leaf

MySQL——关于索引的总结

青春壹個敷衍的年華 提交于 2020-08-14 12:09:51
索引的优缺点    首先说说索引的 优点 :最大的好处无疑就算提高查询效率。有的索引还能保证数据的唯一性,比如唯一索引。   而它的 坏处 很明显:索引也是文件,我们在创建索引时,也会创建额外的文件,所以会占用一些硬盘空间。其次,索引也需要维护,我们在增加删除数据的时候,索引也需要去变化维护。当一个表的索引多了以后,资源消耗是很大的,所以必须结合实际业务再去确定给哪些列加索引。 索引的结构    再说说索引的基本结构。一说到这里肯定会脱口而出: B+树!了解B+树前先要了解二叉查找树和二叉平衡树。 二叉查找树 :左节点比父节点小,右节点比父节点大,所以二叉查找树的中序遍历就是树的各个节点从小到大的排序。 二叉平衡树 :左右子树高度差不能大于1。B+树就是结合了它们的特点,当然,不一定是二叉树。   为什么要有二叉查找树的特点?? 因为查找效率快,二分查找在这种结构下,查找效率是很快的。 那为什么要有平衡树的特点呢? 试想,如果不维护一颗树的平衡性,当插入一些数据后,树的形态有可能变得很极端,比如左子树一个数据没有,而全在右子树上,这种情况下,二分查找和遍历有什么区别呢?而就是因为这些特点需要去维护,所以就有了上面提到的缺点,当索引很多后,反而增加了系统的负担。   接着说B+树。 它的结构如下 :    可以发现,叶子节点其实是一个 双向循环链表 ,这种结构的好处就是

基于Python的决策树分类器与剪枝

允我心安 提交于 2020-08-14 07:08:04
作者|Angel Das 编译|VK 来源|Towards Data Science 介绍 决策树分类器是一种有监督的学习模型,在我们关心可解释性时非常有用。 决策树通过基于每个层次的多个问题做出决策来分解数据 决策树是处理分类问题的常用算法之一。 为了更好地理解它,让我们看看下面的例子。 决策树通常包括: 根节点 -表示被进一步划分为同质组的样本或总体 拆分 -将节点分为两个子节点的过程 决策节点 -当一个子节点根据某个条件拆分为其他子节点时,称为决策节点 叶节点或终端节点 -不进一步拆分的子节点 信息增益 -要使用一个条件(比如说信息最丰富的特征)来分割节点,我们需要定义一个可以优化的目标函数。在决策树算法中,我们倾向于在每次分割时最大化信息增益。在测量信息增益时,通常使用三种度量。它们是基尼不纯度、熵和分类误差 数学理解 为了理解决策树是如何发展的,我们需要更深入地了解在每一步中如何使用度量使信息增益最大化。 让我们举一个例子,其中我们有包含学生信息的训练数据,如性别、年级、因变量或分类变量,这些变量可以识别学生是否是美食家。我们有以下概述的信息。 学生总数-20人 被归为美食家的学生总数-10 不属于美食家的学生总数-10 P(美食家),即学生成为美食家的概率=(10/20)=0.5 Q(非美食家),学生不是美食家的概率=(10/20)=0.5

设计模式学习笔记(十一):组合模式

旧城冷巷雨未停 提交于 2020-08-14 03:33:44
1 概述 1.1 引言 对于树形结构,比如文件目录,一个文件夹中可以包含多个文件夹和文件,而一个文件中不能在包含子文件或者子文件夹,在这里可以称 文件夹为容器 ,称 文件为叶子 。 在树形结构中,当容器对象(比如文件夹)的某个方法被调用时,将遍历整个文件夹,寻找也包含这个方法的成员对象(容器对象或叶子对象)并调用执行。由于容器对象以及叶子对象在功能上的区别,使用这些对象的代码中必须有区别对待容器对象以及叶子对象,但大多数情况下需要一致性处理它们。 组合模式为解决此类问题而生,它可以让叶子对象以及容器对象的使用具有一致性。 1.2 定义 组合模式:组合多个对象形成树形结构以表示具有“整体-部分”关系的层次结构。组合模式对单个对象(叶子对象)和组合对象(容器对象)的使用具有一致性。 组合模式又叫“部分-整体”模式,它是一种对象结构型模式。 1.3 结构图 1.4 角色 Component (抽象构件):可以是接口或者抽象类,为叶子构件和容器构件对象声明接口,在该角色中可以包含所有子类共有行为的声明和实现。在抽象构件中定义了访问以及管理它的子构件的方法,例如增加/删除/获取子构件 Leaf (叶子构件):表示叶子节点对象,叶子节点没有子节点,它实现了在抽象构件中定义的行为,对于访问以及管理子构件的方法,通常会抛出异常 Composite (容器构件):表示容器节点对象,容器节点包含子节点

B+树介绍

旧城冷巷雨未停 提交于 2020-08-12 05:47:12
B+树 B+树和二叉树、平衡二叉树一样,都是经典的数据结构。 B+树由 B树 和 索引顺序访问 方法(ISAM,是不是很熟悉?对,这也是MyISAM引擎最初参考的数据结构)演化而来 ,但是在实际使用过程中几乎已经没有使用B树的情况了。 B+树的定义十分复杂,因此只简要地介绍B+树: B+树是为 磁盘 或 其他直接存取辅助设备 而设计的一种平衡查找树 ,在B+树中, 所有记录节点都是 按键值的大小顺序 存放在同一层的叶节点中, 各叶节点指针 进行连接 。 我们先来看一个B+树,其高度为2,每页可存放4条记录,扇出(fan out)为5。 可以看出,所有记录都在叶节点中,并且是顺序存放的,如果我们从最左边的叶节点开始顺序遍历,可以得到所有键值的顺序排序:5、10、15、20、25、30、50、55、60、65、75、80、85、90。 B+树的插入操作 B+树的插入必须保证插入后叶节点中的记录依然排序,同时需要考虑插入B+树的三种情况,每种情况都可能会导致不同的插入算法,如表5-1所示。 我们用实例来分析B+树的插入,我们插入28这个键值,发现当前Leaf Page和Index Page都没有满,我们直接插入就可以了。 这次我们再插入一条70这个键值,这时原先的Leaf Page已经满了,但是Index Page还没有满,符合表5-1的第二种情况,这时插入Leaf

强化学习(十一) Prioritized Replay DQN

我的未来我决定 提交于 2020-08-11 19:52:30
    在 强化学习(十)Double DQN (DDQN) 中,我们讲到了DDQN使用两个Q网络,用当前Q网络计算最大Q值对应的动作,用目标Q网络计算这个最大动作对应的目标Q值,进而消除贪婪法带来的偏差。今天我们在DDQN的基础上,对经验回放部分的逻辑做优化。对应的算法是Prioritized Replay DQN。     本章内容主要参考了ICML 2016的 deep RL tutorial 和Prioritized Replay DQN的论文<Prioritized Experience Replay>(ICLR 2016)。 1. Prioritized Replay DQN之前算法的问题     在Prioritized Replay DQN之前,我们已经讨论了很多种DQN,比如Nature DQN, DDQN等,他们都是通过经验回放来采样,进而做目标Q值的计算的。在采样的时候,我们是一视同仁,在经验回放池里面的所有的样本都有相同的被采样到的概率。     但是注意到在经验回放池里面的不同的样本由于TD误差的不同,对我们反向传播的作用是不一样的。TD误差越大,那么对我们反向传播的作用越大。而TD误差小的样本,由于TD误差小,对反向梯度的计算影响不大。在Q网络中,TD误差就是目标Q网络计算的目标Q值和当前Q网络计算的Q值之间的差距。     这样如果TD误差的绝对值$|

机器学习入门:极度舒适的GBDT原理拆解

亡梦爱人 提交于 2020-08-11 11:05:40
机器学习入门:极度舒适的GBDT拆解 本文旨用小例子+可视化的方式拆解GBDT原理中的每个步骤,使大家可以彻底理解GBDT Boosting → Gradient Boosting Boosting是集成学习的一种基分类器(弱分类器)生成方式,核心思想是通过迭代生成了一系列的学习器,给误差率低的学习器高权重,给误差率高的学习器低权重,结合弱学习器和对应的权重,生成强学习器。 Boosting算法要涉及到两个部分,加法模型和前向分步算法。 加法模型就是说强分类器由一系列弱分类器线性相加而成。一般组合形式如下: $$F_M(x;P)=\sum_{m=1}^n\beta_mh(x;a_m)$$ 其中,$h(x;a_m)$就是一个个的弱分类器,$a_m$是弱分类器学习到的最优参数,$β_m$就是弱学习在强分类器中所占比重,P是所有$α_m$和$β_m$的组合。这些弱分类器线性相加组成强分类器。 前向分步就是说在训练过程中,下一轮迭代产生的分类器是在上一轮的基础上训练得来的。也就是可以写成这样的形式: $$F_m (x)=F_{m-1}(x)+ \beta_mh_m (x;a_m)$$ Gradient Boosting = Gradient Descent + Boosting Boosting 算法(以AdaBoost为代表)用错分数据点来识别问题,通过调整错分数据点的权重来改进模型

自己动手写SQL执行引擎

徘徊边缘 提交于 2020-08-11 10:27:05
自己动手写SQL执行引擎 前言 在阅读了大量关于数据库的资料后,笔者情不自禁产生了一个造数据库轮子的想法。来验证一下自己对于数据库底层原理的掌握是否牢靠。在笔者的github中给这个database起名为Freedom。 整体结构 既然造轮子,那当然得从前端的网络协议交互到后端的文件存储全部给撸一遍。下面是Freedom实现的整体结构,里面包含了实现的大致模块: 最终存储结构当然是使用经典的B+树结构。当然在B+树和文件系统block块之间的转换则通过Buffer(Page) Manager来进行。当然了,为了完成事务,还必须要用WAL协议,其通过Log Manager来操作。 Freedom采用的是索引组织表,通过DruidSQL Parse来将sql翻译为对应的索引操作符进而进行对应的语义操作。 MySQL Protocol结构 client/server之间的交互采用的是MySQL协议,这样很容易就可以和mysql client以及jdbc进行交互了。 query packet mysql通过3byte的定长包头去进行分包,进而解决tcp流的读取问题。再通过一个sequenceId来再应用层判断packet是否连续。 result set packet mysql协议部分最复杂的内容是其对于result set的读取,在NIO的方式下加重了复杂性。

【学习笔记】字符串—广义后缀自动机

╄→尐↘猪︶ㄣ 提交于 2020-08-11 03:27:40
【学习笔记】字符串—广义后缀自动机 一:【前言】 最近一周都在研究 惊( Ren )艳( Lei )无( Zhi )比( Hui )、美( Li )妙( Xing )绝( Yu )伦( Yue ) 的自动机,这里引用 \(\text{bztMinamoto}\) 巨佬的一句话来表达此时的心情: 我感觉我整个人都自动机了…… —— \(bztMinamoto\) ( 回文自动机学习笔记 ) 在此过程中发现网上讲广义 \(\text{SAM}\) 的文章很少,而且很多都不正确,所以决定整理一下。 二:【引理】 众所周知, \(\text{SAM}\) 的一个经典应用是求一个字符串中本质不同子串数量,那么如果改为求一个 \(\text{Trie}\) 树呢? 刘研绎在 \(2015\) 的国家队论文中说过这样一句话: 大部分可以用后缀自动机处理的字符串的问题均可扩展到 \(Trie\) 树上。 我们将这种建立在 \(\text{Trie}\) 树上的 \(\text{SAM}\) 成为广义 \(\text{SAM}\) 。在学习之前,首先要确保对 单串 \(\text{SAM}\) 足够熟悉, 其实也可以简单理解为 多串 \(\text{SAM}\) 啦QAQ 三:【算法实现】 在用广义 \(\text{SAM}\) 处理多模式串问题时,网上流传着的主流写法有 \(3\) 种: \((1

java设计模式(十二)——组合模式

可紊 提交于 2020-08-11 00:08:09
1、基本概念 组合模式( Composite Pattern )也称为整体部分( Part-Whole )模式,它的宗旨是通过将单个 对象(叶子节点)和组合对象(树枝节点)用相同的接口进行表示,使得客户对单个对象和组合对象的 使用具有一致性,属于结构型模式。 组合模式是一种树结构,那么就知道生活中得案例了,比如 目录-文件,学校-年级-班级,公司-部门 组合模式分为透明模式和安全模式 2、类图和角色 2.1、透明模式 2.2、安全模式 两者的区别在于抽象组件Component只定义了一个必须实现的方法,这样叶子节点Leaf,就不会去调用无关的方法,比如addChild方法 角色·: 抽象根节点:Component 分支节点:Composite 叶子结点:Leaf 3、案例 案例:一个公司有两个部门行政部和开发部 行政部   后勤部   人力部 开发部   java开发   python开发   c开发 抽象根节点: public interface ICompany { void printDeptName(); } 树枝节点: public class Composite implements ICompany{ private List<ICompany> list = new ArrayList<> (); private String name; private

聚簇索引和非聚簇索引实际上是什么意思?

大城市里の小女人 提交于 2020-08-09 14:43:38
问题: I have a limited exposure to DB and have only used DB as an application programmer. 我对DB的接触有限,只使用DB作为应用程序程序员。 I want to know about Clustered and Non clustered indexes . 我想了解 Clustered 和 Non clustered indexes 。 I googled and what I found was : 我搜索了一下,发现的是: A clustered index is a special type of index that reorders the way records in the table are physically stored. 聚集索引是一种特殊的索引,它重新排序表中记录的物理存储方式。 Therefore table can have only one clustered index. 因此,表只能有一个聚集索引。 The leaf nodes of a clustered index contain the data pages. 聚集索引的叶节点包含数据页。 A nonclustered index is a special type of index in which