数据结构
文章平均质量分 67
山鬼谣弋痕夕
学习,记录,改变
展开
-
史上最简单清晰的查找讲解(红黑树、散列表、B树)
原文链接https://blog.csdn.net/yang_yulei/article/details/26066409我们会用三种经典的数据类型来实现高效的符号表:二叉查找数、红黑树、散列表。二分查找我们使用有序数组存储键,经典的二分查找能够根据数组的索引大大减少每次查找所需的比较次数。在查找时,我们先将被查找的键和子数组的中间键比较。如果被查找的键小于中间键,我们就在左子数组中继续查找,如果...转载 2018-05-01 14:36:17 · 1941 阅读 · 0 评论 -
堆排序图示
因为是原地进行升序排列,所以应该是建立大根堆;如果是原地进行降序排列,应该建立小根堆。(7-6-3-5-4-1-2)按照堆排序的方式原地进行升序排列:先建立大根堆,因为给定的数组就是大根堆,所以就不需要建立大根堆了。接下来:堆建好之后开始排序,堆顶就是最大值,取出放入数组中的最后一个位置,将堆底(数组中的最后一个元素)放入堆顶。因为这一操作会破坏堆,需要将前n-1个元素调整为堆。(依次...原创 2018-07-28 15:18:35 · 777 阅读 · 0 评论 -
哈弗曼树例题分析
哈弗曼树在互联网笔试题中经常遇见,这里以一道题为例子进行介绍:哈弗曼编码是一种无损二进制熵编码算法,其加权路径长度最小,字符串“alibaba”的二进制哈弗曼编码有___位(bit) 解题思路:哈弗曼树又叫做最优二叉树,是权值越大的点离根节点越近,导致整个树权值最小方法:选择值最小的两个点作为左右节点,然后和作为父节点,在剩下的点以及父节点中选择最小的两个依次构造,形成哈弗曼树...转载 2018-08-20 21:29:44 · 7094 阅读 · 0 评论 -
B树、B-树、B+树、B*树 总结
https://blog.csdn.net/u012050154/article/details/76238475B树 1.所有非叶子结点至多拥有两个儿子(Left和Right); 2.所有结点存储一个关键字; 3.非叶子结点的左指针指向小于其关键字的子树,右指针指向大于其关键字的子树; B树的搜索,从根结点开始,...转载 2018-09-03 15:19:04 · 289 阅读 · 0 评论 -
快排第一趟序列
若给定的关键字集合为{20,15,14,18,21,36,40,10},一趟快速排序结束时,键值的排序为:快排第一趟序列:以后做快排的题记得用填坑法来做,不要从左到右遍历了,算法如下:1. 默认选取第一个元素作为基准,将第一个位置变成空位2. 从尾开始遍历,将第一个比基准小的元素填到空位,然后将该元素的位置变成空位3. 从头开始遍历,将第一个比基准大的元素填到空位,然后将该元素...原创 2018-09-03 16:11:33 · 3891 阅读 · 6 评论 -
快排java实现&图文解释
先上代码: /******************************************************* *快速排序 (比较排序类) *每次排序将待排记录分割两部分,一部分都比关键字小,一部分都比关键字大 ********/ public void quickSort(int[] L) { ...原创 2018-09-06 15:31:12 · 24579 阅读 · 11 评论 -
有向图的路径和半路径
有向图先介绍几个概念:有向图中,有向路径是边的序列,对序列中任何两条相邻的边和,第一条边的终止节点是第二条边的起始节点。回路是一条开始和结束在同一个节点上的有向路径。链路是节点的序列,这个序列的每个内部节点的出度和入度均等于1,起始节点的入度可以是0或大于1,终止节点的出度为0或大于1.半路径是边的序列,在该序列中至少存在一对相邻的边和,第一条边的起始节点也是第二条边的起始节点...原创 2018-10-25 17:41:13 · 3311 阅读 · 0 评论 -
双向循环链表和链表实现LRU
循环链表的概念如上图所示:单链表的尾结点指针指向空地址,表示这就是最后的结点了。而循环链表的尾结点指针是指向链表的头结点。因此循环链表是一种特殊的单链表。它跟单链表唯一的区别就在于尾结点。它像一个环一样首尾相连,所以叫作「循环链表」。循环链表的特点和单链表相比,循环链表的优点是从链尾到链头比较方便,当要处理的数据具有环型结构特点时,适合采用循环链表。双向链表概念双向链表...转载 2018-12-27 17:50:52 · 1572 阅读 · 0 评论 -
bitmap的秒用-优化存储
为满足用户标签的统计需求,可以利用Mysql设计了如下的表结构,每一个维度的标签都对应着Mysql表的一列:name age sex work phone 小美 21 女 程序员 苹果 小明 32 男 程序员 三星 小丽 21 女 经理 苹果 要想统计所有21岁的程序员该怎么做...转载 2019-02-09 22:33:39 · 532 阅读 · 0 评论 -
数组地址计算解法集锦
对于数组的地址计算的注意的是地址偏移量+认真细心审题地址偏移量的计算需要考虑是从0开始还是从1开始,行优先还是列优先。题目一:数组A中,每个元素的长度为3个字节,行下标i从1到8,列下标j从1到10,从首地址SA开始连续存放在存储器内,该数组按行存放时,元素A[8][5]的起始地址为()。本题的数组是从A[1][1]开始的,也就是说和所谓的数组从零开始没什么关系。对问题的分析,在计算...原创 2018-07-04 20:14:02 · 9951 阅读 · 3 评论 -
前缀中缀后缀表达式简单转换办法
35,15,+,80,70,-,*,20,/ //后缀表达方式(((35+15)*(80-70))/20)=25 //中缀表达方式 /,*,+,35,15,-,80,70, 20 //前缀表达方式 人的思维方式很容易固定!正如习惯拉10进制。就对2,3,4,8,16等进制不知所措一样~~!人们习惯的运算方式是中缀表达式。而碰...原创 2018-04-27 20:42:00 · 1204 阅读 · 4 评论 -
基数排序分析+代码
基数排序 转载自http://www.cnblogs.com/jingmoxukong/p/4311237.html基数排序与平常见到的插入排序方法都不同,它不需要比较关键字的大小。它是根据关键字中各位的值,通过对排序的N个元素进行若干趟“分配”与“收集”来实现排序的。 不妨通过一个具体的实例来展示一下,基数排序是如何进行的。 设有一个初始序列为: R {50, 123, 543, 187, ...转载 2018-05-02 10:13:03 · 622 阅读 · 1 评论 -
桶排序和基数排序区别(算法+代码)
之前一直分不清桶排序和基数排序,现在拿出来这两比较一下1、算法思路:桶排序桶排序(Bucket Sort)假设输入数据服从均匀分布,然后将输入数据均匀地分配到有限数量的桶中,然后对每个桶再分别排序,对每个桶再使用插入排序算法,最后将每个桶中的数据有序的组合起来。假设输入是由一个随机过程生成,该过程将元素均匀的分布在一个区间[a,b]上,在[a,b]之间放置一定数量的桶,由于桶排序和计数排序一样均对...原创 2018-05-02 10:42:51 · 9448 阅读 · 1 评论 -
归并排序非递归实现
归并排序 转载:http://www.cnblogs.com/jingmoxukong/p/4308823.html目录要点 归并排序的基本思想算法分析 归并排序算法的性能 时间复杂度 空间复杂度 算法稳定性 归并排序和堆排序、快速排序的比较完整参考代码 Java版本参考资料相关阅读要点归并排序是建立在归并操作上的一种有效的排序算法,该算法是采用分治法(Divide and Conq...转载 2018-05-02 13:27:29 · 395 阅读 · 2 评论 -
排序算法总结(思想+Java实现)
冒泡排序 简单选择排序 直接插入排序 希尔排序 归并排序 快速排序冒泡排序:冒泡排序是一种交换排序思想:两两比较相邻记录的关键字,如果反序就交换复杂度:最好的情况下,排序本身就是有序的,n-1次的比较次数,时间复杂度为O(n),最坏的时候为逆序,需要的次数为1+2+3+...+n-1=(1/2)n(n-1),因此时间复杂度为n2 ;/*冒泡排序法,这个效率太低,每次都只是找...原创 2018-04-23 17:34:28 · 336 阅读 · 0 评论 -
数据结构、逻辑结构、存储结构辨析
数据结构=逻辑结构(线性、非线性)+存储结构(顺序、链式、索引、散列)1)逻辑结构:数据元素间抽象化的相互关系2)存储结构:(物理结构),在计算机存储器中的存储形式逻辑结构的分类:1.按逻辑结构分为:(线性结构+非线性结构)2.逻辑结构的四种基本形态:1)数据元素间没有任何关系——集合2)数据元素间有线性关系——线性结构(所谓线性关系:除第一...原创 2018-04-24 22:37:40 · 3519 阅读 · 5 评论 -
看完这篇,你要入门动态规划
动态规划:通过把原问题分解为相对简单的子问题的方式求解复杂问题的方法。动态规划常常适用于有重叠子问题和最优子结构性质的问题。基本思想若要解一个给定问题,我们需要解其不同部分(即子问题),再合并子问题的解以得出原问题的解。 通常许多子问题非常相似,为此动态规划法试图仅仅解决每个子问题一次,从而减少计算量: 一旦某个给定子问题的解已经算出,则将其记忆化存储,以便下次需要同一个子问题解...原创 2018-05-03 17:13:59 · 234 阅读 · 0 评论 -
树、森林、二叉树的转换
树、森林、二叉树的转换转载自:https://blog.csdn.net/u011240016/article/details/52823925树变二叉树树变二叉树的规则:每个结点的左指针指向它的第一个孩子结点。右指针指向它在树中的相邻兄弟结点。 也即:左孩子右兄弟。 根没有兄弟,所以转换以后的树没有右子树。具体操作:在兄弟之间连线对每一个结点,只保持它与第一个子结点(长子)的连线,与其他子结点的...转载 2018-05-10 18:40:20 · 203 阅读 · 0 评论 -
最小生成树
https://blog.csdn.net/luoshixian099/article/details/51908175 关于图的几个概念定义:连通图:在无向图中,若任意两个顶点vivi与vjvj都有路径相通,则称该无向图为连通图。 强连通图:在有向图中,若任意两个顶点vivi与vjvj都有路径相通,则称该有向图为强连通图。 连通网:在连通图中,若图的边具有一定的意义,每一条边都...转载 2018-05-11 22:50:06 · 3424 阅读 · 1 评论 -
今天终于懂了AVL树怎样旋转(带图理解)
AVL树,也称平衡二叉搜索树,AVL是其发明者姓名简写。AVL树属于树的一种,而且它也是一棵二叉搜索树,不同的是他通过一定机制能保证二叉搜索树的平衡,平衡的二叉搜索树的查询效率更高。AVL树特点 AVL树是一棵二叉搜索树。 AVL树的左右子节点也是AVL树。 AVL树拥有二叉搜索树的所有基本特点。 每个节点的左右子节点的高度之差的绝对值最多为1,即平衡因...原创 2019-02-23 16:17:18 · 4881 阅读 · 11 评论