![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
数据结构
国平's BLOG
这个作者很懒,什么都没留下…
展开
-
B树最大高度推导
文章目录B树最大高度推导推导B树的最小高度推导最大高度B+树:MySQL数据库索引是如何实现的?1. 遇到问题2. 尝试用学过的数据结构解决这个问题3. 改造二叉查找树4. 索引的弊端B树最大高度推导【声明几个重要概念】B树的关键字就是要查找的东西B树中的 阶:可理解为分支数. 三阶树也可理解三叉树按照定义:m阶B tree,每个节点最多有 m 个subnode,除根节点和叶子节点外,...原创 2019-12-31 20:51:32 · 9756 阅读 · 3 评论 -
在时间复杂度为nlogn下读取文件求逆序对
问题:对于一个包含N个非负整数的数组A[1…n],如果有i < j,且A[ i ]>A[ j ],则称(A[ i] ,A[ j] )为数组A中的一个逆序对。例如,数组(3,1,4,5,2)的逆序对有(3,1),(3,2),(4,2),(5,2),共4个。给定一个数组,求该数组中包含多少个逆序对。要求时间复杂度为nlog(n)package ho1;import java...原创 2019-10-27 21:50:03 · 287 阅读 · 0 评论 -
线索二叉树
在学习线索二叉树之前,我们先来看看为什么要学习?我们希望通过线索二叉树解决什么问题?在如下的二叉树中,在我们遍历到5时,如果我们突然想知道前面的是什么,这是不能做到的,我们只能再次重头遍历才可以。在如图的链式二叉树里,中间的是节点的权,左右分别为指针域,我们发现,这样叶子节点实际上有点浪费,比如4,5两端的指针就被浪费了。但既然有指针空余,而我们由可以由后一个节点找到前一个节点,那么...原创 2019-02-16 17:25:47 · 157 阅读 · 0 评论 -
赫夫曼压缩图解(一)
QQ不能直接传送文件夹,我们一般都会将它压缩成一个文件之后再发过去,而这里面用到的压缩技术,怎样实现的呢?今天就来介绍一种最基本的压缩编码方式——赫夫曼编码一:赫夫曼树概述在说赫夫曼之前先说明三个概念:1.1路径长度: 从树中的一个结点到另一个结点叫做一条路径,例如下图A的路径从根节点开始是2。1.2 叶节点的带权路径:权值(节点的值)乘以路径例如A点的带权路径为:9*2=181....原创 2019-02-18 16:24:42 · 472 阅读 · 0 评论 -
八种排序之三:十分钟明白为什么希尔排序完虐直接插入排序
本文使用最通俗易懂的语言和插图让大家明白为什么希尔排序比直接插入排序效率高。对于这样一个数组:如果我们要插入一个元素2 ,在直接插入排序中是依次对比,比2 大的元素挨个向后移动。直接插入排序的问题就在此:如果在后面来了一个特别小的元素,需要全部移动,那么排序的效率特别低。接下来我们介绍一种更加高效率的插入排序方法:希尔排序我们摒弃那些繁琐的概念,直接通过例子来直观的学习:对于这样一个...原创 2019-02-12 12:08:06 · 5926 阅读 · 5 评论 -
八种排序算法之五:选择排序
简单选择排序:此方法比较简单,我们先可以观看演示算法,自己体会其中精妙之处。http://www.atool.org/sort.php我们发现:通过对比,找到一个较小的数字,把它标记一下,当全部对比完成,找出最小的数字,把这个数字移到最前面去,这个数字不动了。接着再找剩余最小的数字,移到第二个位置。第N次计较,把找出的最小数字和第N 个数字交换。通过两层循环就可以实现:packag...原创 2019-02-12 15:52:33 · 236 阅读 · 0 评论 -
赫夫曼压缩图解(二)
接上文四 :创建编码表并进行解码4.1编码的三种方式及其优劣4.1.1定长编码:定产编码是将字符转为ASCII码,转为八位二进制,但我们很容易发现,这句话并不长,但是传输信息却需要396位,那么我们怎么传输信息压缩一下呢?4.1.2非定长编码:我们发现这一句话中很多字母是重复的,那么我们是不是可以把出现次数也编码进去,出现次数多的编码长度就短一些,出现次数少的编码长度就长一些,这就...原创 2019-02-18 18:01:26 · 254 阅读 · 0 评论 -
八种排序算法之二:快速排序
public static void quicksort(int[] arr,int start,int end){ //把数组中第0个作为标准数 int stard = arr[start]; //记录两个移动的坐标(两个小2兵) //记录需要拍下的下标,刚开始是所有 //底的往高走,高的往低走 int low = start; int high = e...原创 2019-02-10 06:51:05 · 234 阅读 · 0 评论 -
八种排序算法之八:两步学会堆排序
堆排序的基础是完全二叉树的顺序结构实现,没有实现过的可以先看一下这篇文章:《二叉树链式结构和顺序结构区别详解+java代码实现》https://blog.csdn.net/weixin_44537194/article/details/87405475堆分为大顶堆和小顶堆,其实就是完全二叉树。大顶堆要求对于任意一个子树,父节点大于任何一个子节点。就像一个倒三角一样:小顶堆相反,父...原创 2019-02-16 12:45:31 · 184 阅读 · 0 评论 -
八种排序算法之六:详解归并排序
归并排序的核心思想首先可以从一个问题入手:如果我们在排序时遇到以下两个数组有序数组,有没有一种最快速的方法排序呢?对我们而言,把两个数组合成有序数列如果用之前的方法在遍历一遍太过麻烦,最快速度方法应该是像榫卯结构一样直接插入有了思路,接下来就是我们如何把这一思想转化为计算机语言了我们先新建一个长度为上面两个数组长度之和的新数组,然后比较两个数组的第一个元素,在如图中,是1和2比较,我们...原创 2019-02-14 17:20:31 · 186 阅读 · 1 评论 -
八种排序算法之七:图解基数排序
基数排序适合于有不同位数的大小数字,例如以下数列:核心思想是:先找十个桶:0~9第一轮按照元素的个位数排序桶内分别存放上述数组元素的个位数,按照数组元素的顺序依次存放之后,按照从左向右,从上到下的顺序依次取出元素,组成新的数组。在新的数组中,进行第二轮,按照十位数排序,依次存放于桶中:按照之前的顺序取出,组成新的数组。进行第三轮,按照百位数排序:将百位数的元素取出之后,...原创 2019-02-14 22:09:51 · 14232 阅读 · 11 评论 -
基数排序之使用队列优化
在博主的上一篇文章里图解了基数排序的原理和代码实现,本文对上一篇文章里的实现方法做一些优化,如果没有看过的小伙伴可以移步上一篇文章:《八种排序算法之七:图解基数排序》https://mp.csdn.net/mdeditor/87302788#在上一篇的基数排序中,我们比喻了十个桶来存储每次循环得到的余数,并且需要把桶内的元素按照“ 先放进来,先拿出去 ” 的原则拿出,重新组成数组,作...原创 2019-02-14 23:46:21 · 335 阅读 · 0 评论 -
详解二叉树的创建,遍历,查找,删除子树
链式存储创建二叉树:创建一棵树:public static void main(String[] args) { //创建一棵树 BinaryTree binTree = new BinaryTree(); }这样就完成了一棵树的创建,可能大家会疑惑,这里面什么都没有,怎么叫创建一棵树呢?这其实就是一颗空树二叉树的全部代码:/** * 2019年2月15日 */p...原创 2019-02-15 10:37:12 · 2472 阅读 · 0 评论 -
单链表,循环链表的实现
循环链表如图所示,与单链表相比较,就是最后一个节点又赋值给了第一个节点,构成了一个环。所以我们是先的思路也就只在单链表上增加:让最后一个节点指向第一个节点这一个功能。在循环链表中没有最后一个节点的概念(闭合循环),也就没有了单链表中显示,最后追加节点等方法。我们可以由易到难依次解决:如果只有一个节点,那么它自身就是一个循环链表,自己指向自己。如果要添加一个节点,有三步:第一:设置首节...原创 2019-02-06 11:05:09 · 874 阅读 · 0 评论 -
双向循环列表
原创 2019-02-06 20:54:25 · 701 阅读 · 0 评论 -
八种排序算法详解之一:初探冒泡排序
1.冒泡排序:和泡泡从水中冒出一样的原理,可以下列网站上动态感受效果http://www.atool.org/sort.php开始从第一个和后面的比较,如果大,就向后走,如果对方大,对方取代了它向后走,这样最大的一个数先到最后的位置。控制循环比较的轮数是 :第一轮中第一个和后面所有 length-1轮第二轮中不和最后一个比较 length-1-1轮代码...原创 2019-02-06 21:26:06 · 170 阅读 · 0 评论 -
二叉树链式结构和顺序结构区别详解+java代码实现
我们可以把任何一个数组转化为二叉树,也可以把二叉树转化为数组(那我们可以思考一下:是否可以把任何一棵树转化为数组?)堆:大顶堆和小顶堆大顶堆:对于任意一个子树,父节点大于任何一个子节点小顶堆相反,父节点小于任意个字节点最终完成大顶堆:...原创 2019-02-16 10:41:06 · 649 阅读 · 0 评论 -
栈与队列的异同
栈与队列的异同二者的相同点:1.他们都属于线性表。2.线性表的特点是数据元素之间存在“一对一”的关系,栈和队列都是操作受限制的线性表。3.都只能在线性表的端点插入和删除不同之处:栈(Stack)是只允许在表的尾端进行插入或删除,(在栈中就是“栈顶”),其最大的特点是“先进后出或后进的先出”,可以类比为弹夹中压子弹,最后压的子弹却是最先射出的。队列(Queue)是只允许在表尾进行插入...原创 2019-02-01 16:57:48 · 7299 阅读 · 0 评论