
数据结构
文章平均质量分 77
算法
rootDream
小字母大世界
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
一致性hash算法(hash环)
一致性hash算法 1.前景(hash算法) 分布式缓存: 需求: 将图片均匀的分布到3台服务器上。 方案: 使用hash算法。 对于一个key,由客户端来决定存放到哪台机器,那最简单的hash公式就是 hash(key)% N,其中N是机器的总数。 使用原理:对于同一个图片,做hash计算,由图片的名称充当key,所以得到的值是不变的,所以可以通过hash值找到图片存储的具体位置。 缺陷: 一旦...原创 2020-02-22 22:40:29 · 596 阅读 · 0 评论 -
B树(B+Tree||B-Tree)
前景 列出的数据结构:数组,链表,哈希,红黑树,B树(B+tree,B-tree) mysql(InnoDB引擎)中索引所使用的数据结构。 1.排除数组,链表。 数组,链表不支持大量的数据存储,并且消耗内存。性能低。 2.排除哈希 hash函数只会计算出一个hash值。但是当user_id变化了,所产生的hash值也就变化了,就找不到具体数据记录。 而且不能支持联合索引中的部分索引查找。也不支持范...原创 2020-02-22 22:37:56 · 216 阅读 · 0 评论 -
红黑树入门篇
红黑树 前言: JDK1.7时,HashMap组成:数组+链表。到1.8后,推出了红黑树。 当链表长度超过阈值8,则会将链表转化为红黑树,当小于6时,就会将红黑树转化为链表。 由于二叉查找树的性能极低,所以红黑树自然而然就占据主要地位。 时间复杂度也就是树的深度。 链表(也称暴力O(n))->二叉树->二叉查找树(O(logn)~O(n))->特殊的二叉查找树(红黑树O(...原创 2020-02-22 22:36:07 · 775 阅读 · 0 评论 -
二叉搜索树入门篇
二叉搜索树 时间复杂度: O(logn)~O(n) 二叉搜索树又叫二叉查找树,二叉排序树; 特点: 如果它的左子树不为空,则左子树上结点的值都小于根结点。 如果它的右子树不为空,则右子树上结点的值都大于根节点。 情况1: 如果二叉树是平衡的。如下图所示: 例:查找到9需要进行3次比较。 时间复杂度为:O(logn) 情况2: 如果二叉树不平衡。如下图所示: 例:查找到9需要进行5次比较 ...原创 2020-02-22 22:32:19 · 309 阅读 · 0 评论 -
位图的实现(BitSet)
位图的实现(BitSet) 使用bloomfilter算法实现。可以解决缓存穿透问题。 思路:将数据库中表的键存储在bloomfilter中,前端访问该bloomfilter,若判断可能存在就放过,否则,直接返回非法访问。容错率不高,但也有效保证性能,将大量访问降低到少量访问。(防止黑客恶意攻击。) 问题: 怎么判断1亿 数据里面是否存在某个数据?要求算法的复杂度,控制在常数范围内! 14亿人身份...原创 2020-02-22 22:29:24 · 406 阅读 · 0 评论 -
hash算法之HashMap的原理
HashMap 时间复杂度: 效率最高:O(1) 1、为什么用HashMap? HashMap是一个散列桶(数组和链表),它存储的内容是键值对(key-value)映射HashMap采用了数组和链表的数据结构,能在查询和修改方便继承了数组的线性查找和链表的寻址修改HashMap是非synchronized,所以HashMap很快HashMap可以接受null键和值,而Hashtable则不能(原因...原创 2020-02-22 22:20:38 · 517 阅读 · 0 评论 -
二分查找和冒泡排序
二分查找(O(logn)) 注意:二分查找必须是有序的。 public static int BinarySearch(int[] arr,int value){ int min = 0,max = arr.length-1; while(true){ int mid = (min + max)/2; if(value > arr[mid]){ min = mi...原创 2020-02-22 22:15:36 · 272 阅读 · 0 评论