数据结构和算法
文章平均质量分 91
常用数据结构和算法
每天都要进步一点点
工作日常技术学习、积累、总结
展开
-
一致性hash算法
目录一、什么是 Hash 算法二、一致性hash算法一、什么是 Hash 算法哈希算法将任意长度的二进制值映射为较短的固定长度的二进制值,这个小的二进制值称为哈希值。哈希值是一段数据唯一且极其紧凑的数值表示形式。这里我们举一个使用hash算法实现分布式文件存储的例子:有三张图片文件:a.jpg、b.jpg、c.jpg,三台服务器:编号分别是S0、S1、S2。假设我们采取如下的方式进行存储:图片名称作为key -> 计算hash值 -> 取模(服务器总数) ->原创 2021-03-20 11:36:56 · 570 阅读 · 0 评论 -
数据结构之红黑树插入案例详解
一、概述前面一篇文章介绍了红黑树插入的几种情况以及怎么自平衡操作,但是理论知识比较多,不好理解,今天我们用一个简单的示例总结一下前面的一些自平衡操作,包括变色、左旋、右旋等。二、红黑树插入案例【a】首先我们先准备一颗已经平衡的红黑树,如下图:原创 2020-11-17 20:19:58 · 1206 阅读 · 1 评论 -
数据结构之红黑树插入详解
一、概述红黑树是一颗二叉平衡树,并且查找不会破坏树的平衡,所以查找跟二叉平衡树的查找没有什么区别,可以看前面的文章进行学习,这里不再过多阐述。本节我们主要总结红黑树插入相关的知识。二、红黑树插入红黑树的插入包含两个步骤:在树中查找插入的位置;插入后自平衡;查找流程:从根节点开始查找;若根节点为空,那么插入节点作为根节点,结束;若根节点不为空,那么把根节点作为当前节点;若当前节点为null,返回当前节点的父节点,结束;若当前节点key等于查找key,那么该key所在节点就是插入节点原创 2020-11-16 20:44:25 · 5670 阅读 · 2 评论 -
数据结构之红黑树简介
一、红黑树定义红黑树是二叉查找树,二叉查找树这一数据结构并不难,而红黑树之所以难是难在它是自平衡的二叉查找树,在进行插入和删除等可能会破坏树的平衡的操作时,需要重新自处理达到平衡状态。红黑树是一种含有红色和黑色节点并能自平衡的二叉查找树,红黑树和其他二叉查找树类似,都是在进行插入和删除操作时通过特定操作保持二叉查找树的性质,从而获得较高的查找性能。它虽然是复杂的,但它的最坏情况运行时间也是非常良好的,并且在实践中是高效的:它可以在 O(log n) 时间内做查找,插入和删除,这里的 n 是树中元素的原创 2020-11-14 08:26:47 · 3521 阅读 · 0 评论 -
数据结构之B+树删除详解
一、概述B+树的删除规则:下面我们以上面插入构建的B+树做一些删除操作。【a】删除前B+树结构原创 2020-11-06 20:00:07 · 7603 阅读 · 7 评论 -
数据结构之B+树插入详解
一、简介B+树是B树的一种变形形式,一颗B+树包含根节点、内部节点和叶子节点,B+树上的叶子节点存储关键字以及相应记录的地址,叶子节点以上各层作为索引使用。一棵m阶的B+树定义如下:1)根结点最少包含1个关键字个数,最多包含m-1个关键字;2)B+树内部结点不保存数据,只用于索引,所有数据(或者说记录)都保存在叶子结点中;3)内部结点最少有ceil(m / 2) - 1个关键字,最多有m-1个关键字(或者说内部结点最多有m个子树);4)内部结点中的key都按照从小到大的顺序排列,对于内部结点原创 2020-11-06 19:57:05 · 16177 阅读 · 15 评论 -
数据结构之B树查找、插入、删除详解
一、概述B树,也称为B-树、B_树,它是一种多路平衡查找树,B树中所有节点的孩子节点数的最大值成为B树的阶,B树是在二叉搜索树的基础上演变过来的一种数据结构。一棵m阶B树(balanced tree of order m)是一棵平衡的m路搜索树。它或者是空树,或者是满足下列性质的树:树中每个节点至多有m颗子树,即每个节点最多可以有m-1个关键字(可以存放的键值对); 根节点最少有2颗子树,即至少含有1个关键字,最多可以有m - 1个关键字; 除了根节点以外的非叶子节点至少有【Math.cei原创 2020-10-31 21:03:34 · 5182 阅读 · 3 评论 -
数据结构之二叉查找树介绍
一、定义二叉查找树(Binary Search Tree),(也叫二叉搜索树,二叉排序树)。它或者是一棵空树。二叉查找树具有下列性质:若它的左子树不空,则左子树上所有结点的值均小于它的根结点的值;若它的右子树不空,则右子树上所有结点的值均大于它的根结点的值;它的左、右子树也分别为二叉排序树;下图就是一个标准的二叉查找树:原创 2020-10-24 21:15:23 · 649 阅读 · 0 评论 -
常见排序算法之插入排序
一、简介插入排序,就是假定一个参考值,假设该参考值左边的元素都有序,那么从该元素开始从后往前挨个查找,如果找到比参考值大的数,那么就将这个大的数后移,如果未找到比参考值大的数,说明不用移动元素。循环比较,这样经过比较后移之后就会空出下标为0的位置,用于存放这个参考值。二、排序思路排序思路:(假设从小到大)【1】 待排序数组: 5, 6, 3, 7, 2, 1【2】第一趟: 参考...原创 2018-10-17 21:46:26 · 5003 阅读 · 5 评论 -
常见排序算法之冒泡排序
一、简介Java中有几种常用的排序算法,比如冒泡排序、二分查找法排序、选择排序等等,本文将对冒泡排序做一个详细的讲解。冒泡排序,主要是比较两个相邻的元素,将值大的元素交换至右端。(假设从小到大排序) 。每进行一趟排序,就会少比较一次,因为每进行一趟排序都会找出一个较大值。二、排序思路排序思路:(假设从小到大排序)【1】、比较相邻的元素。如果第一个比第二个大(小),那么交换两者的...原创 2018-10-15 21:17:57 · 360 阅读 · 0 评论 -
常见排序算法之选择排序
一、简介选择排序,就是每一趟从待排序的序列中选出最小的元素,顺序放在已排好序的序列最后,直到全部序列排序完毕。简单理解就是假设一个最小值,将剩余的未排序的序列与假设的最小值进行比较,如果发现比假设的最小值还小的值,那么将它与假设的最小值调换位置。二、排序思路排序思路:(假设从小到大)【1】待排序数组: int[] array = {5, 6, 3, 7, 2, 1};【2】第1...原创 2018-10-16 16:26:20 · 571 阅读 · 0 评论 -
Java常见排序算法之快速排序详解
一、简介在上一篇文章,我们已经了解了二分查找的算法,今天所讲的快速排序算法就是依据二分法以及递归实现。快速排序采用分治的思想,首先在数组中选择一个基准点,然后从数组的两端扫描数组,设两个指示标志(low指向起始位置,hign指向末尾),首先从后半部分开始,如果发现有元素比该基准点的值小,就交换low和hign位置的值,然后从前半部分开始查找,发现有元素大于基准点的值,就交换low和hign位置...原创 2018-10-20 22:01:30 · 366 阅读 · 0 评论 -
Java常见算法之二分法查找算法详解
一、简介二分法查找,是在已经排好序的序列中,定义一个起始位置start(即序列第一个元素)和一个终止位置end(即序列最后一个元素),通过mid=(start+end)/2计算出中间位置,通过待查找元素与mid中间位置的元素进行比较,如果待查找元素比中间位置mid对应的值小,那么将end = mid -1(即将end结束位置移动到mid中间左边一个位置),如果比中间对应的值大,那么将start...原创 2018-10-19 21:55:43 · 7752 阅读 · 4 评论