算法
文章平均质量分 64
ai_xiangjuan
这个作者很懒,什么都没留下…
展开
-
在线性时间内查询一组数的最大子向量和
线性时间求一组数的最大子向量和原创 2017-11-06 13:01:22 · 143 阅读 · 0 评论 -
一致性哈希算法
一致性哈希的基本概念其实,一致性哈希算法也是使用取模的方法,只是,刚才描述的取模法是对服务器的数量进行取模,而一致性哈希算法是对2^32取模,什么意思呢?我们慢慢聊。首先,我们把二的三十二次方想象成一个圆,就像钟表一样,钟表的圆可以理解成由60个点组成的圆,而此处我们把这个圆想象成由2^32个点组成的圆,示意图如下: 圆环的正上方的点代表0,0点右侧的第一个点代表1,以此类推,2...转载 2018-03-31 17:51:22 · 133 阅读 · 0 评论 -
LSM -Log Structured Merge Trees 算法原理
为什么需要LSM算法LSM被设计来提供比传统的B+树或者ISAM更好的写操作吞吐量,通过消去随机的本地更新操作来达到这个目标。 设计LSM算法的本质是:磁盘随机操作慢,顺序读写快。磁盘随机操作与顺序操作存在这巨大的差距,无论是磁盘还是SSD。 上图很好的说明我们要避免随机读写,最好设计成顺序读写。 如果我们对写操作敏感,最好的办法是采用顺序写,将数据直接添加到文件。这种策略通常被使用...原创 2018-02-25 21:34:36 · 625 阅读 · 0 评论 -
piece table 数据结构
介绍piece table数据结构是文本编辑器软件中最常用的数据结构。微软的doc文档的数据结构就使用的piece table。 piece table非常适合用于可以撤销的文本编辑。piece table使用两个buffer。 第一个buffer存放文件的初始内容,它的大小是固定的,内容只是可读的,不可编辑的。 第二个buffer是可变的并且没有上界,可以无限的append内容。所...原创 2018-02-23 23:03:48 · 3328 阅读 · 0 评论 -
自平衡树--伸展树(Splay Tree)
Splay Tree介绍BST树的插入、查询、删除的最大时间为O(n),此种情况出现在整个树伸展成只有一个分支。但是自平衡的AVL树和红-黑树的最大时间为O(logn)。 在计算机中。我们经常遇到一个问题:就是80%的访问只仅仅使用20%的数据。我们想在O(1)的时间内能访问到这20%的数据。这就是Splay Tree的主要使用场景,splay tree会把最近访问的项作为tree的跟节点,原创 2018-01-28 20:15:23 · 388 阅读 · 0 评论 -
Gap buffer -- 一个数据结构为可编辑的文本
介绍如果我们想要实现一个文件编辑器,可以高效的支持文本的插入和删除。首先我们不得不解决一个问题,就是文件编辑器中的文本如何存放。使用数组、链表还是别的数据结构。本文从原始数组开始,介绍Gap Buffer存放文本数据的高效实现。文本编辑器原始的数组实现如果我们把文件编辑器的文本存放到一个char类型的数组中。如下面的文本: char[] buffer = ['h','e','原创 2018-02-04 20:29:40 · 1874 阅读 · 0 评论 -
Rope --高效字符串处理数据结构
介绍一个Rope 数据结构用来高效的处理字符串的拼接、查询、删除、及随机访问。Rope的一个典型应用场景是:在一个文本编辑程序里,用来保存较长的文本字符串。如下图,字符串“Hello_my_name_is_Simon”的表示 从上图可以看出,一个Rope 是一个二叉查找树,叶节点包含了的是字符串的子串。非页节点包含的是权重 = 左子树叶节点的所有字符和。一个字符串被分隔为两个部分,左子树原创 2018-02-04 19:54:21 · 5767 阅读 · 1 评论 -
自平衡树-AVL树
介绍AVL树是一个自平衡的二叉查找树,此树的任意左子树与右子树的高度差不会超过1。 如:下图一是一个AVL树,而图二不是AVL树。 为什么需要AVL树BST树一些基本操作像insert,search,max,min最坏的情况下需要O(n),其中n是节点个数。我们如何保证在每次插入后,对树的一些基本操作在最坏情况下保持在O(logn)的范围。这时就需要一个新的树,我们本节介绍原创 2018-01-23 22:36:38 · 737 阅读 · 0 评论 -
btree 实现
btree的使用场景在巨型数据集中,查找是一项非常耗时的操作。我们希望设计一种这样的数据结构,通过简单的4-5指向数据块的引用就能查找到巨型数据集中我们想要的数据。这时,btree就诞生了。我们以前学习的高效查找结构,如红黑树等,适用于能够存放到内存中的数据。btree主要用于对磁盘或者网络上的数据的查找。如mysql 的存储引擎myisam就是btree的实现。b-树的数据结构原创 2018-01-07 23:10:06 · 986 阅读 · 0 评论 -
线段树--Segment Tree
数据结构的特点线段树是一种二叉搜索树,与区间树相似,它将一个区间划分成一些单元区间,每个单元区间对应线段树中的一个叶结点。对于线段树中的每一个非叶子节点[a,b],它的左儿子表示的区间为[a,(a+b)/2],右儿子表示的区间为[(a+b)/2+1,b]。因此线段树是平衡二叉树,最后的子节点数目为N,即整个线段区间的长度。图例说明代码实现(以求区间和为例)构原创 2018-01-03 23:06:19 · 321 阅读 · 0 评论 -
堆 算法实现
堆算法实现原理原创 2017-11-26 22:54:51 · 2039 阅读 · 0 评论 -
算法运行时间n3,n2, n, nlogn对比
算法运行时间,立方算法、平方算法、线性时间的时间对比原创 2017-11-26 19:54:33 · 5676 阅读 · 0 评论 -
二分搜索应用二
从一组有序数组中查找目标元素第一次出现的位置,二分搜索原创 2017-11-01 09:26:51 · 199 阅读 · 0 评论 -
如何实现一个文章中 Ctrl+F的搜索
文档中Ctrl+F原理,倒排索引原创 2017-10-30 22:47:05 · 2467 阅读 · 0 评论 -
洗牌算法shuffle
介绍洗牌算法大致有3种,按发明时间先后顺序如下:Fisher–Yates Shuffle算法思想就是从原始数组中随机抽取一个新的数字到新数组中。算法英文描述如下:Write down the numbers from 1 through N.Pick a random number k between one and the number of unstruck numbe...转载 2018-05-05 23:44:55 · 283 阅读 · 0 评论