Algorithm
算法及数据结构
TheLudlows
这个世界上还有什么比自己写的代码运行在一亿的电脑上更酷的事情吗,如果有那就是让这个数字再扩大十倍。
展开
-
Decoding billions of integers per second through vectorization
在许多重要的应用程序例如搜索引擎和关系数据库系统中,数据以整数数组的形式存储。对这些数组进行编码,最重要的是解码会消耗大量的CPU时间。因此研究人员已经做出了巨大的努力来减少与压缩和减压相关的成本,特别的是已经开发出超标量的现代处理器和单指令多数据(SIMD)指令集。我们引入了一种新的向量化方案SIMD-BP128*,这比以前提出的向量化方法有所改进。它的速度几乎是varint-G8IU和PFOR在台式机处理器上最快的方案的两倍,同时SIMD- BP128*每个整数最多节省2位。为了获得更好的压缩效果,我们翻译 2020-03-12 18:20:45 · 1058 阅读 · 0 评论 -
谈谈Roaring Bitmap
BitMap/BitSet被广泛的应用于数据查询中,但其由于数据稀疏造成的内存浪费也不可忽视,因此对压缩BitMap的探索一直在进行,比较知名的有WAH、EWAH、Roaring Bitmap等。其中性能最好并且应用最为广泛的当属Roaring Bitmap,比如Spark、Lucene、Redis、Influxdb等著名项目中都可以看到Roaring Bitmap身影,下面就谈谈Roaring ...原创 2020-01-19 00:16:39 · 2157 阅读 · 1 评论 -
谈谈Bloom Filter
海量数据的过滤及去重,老生常谈的话题了。Bitmap和Bloom Filter是常见的结决办法。Bitmap的思路很单纯,一条数据是否存在只需要一个Bit就可以表示,因此一个Byte可以表示8条数据的布尔值,为每一个可能出现的值分配一个bit,一般Bitmap用来解决某个数字是否存在,这个数字就是Index。在JDK中的实现为BitSet,底层实现为long数组。Bitmap不做过多介绍,原理实...原创 2020-01-16 16:20:09 · 276 阅读 · 0 评论 -
图基础总结
图定义及概念图是由若干给定的顶点及连接两顶点的边所构成的图形,这种图形通常用来描述某些事物之间的某种特定关系。顶点用于代表事物,连接两顶点的边则用于表示两个事物间具有这种关系。图中只包含两种类型的元素:顶点(Vertex)和边(Edge),所以图可以由顶点集合和边集合进行表示,即:G=(V,E)G=(V,E)G=(V,E)。根据边是否具有方向,可以将图分为有向图和无向图两种。可以给边设置...原创 2019-11-30 12:34:14 · 378 阅读 · 0 评论 -
B-树和B+树总结
B-树与二叉查找树、红黑树等不同,B树适用于读写相对大的数据块的存储系统,B-tree算法减少定位记录时所经历的中间过程,从而加快存取速度。这种数据结构常被应用在数据库和文件系统的实作上。在红黑树中提到的2-3树、2-3-4树都属于B-tree,往往实际中使用的是阶数更高的B-tree。 阶 定义为最大数量的子节点树。一个 mmm阶的B树是一个有以下属性的树:每一个节点最多有 m 个子节...原创 2019-11-27 18:41:44 · 284 阅读 · 0 评论 -
红黑树
之前提到的自平衡二叉查找树,属于一种高度平衡的二叉查找树,对每个结点的平衡因子进行严苛的限制,所以 AVL 树能够提供 (log N) 的结点查询复杂度。也因为对每个结点的平衡因子限制较大,插入和删除结点时,需要进行很频繁的平衡调节操作。接下来谈到了2-3树,2-3树属于自平衡的树,查找复杂度最差(全部是2-结点)是logN,但由于其实现复杂度较高,并且额外对多种结点的维护带来的消耗可能导致这里...原创 2019-11-05 21:22:03 · 239 阅读 · 0 评论 -
2-3树
2-3树二叉搜索树的高度不确定,可能导致低查询效率,AVL尽管树相对平衡但是插入删除带来的较高的调整复杂度。2-3树尝试通过绝对平衡来寻找突破口,实际上是它具有较高的插入复杂度和实现复杂度,实际应用并不广泛。但2-3树衍生的红黑树在很多底层源码中都有应用。2-3树的定义及概念一颗2-3查找树或一颗空树由以下结点组成:2-结点,包含一个键,以及左右两个链接,分别指向的2-3树的键都小于/...原创 2019-10-31 22:19:31 · 420 阅读 · 0 评论 -
AVL树
二叉搜索树中查找和插入、删除的操作取决于树的高度,而树的高度又有不确定性,因此需要尽量让树平衡一些,即避免出现线性结构,因此出现了平衡二叉树。定义平衡二叉树也叫自平衡二叉搜索树(Self-Balancing Binary Search Tree)或者AVL树(提出者名字),其本质也是一颗二叉搜索树,不过为了限制左右子树的高度差,避免出现倾斜树等偏向于线性结构演化的情况,所以对二叉搜索树中每个结...原创 2019-10-31 22:13:14 · 193 阅读 · 0 评论 -
二叉搜索树
当用线性表作为表的组织形式时,可以有三种查找法。其中以二分查找效率最高。但由于二分查找要求表中结点按关键字有序,且不能用链表作存储结构,因此,当表的插入或删除操作频繁时,为维护表的有序性,势必要移动表中很多结点。这种由移动结点引起的额外时间开销,因此需要一种有一种较高的插入和删除效率,并且具备较高的查找效率的数据结构,二叉排序因此产生。定义二叉排序树,也称二叉搜索树(Binary Searc...原创 2019-10-31 22:07:31 · 535 阅读 · 0 评论