
数据结构
文章平均质量分 91
souy_c
这个作者很懒,什么都没留下…
展开
-
分布式散列表(DHT)及具体实现Kademlia(kad)/Chord
分布式散列列表主要是⽤用于分布式系统(此时,分布式系统的节点可以通俗理理解为散列列表中的 bucket),分布式散列列表主要是⽤用来存储⼤大量量的(甚⾄至是海海量量的)数据。在实际使⽤用场景中,直接对所存储的“每⼀一个业务数据”计算散列列值,然后用散列列值作为 key,业务数据本身是 value。原创 2022-12-12 23:43:13 · 4029 阅读 · 0 评论 -
SARC 预读算法
SARC: Sequential Prefetching in Adaptive Replacement Cache1.1 常见问题 (1)、同步预读引发的未命中问题最简单的顺序预读策略是同步预取,在顺序读轨迹数据块n未命中时会触发将数据块n至n + m带入高速缓存中,其中m被称为顺序预读度,并且是可调参数。考虑使用m = 1的众所周知的一个块预读方案。该方案将连续未命中的次数减少了1/2。概括地说,通过m个数据块的的预读,连续未命中的数量减少了1 /(m + 1)。为了仅通过使用同步预取来..原创 2021-05-12 19:18:22 · 870 阅读 · 1 评论 -
布隆过滤器与布谷鸟过滤器
大家都知道,在计算机中,IO一直是一个瓶颈,很多框架以及技术甚至硬件都是为了降低IO操作而生,今天聊一聊过滤器,先说一个场景:我们业务后端涉及数据库,当请求消息查询某些信息时,可能先检查缓存中是否有相关信息,有的话返回,如果没有的话可能就要去数据库里面查询,这时候有一个问题,如果很多请求是在请求数据库根本不存在的数据,那么数据库就要频繁响应这种不必要的IO查询,如果再多一些,数据库大多数IO都在响应这种毫无意义的请求操作,那么如何将这些请求阻挡在外呢?过滤器由此诞生!布隆过滤器:布隆过滤器(Bl原创 2021-05-12 17:46:07 · 465 阅读 · 0 评论 -
对数的性质和基本运算
对数的概念:一般地,如果那么数X叫做以a为底N的对数。记做:,其中a叫做对数的底数,N叫做真数。需要注意的是底数a的限制条件:。对数的形式(1)、常用对数:以10为底的对数记做:(2)、自然对数:以无理数e=2.71828…为底数的对数简记为:(3)、一般对数:对数运算:1、基本性质: (1)、1的对数是0:(2)、 对数恒等式:2、运算法则: 设定a>0,M>0,N>0(1)、(2)、(3)、...原创 2020-09-05 14:07:28 · 16735 阅读 · 0 评论 -
字符串匹配之RKHash算法
对于任意一个串,串中字符集的大小为d,则该串中的任意一个字符都可以用一个d+1进制的整数来表示。需要注意的是,这里是d+1进制,而不是d进制,是因为不能用0来表示任意一个字符,否则如果该字符组成串的一个前缀,无论前缀的长度多少,都不会影响串所对应的整数取值。Rabin-Karp算法,它是字符串快速查找的一种算法,解决思路是把一个字符串,看作是字符集长度进制的树,如果是ASCII,这个进制就是128,如果是只考虑英文小写字母,那这个进制就是26,通过数值的比较得出字符串的比较结果。如果我们要在 ASC原创 2020-07-20 08:56:05 · 306 阅读 · 0 评论 -
字符串匹配之KMP算法
相关概念:前缀:指的是字符串的子串中从原串最前面开始的子串,如abcd的前缀有:a,ab,abc,后缀:指的是字符串的子串中在原串结尾处结尾的子串,如abcd的后缀有: d,cd,bcdnext数组:next[i]表示的是前i的字符组成的这个子串前缀和后缀相等的最长串的长度!举个例子:例如字符串abcadefabca的前缀后缀相等的有a和abca,那么其中最长的就是abca。使用Next求解:例如:A="abecdeabceadeabceab "B="eabceab"先手动计原创 2020-07-20 08:55:36 · 334 阅读 · 0 评论 -
深入理解GO语言:map结构原理和源码分析
Map结构是go语言项目经常使用的数据结构,map使用简单对于数据量不大的场合使用非常合适。Map结构是如何实现的?我们先从测试程序入手,我们希望分析map的创建、插入、查询、删除等流程,因此我们的测试程序就要包括这几种操作,测试程序如下://Test.goimport ( "fmt")func main() { testmap()}func testmap() { fmt.Printf("testmap start \n") var test1 ma原创 2020-05-11 10:42:10 · 940 阅读 · 2 评论 -
重温经典:堆排序
堆排序是利用堆的性质进行排序的过程。堆排序包括构成初始堆和利用堆排序这两个过程,堆分成大根堆和小根堆,这里我们使用大根堆来展开讨论。例如我们有如下一组数据和其对应的完全二叉树:{35、10、17、40、39、9、50、44、16、26} 构成初始堆就是把待排序的元素序列{R0~Rn},按照堆的定...原创 2020-05-05 23:21:28 · 679 阅读 · 0 评论 -
重温经典:快速排序
快速排序(quick sorting)又称为划分排序。快速排序是对气泡排序的一种改进,在气泡排序中,进行元素的比较和交换式是在相邻的单元中进行,每次只能前移或者后移一个位置,因而总的比较和移动次数较多。在快速排序中,记录的比较和交换是从两端向中间进行,较大的元素一次就可以交换到后面。快速排序的过程可以叙述为:首先从待排序区间(A[0]~A[n-1])中选取一个元素(一般选取该区间第一个元素)作...原创 2020-05-05 23:14:13 · 363 阅读 · 0 评论 -
数据结构:二叉树、平衡二叉树、红黑树的原理差异和性能分析
树是数据结构中的重中之重,尤其以各类二叉树又是其中的难点,二叉树种类繁多实现各异,我们主要讲常见的二叉树。1、二叉树二叉树是指树的度为2的一种树。满二叉树:在一棵二叉树中,当第i层的节点个数为2^(i-1)时称此层是满的,当树中每一层都是满的时称此树是满二叉树。完全二叉树:在一棵树中,除最后一层外,若其余层都是满的,并且最后一层或是满的,或是在最右侧缺少连续若干个节点。此时该树称为...原创 2020-05-02 23:51:59 · 1479 阅读 · 0 评论 -
MD5 算法原理
MD5即Message-Digest Algorithm 5(信息-摘要算法5),用于确保信息传输完整一致。是计算机广泛使用的杂凑算法之一(又译摘要算法、哈希算法),主流编程语言普遍已有MD5实现。1、MD5算法简介MD5在90年代初由MIT的计算机科学实验室和RSA Data Security Inc发明,经MD2、MD3和MD4发展而来。MD5将任意长度的“字节串”变换成一个128...原创 2019-06-20 17:49:55 · 3790 阅读 · 0 评论 -
数据结构:B树、B+树数据结构及操作代码实现
B树的定义:B树(B-tree)是一种树状数据结构,它能够存储数据、对其进行排序并允许以O(log n)的时间复杂度运行进行查找、顺序读取、插入和删除的数据结构。B树结构如下:其中,m是B树的阶,m>=3,par是指向父节点指针。K1,K2...Kn是从小到大顺序排列的关键字。n是变化的:(1),对于非树根节点:m/2-1 (2),对于根节点:1原创 2020-04-29 19:15:39 · 2937 阅读 · 0 评论