![](https://img-blog.csdnimg.cn/20190918140037908.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
算法
文章平均质量分 75
算法
life1024
这个作者很懒,什么都没留下…
展开
-
一致性hash算法实现数据库分库操作
关于一致性hash原理请参看https://liuhuiyao.blog.csdn.net/article/details/106523561一致性hash的原理,是构造一个hash环,设置X个节点,节点按从小到大排序,如果此时要值A映射到hash环,则找到大于A的第一个hash环节点即可。如此,就可以动态增加删除hash环上的节点。只有少部分的映射关系会改变。但是有个问题就是hash环的节点分布如何保证均衡。可以使用虚拟节点。模拟基于一致性Hash分库代码import j..原创 2020-07-28 12:40:11 · 954 阅读 · 0 评论 -
bitmap 算法的实现 与作用
问题引入有一个无序有界int数组{1,2,5,7},初步估计占用内存44=16字节,因为只有4个数,很容易,可以很快找到需要的数。但是假如有10亿个这样的数呢,10亿个不重复并且没有排过序的无符号的int整数,给出一个整数,找出给定的某个数,你该如何操作?需求分析:Int类型在Java中的存储占用4个Byte,32Bit。10亿4/(102410241024)=3.72G左右。如果这样的一个大的数据做查找和排序,那估计内存也崩溃了,有人说,这些数据可以不用一次性加载,那就是要存盘了,存盘必然消耗IO原创 2020-07-28 12:00:50 · 619 阅读 · 0 评论 -
最少使用LRU算法实现
原理使用HashMap和双向链表实现每次新增数据时加到链表尾部,每次查询时移动到链表尾部。头部是最少使用的,尾部是最近使用的。数据满后,删除头部的数据。代码实现import java.util.HashMap;/** * 简单LRU实现,当新增数据时,如果链表长度大于预设值的最大值,则删除最少使用的。 * 链表尾部最近或者最多使用的数据,而头部则是最少使用数据 * @Description: * @author: lhy * @date: 20...原创 2020-07-28 11:50:47 · 208 阅读 · 0 评论 -
布隆过滤器
布隆过滤器。选择多个哈希函数 对一个字符串xxx进行映射到数组的不同位置。如果这些位置下标都有值(不为空),则说明这个字符串在数组中存在的几率越大。如果用这个几个哈希函数算出的位置 其中有一个为空,则一定能说明此字符串肯定不存在什么是布隆过滤器本质上布隆过滤器是一种数据结构,比较巧妙的概率型数据结构(probabilistic data structure),特点是高效地插入和查询,可以用来告诉你 “某样东西一定不存在或者可能存在”。相比于传统的 List、Set、Map 等数据结构,.转载 2020-06-04 10:00:13 · 368 阅读 · 0 评论 -
原码反码补码 与 位移运算总结(Java)
在计算机系统中,数值一律用补码来表示和存储。原因在于,使用补码,可以将符号位和数值域统一处理;同时,加法和减法也可以统一处理以下代码基于javajava 中数字做位运算时,都会补全32位(Short也是),如果强转为Long类型则会用64位。以下以-4,4为例 ,长度以32位为准。关于:原码,反码,补码(有符号位)java 输出-4或4的补码。正数4的原码=0(28个0)100正数的 原码=反码=补码负数注意:转换过程中:最高位符号位始终位置不变值也不变。反.原创 2020-06-10 11:18:22 · 395 阅读 · 0 评论 -
二叉搜索树、平衡二叉树、B树、B+树、B*树
二叉查找树二叉查找树,由于不平衡,如果连续插入的数据是有顺序的、会导致如下图B的所示,此时搜索会退化到O(N) 二叉查找树,也称二叉搜索树,或二叉排序树。其定义也比较简单,要么是一颗空树,要么就是具有如下性质的二叉树:(1)若任意节点的左子树不空,则左子树上所有结点的值均小于它的根结点的值;(2) 若任意节点的右子树不空,则右子树上所有结点的值均大于它的根结点的值;(3) 任意节点的左、右子树也分别为二叉查找树;(4) 没有键值相等的节点。 如上图所示,是不同形态的二叉查原创 2020-06-03 14:40:05 · 364 阅读 · 0 评论