数据结构
文章平均质量分 83
xushiyu1996818
这个作者很懒,什么都没留下…
展开
-
Redis数据结构 Bitmap
Bitmap:位图是支持按 bit 位来存储信息,可以用来实现布隆过滤器(BloomFilter);原创 2021-11-13 13:36:50 · 611 阅读 · 0 评论 -
Redis数据结构 list与quickList
目录压缩列表转化成双向链表条件双向链表linkedlist压缩列表ziplistziplist节点entry结构ziplist连锁更新问题quickListquickList数据结构list是如何实现阻塞队列的?ziplist和linkedlist 编码下的list,列表操作命令底层实现不同注意:本文参考Redis列表list 底层原理 - 知乎在版本3.2之前,Redis 列表list使用两种数据结构作为底层实现:压缩列表ziplist双向链表lin..原创 2021-11-12 23:26:23 · 252 阅读 · 0 评论 -
Redis数据结构 GeoHash
Geospatial:可以用来保存地理位置,并作位置距离计算或者根据半径计算位置等。有没有想过用Redis来实现附近的人?或者计算最优地图路径?这三个其实也可以算作一种数据结构,不知道还有多少朋友记得,我在梦开始的地方,Redis基础中提到过,你如果只知道五种基础类型那只能拿60分,如果你能讲出高级用法,那就觉得你有点东西。...原创 2021-11-12 23:28:52 · 1201 阅读 · 0 评论 -
Redis数据结构 布隆过滤器
目录布隆过滤器简介布隆过滤器是什么布隆过滤器的使用场景布隆过滤器原理解析布隆过滤器的使用布隆过滤器的基本用法布隆过滤器代码实现自己简单模拟实现手动实现参考使用 Google 开源的 Guava 中自带的布隆过滤器注意:本文参考 Redis(5)——亿级数据过滤和布隆过滤器布隆过滤器简介HyperLogLog 对大数据进行一个估算,它非常有价值,可以解决很多精确度不高的统计需求。但是如果我们想知道某一个值是不是已经在 HyperLogLog 结构里面了,..原创 2021-11-12 23:29:42 · 214 阅读 · 0 评论 -
leetcode-208-实现Trie (前缀树)-java
题目及测试package pid208;/* 实现 Trie (前缀树)实现一个 Trie (前缀树),包含 insert, search, 和 startsWith 这三个操作。示例:Trie trie = new Trie();trie.insert("apple");trie.search("apple"); // 返回 truetrie.search("app"); // 返回 falsetrie.startsWith("app"); // 返回 true原创 2020-06-29 11:51:25 · 208 阅读 · 0 评论 -
leetcode-146-LRU缓存机制-java
题目及测试package pid146;/* LRU缓存机制运用你所掌握的数据结构,设计和实现一个 LRU (最近最少使用) 缓存机制。它应该支持以下操作: 获取数据 get 和 写入数据 put 。获取数据 get(key) - 如果关键字 (key) 存在于缓存中,则获取关键字的值(总是正数),否则返回 -1。写入数据 put(key, value) - 如果关键字已经存在,则变更其数据值;如果关键字不存在,则插入该组「关键字/值」。当缓存容量达到上限时,它应该在写入新数据之前删除原创 2020-06-28 14:13:02 · 222 阅读 · 0 评论 -
并查集总结-java版
目录并查集简介建立并查集(初始化)建立关系查找root与路径压缩算法代码与测试并查集简介并查集的功能如下:如果a和b是舍友,b和c是舍友,则我们认定a和c也是舍友(当然在离散数学中这是错误的,为了引入我们假定自己和自己也是舍友)。也就是说有n个人,给出m个元组(a,b)表示a和b是舍友,现在有许多查询:请你判断任意两个人之间是否有舍友关系。复杂度来讲,建立和查询...原创 2019-12-12 14:25:41 · 155 阅读 · 0 评论 -
一致性哈希总结-java版
为什么要有一致性哈希在分布式系统中,节点的宕机、某个节点加入或者移出集群是常事。对于分布式存储而言,假设存储集群中有10台机器(node),如果采用传统Hash方式对数据分片(item)(即数据根据哈希函数映射到某台机器上存储),哈希函数应该是这样的:hash(item) % 10。根据上面的介绍,当node数发生变化(增加、移除)后,数据会被重新“打散”,导致大部分数据不能落到原来的节点上,...原创 2019-05-08 16:22:06 · 383 阅读 · 0 评论 -
渐进式哈希总结
目录为什么要有渐进式哈希简介原理数据结构Rehash何时开始Rehash过程Rehash结束Rehash详细步骤Rehash过程中的查找,新增图解准备开始rehashrehash过程中rehash结束为什么要有渐进式哈希我们知道当hash表满员时(或负载因子高于阈值时)会进行rehash,也就是重新调整空间大小,并拷贝原来的数据。这里re...原创 2019-05-09 14:25:40 · 3546 阅读 · 8 评论 -
布隆过滤器(Bloom Filter)总结-java版
目录为什么要有布隆过滤器简介基本原理是否支持删除误判率哈希函数个数和布隆过滤器长度复杂度空间时间优缺点优点缺点BloomFilter和BItMap的区别应用java实现Hash工具类BitSet类BloomFilter测试为什么要有布隆过滤器在日常生活中,包括在设计计算机软件时,我们经常要判断一个元素是否在一个集合...原创 2019-05-07 14:59:52 · 2369 阅读 · 0 评论 -
kmp算法总结-java版
目录部分匹配表(PMT)(Next数组)介绍通俗介绍数学介绍推导出next数组使用next数组进行字符串匹配测试部分匹配表(PMT)(Next数组)介绍通俗介绍有些算法,适合从它产生的动机,如何设计与解决问题这样正向地去介绍。但KMP算法真的不适合这样去学。最好的办法是先搞清楚它所用的数据结构是什么,再搞清楚怎么用,最后为什么的问题就会有恍然大悟的感觉。我试着从...原创 2019-04-16 16:49:03 · 405 阅读 · 0 评论 -
图的最短路径算法-java版
目录最短路径Floyd(弗洛伊德)算法简介算法思想样例复杂度Dijkstra算法简介算法思想样例复杂度java实现图的基础代码Floyd算法dijkstra算法测试最短路径所谓最短路径问题是指:如果从图中某一顶点(源点)到达另一顶点(终点)的路径可能不止一条,如何找到一条路径使得沿此路径上各边的权值总和(称为路径长度)达到最小...原创 2019-05-27 11:56:54 · 13760 阅读 · 0 评论 -
2-3树与2-3-4树总结-java版
目录2-3树简介插入删除2-3-4树简介插入删除2-3树简介2-3树是一棵自平衡的多路查找树,它并不是一棵二叉树,具有如下性质:(1)每个节点有1个或2个key,对应的子节点为2个子节点或3个子节点;(2)所有叶子节点到根节点的长度一致;(3)每个节点的key从左到右保持了从小到大的顺序,两个key之间的子树中所有的key一定大于它的父节点的...原创 2019-05-30 13:46:17 · 397 阅读 · 1 评论 -
图的最小生成树总结-java版
目录最小生成树简介最小生成树算法Prim算法基本思想例子Kruskal算法基本思想例子java实现基础代码Prim算法Kruskal算法最小生成树简介在一个任意连通图G中,如果取它的全部顶点和一部分边构成一个子图G',即:V(G')=V(G)和E(G')⊆E(G)若同时满足边集E(G')中的所有边既能够使全部顶点连通而又不形成任何回路,则...原创 2019-05-24 11:23:54 · 3761 阅读 · 1 评论 -
哈希(散列,Hash)算法总结-java版
目录哈希算法简介哈希算法的分类加法Hash位运算Hash乘法Hash除法Hash查表Hash混合Hash常用的哈希算法直接寻址法数字分析法平方取中法折叠法随机数法除留余数法流行的哈希算法MD4MD5SHA及其他碰撞性哈希算法在java中的使用ObjectIntegerLongStringHa...原创 2019-05-08 11:13:54 · 2326 阅读 · 0 评论 -
B树,B+树,B*树总结-java版
目录前言B树简介用阶定义的B树用度定义的B树B树关键字的定义结构查找树的创建插入删除B树的高度B+树简介B+树相对于B树的优点查找插入删除B*树简介增加三种树的总结前言动态查找树主要有:二叉查找树(Binary Search Tree),平衡二叉查找树(Balanced Binary Search Tr...原创 2019-04-30 17:05:34 · 931 阅读 · 0 评论 -
线段树总结-java版
目录为什么要有线段树简介得到min的线段树样例java实现合成器线段树测试为什么要有线段树下面我们从一个经典的例子来了解线段树,问题描述如下:从数组arr[0...n-1]中查找某个数组某个区间内的最小值,其中数组大小固定,但是数组中的元素的值可以随时更新。对这个问题一个简单的解法是:遍历数组区间找到最小值,时间复杂度是O(n),额外的空间复杂度O(1...原创 2019-05-20 11:23:04 · 2824 阅读 · 3 评论 -
LSM树(日志结构合并树)总结-java版
目录为什么要有LSM树数据库存储引擎索引的底层结构BTree的随机写特点LSM树的诞生背景简介LSM树与B树的差异LSM树优化LSM树基本原理LevelDB中的LSMHBase中的LSM树图解插入查找删除为什么要有LSM树数据库存储引擎索引的底层结构哈希存储引擎是哈希表的持久化实现,支持增、删、改以及随机读取操作,但不支持顺序...原创 2019-05-16 11:45:01 · 5556 阅读 · 1 评论 -
图的存储结构与实现总结-java版
目录图的存储结构邻接矩阵邻接表两者区别图的java实现顶点边图测试图的存储结构图的存储结构主要分两种,一种是邻接矩阵,一种是邻接表。邻接矩阵图的邻接矩阵存储方式是用两个数组来表示图。一个一维数组存储图中顶点信息,一个二维数组(邻接矩阵)存储图中的边或弧的信息。设图G有n个顶点,则邻接矩阵是一个n*n的方阵,定义为:看一个实例,下图...原创 2019-05-21 15:34:36 · 4027 阅读 · 0 评论 -
默克尔树(Merkle Tree)总结
目录为什么要有默克尔树简介Merkle Tree的特点图解创建树检索-文件夹比较检索-防伪更新插入删除应用数字签名P2P网络可信计算区块链-简单验证支付为什么要有默克尔树Hash是一个把任意长度的数据映射成固定长度数据的函数[2]。例如,对于数据完整性校验,最简单的方法是对整个数据做Hash运算得到固定长度的Hash值,然后把得到的H...原创 2019-05-16 16:42:14 · 14867 阅读 · 2 评论 -
图的遍历(深度优先,广度优先)总结-java版
目录图的遍历简介广度优先搜索算法算法的思想算法实现的思想算法的复杂度深度优先搜索算法算法的思想算法实现的思想算法的复杂度java实现图的基础java代码广度优先算法深度优先算法测试图的遍历简介图的遍历是指从图中的任一顶点出发,对图中的所有顶点访问一次并且只访问一次。图的遍历是图的一种基本操作,图中的许多其他操作也都是建立在遍历的基础之...原创 2019-05-22 11:49:25 · 4231 阅读 · 0 评论 -
图的拓扑排序总结-java版
目录AOV网拓扑排序简介拓扑排序算法java实现拓扑排序测试AOV网AOV网表示一个有向图中顶点,用弧表示顶点之间的优先关系。如下图所示,在AOV网中,若从顶点vi到顶点vj之间存在一条有向路径,则称顶点vi为顶点vj的前驱,顶点vj为顶点vi的后继。注意,AOV图不能有回路,否则会将序列陷入死循环,称为死锁。拓扑排序简介所谓拓扑排序,其实就是对一...原创 2019-05-22 17:05:45 · 1360 阅读 · 0 评论 -
跳表(跳跃表,skipList)总结-java版
目录为什么要有跳表搜索:从链表到跳表跳表简介跳表的实现节点类跳表的结构搜索插入删除打印整个跳表测试跳表整个java代码跳表复杂度时间空间高度为什么要有跳表目前经常使用的平衡数据结构有:B树,红黑树,AVL树,Splay Tree, Treep等。想象一下,给你一张草稿纸,一只笔,一个编辑器,你能立即实现一颗红黑树,或...原创 2019-05-05 17:29:57 · 954 阅读 · 0 评论 -
二叉树 工具类 java (创建,前中后序遍历,层次打印,广度优先深度优先遍历)
树的节点类package datastructure.binarytree;public class TreeNode { int val; public TreeNode left; public TreeNode right; public TreeNode(int x) { val = x; left=null; right=null; }}二叉树...原创 2018-09-26 11:11:06 · 1110 阅读 · 0 评论 -
普通的二叉搜索树总结+java实现
目录二叉搜索树的概念结构节点类二叉搜索树类实现-增删查插入节点创建二叉搜索树搜索节点删除节点应用搜索排序完整代码二叉搜索树的概念二叉搜索树(Binary Search Tree)节点放置:任何节点的键值一定大于其左子树的每一个节点的键值,并小于其右子树的每一个节点的键值。因此,找出BST树的最大元素和最小元素,就是从根节点一直往左走,...原创 2018-12-13 15:01:30 · 273 阅读 · 0 评论 -
AVL平衡二叉树总结+java实现
目录普通二叉搜索树的问题AVL树定义AVL树和节点的结构AVL树高度计算方法AVL树旋转LL 右旋转RR 左旋转LR 左旋右旋RL 右旋左旋平衡节点插入节点删除节点查找最大最小节点删除完整代码主程序叶节点avl树普通二叉搜索树的问题普通二叉树(二叉查找树)在操作的时间复杂度上不一定遵循O(㏒n),也有可能是O(n),...原创 2018-12-17 14:41:50 · 356 阅读 · 0 评论 -
红黑树总结+java实现
目录红黑树定义红黑树特性红黑树内部结构叶子节点红黑树旋转左旋右旋插入case 0case 1 case4case 2case 3case 5case 6插入代码查找删除红黑树性质回顾删除节点类型不可能存在的情形(只有左子树或只有右子树)图解删除红色节点删除黑色节点删除黑色叶子节点情况1:待删除节点D...原创 2019-04-24 11:51:50 · 444 阅读 · 2 评论 -
前缀树(字典树)总结-java版
目录前缀树的概述前缀树的应用场景前缀树的java实现节点前缀树(增加,查询字符串数量,查询前缀数量)测试与DFA查询敏感词的类似与不同类似不同前缀树的概述前缀树又名字典树,单词查找树,Trie树,是一种多路树形结构,是哈希树的变种,和hash效率有一拼,是一种用于快速检索的多叉树结构。典型应用是用于统计和排序大量的字符串(但不仅限于字符串),所以经...原创 2019-04-17 15:01:21 · 2893 阅读 · 0 评论 -
后缀树总结-java版
目录后缀树简介字典树(前缀树)的概念后缀树的概念构造后缀树两种方法在平方时间内构件后缀树线性时间建立后缀树的理论直接在后缀树上操作 自动更新叶节点当新后缀出现在原先后缀树中线性时间建立后缀树的实现后缀树的应用后缀树简介字典树(前缀树)的概念可以参考 https://blog.csdn.net/xushiyu1996818/art...原创 2019-04-22 16:00:27 · 871 阅读 · 0 评论 -
环形缓冲器(ring buffer,圆形队列)总结-java版
目录为什么要有环形缓冲器简介区分缓冲区是否为满的策略总是保持一个存储单元为空使用数据计数镜像指示位java实现为什么要有环形缓冲器当有大量数据的时候,我们不能存储所有的数据,那么计算机处理数据的时候,只能先处理先来的,那么处理完后呢,就会把数据释放掉,再处理下一个。那么,已经处理的数据的内存就会被浪费掉。因为后来的数据只能往后排队,如果要将剩余的数据都往前移动一...原创 2019-05-15 16:31:48 · 6638 阅读 · 3 评论