- 博客(12)
- 收藏
- 关注
原创 堆排序(十大经典排序算法之我的最爱)
一. 二叉堆堆排序 就是把 数组元素 堆起来 排个序,这个堆长得跟树差不多,所以可以参考二叉树的样子理解二叉堆。把数组元素填充到二叉树的节点上,每层从左到右的填充,由此建立了一颗完全二叉树注意,这里说的是用二叉树的样子帮助理解二叉堆,二叉树不是真正存在的,它只是用来可视化数组元素之间的关系,啥关系呢?如果父节点索引是 n,则左儿子索引是 2n+1,右儿子索引是 2n+2不信你随便找一组父子节点验证验证。我们的目的是排序,所以这颗虚拟二叉树就是我们接下来要实现排序的辅助对象。二. 节点调整分析
2021-07-19 13:05:16
228
原创 Java二叉树序列化/反序列化(两序、层序、前序三种办法)
全文主角class TreeNode { int value; TreeNode left; TreeNode right; TreeNode(int val){ value = val; }}本次讨论二叉树的序列化 / 反序列化,下面按照 两序、层序、前序 三种办法依次分析并给出参考代码实现,这三种方式按思考形式由浅至较浅,代码量由多到较少。一. 两序遍历(前序 + 中序)对于上面的主角,其前序、中序遍历的结果分别是前序:1 2 3 4 6 7 5中序:2 1 6 4
2021-07-18 18:15:49
701
原创 字典树TireTree的Java实现
一. 字典树能干啥1.加快 在超长文本字符串 内 匹配大量关键词 的效率2.快速统计 关键词 在字符串内 出现的频率或位置(进而能够找到字符串内出现频率最高的词)比如有以下一段文本报道称,美国海军正面临严重的战机荒。一名美国海军官员告诉众议院,通过调整航母舰载机联队的战机编制组合,到2025年缓解其攻击战斗机兵力短缺的问题。具体而言,美国海军原定每个舰载机联队配属两个F-35C中队,每个中队10架,调整后将只配属一个中队,数量增至14架。此外,美海军还将接收美空军和空中国民警卫队的部分F-16战斗
2021-07-17 15:40:48
564
原创 HashMap原理入门
兴趣 = 未知 + 好奇一. HashMap是啥一个数据容器,每组数据包含一个键(Key),和一个值(Value),故称 “K-V键值对”HashMap要求容器内的 Key 唯一,原因是HashMap需要根据 Key 来区分不同的数据,而对 Value 无要求所以可认为,Key 是 HashMap 中的唯一标识,而 Value 就是 Key 的附带产品( Value 被绑定到 Key上 )因此,管理HashMap的关键,就是管理 Key二. HashMap本质HashMap主要是通过数组保存元
2021-02-11 11:50:35
160
原创 Java二叉搜索树
二叉搜索树(BST) = 二叉 + 搜索 + 树二叉树模型下面是一个简易的树杈子模型可以看到,每个树杈最多有俩分支,还有的树杈没有分支,即每个树杈最多有不超过两个分支把这样的树杈子结构倒过来,去掉树根,就变成了一种数据结构——二叉树,like下面这样↓根据这种结构我们引出下面这些概念:节点类:分支与分支的交点称为树节点没有分支相交的节点称为叶子节点最顶上的节点称为根节点上下相邻的节点称为父子节点(上面的是爹,下面的是儿子)父节点的父节点称为祖先节点有同一个爹的称为兄弟节点子
2021-02-05 13:40:34
214
原创 Java双向链表
一. 什么是链表通俗的说,链表就是用链条串起来的对象,是一种数据容器对象:用属性保存数据信息链条:对象的引用(指针)二. 链表的结构用图表示一个链表就是这样子图中,每个大矩形称为一个节点(本质上就是对象)data:真正存储信息的部分previous:记录上一个节点next:记录下一个节点三. 与数组的比较1. 结构比较数组是连续的内存单元,链表是基于节点和引用的2. 空间比较数组空间是连续的,链表的空间是散布的当内存紧张时,链表可以充分利用内存碎片,存储更多的节点;
2021-02-04 12:18:10
138
原创 Spring各种通知执行顺序
若不想看演示,请直接撸到最后(锚点怎么设)各种通知前置通知(Before):在目标方法执行之前执行异常通知(AfterThrowing):当目标方法执行过程中出现异常时执行后置通知(AfterReturning):当目标方法能正常结束后执行最终通知(After):无论目标方法能否正常结束都会执行环绕通知(Around):伴随目标方法各个时期(前面四种通知的综合)执行顺序一. 目标方法无异常时1. 整一个目标方法(切面)就以某Controller方法为例吧@RestController
2020-10-30 19:54:38
936
原创 哈夫曼压缩算法——编码原理
哈夫曼编码介绍哈夫曼树(HuffManTree)是用来压缩数据的一种数据结构,它适合压缩数据重复率较高的情况。文本A:123456789,这串文本重复率为0,因为每个字符都是唯一的,没有重复率而言;文本B:111222334,这串文本重复率明显较A高,适合用哈夫曼树压缩。问题与分析现在想把“aaaabbbccdeefffgggg”这个字符串保存到硬盘上,如果直接保存,它会占用多大空间?回顾一下,每个英文字母都可以用一个ASCII码表示,例如 a=97,b=98,……而每个ASCII码是 1
2020-10-16 12:46:35
1621
2
原创 经典算法——二叉搜索树的公共祖先节点
介绍二叉搜索树的公共祖先节点是指:对于给定的两个节点p、q,向上寻找离二者最近的公共节点。public class Node<T extends Comparable<T>> { T value; Node<T> left; Node<T> right; public Node() {} public Node(T t) { value = t; }}如图2和4的公共祖先节点是32和6的公共祖先节点是56和7的公共祖先节点是7
2020-09-27 10:12:10
1780
原创 Java算法——并查集
功能并查集是管理多个集合的算法,其功能包括集合的合并、集合内或集合间的查询。背景在中国古代,人们都比较重视血缘传承,几乎每家都至少会有一个男孩,后人总会牢记自己的祖先,这样就有了家谱 / 族谱。根据家谱 / 族谱,可以将后面几代人通过祖先的祖先都联系起来,使大家千万年前都是一家人。现在有一个问题,如果每个人都只记得自己的爹,那么如何快速判断任意两个人,是否来自同一祖先呢?输入示例第一行两个整数 n m ,家谱共有n个人,编号从1 ~ n接下来m行,每行俩数i j,i 是 j 的儿子,i, j
2020-09-26 16:40:05
516
原创 使用Java实现线段树
线段树结构线段树的每个节点都存储着一个线段,在Java中,该线段泛指数组区间。根节点的范围最广,是整个数组;其左儿子是整个数组的左半部分,其右儿子是整个数组的右半部分;以此类推,每个子节点都是它父节点的一半;直到最后的叶子节点,区间只有一个元素。如下有一个数组,和它对应的线段树:用二分法构建出来的树有啥用?对于数组容器,要想修改某一位置的元素,可以通过索引直接定位,复杂度O(1);但是,想要查找某元素,复杂度为O(n);对于修改元素,数组的O(1)要快于二分的O(log n),对于查
2020-09-25 22:18:53
951
2
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人