数据结构与算法
文章平均质量分 88
主要记录了一个菜鸡学数据结构与算法的过程
囚蕤
这个作者很懒,什么都没留下…
展开
-
高级数据结构——图
图是由顶点和边组合.一般我们会以V来定义图的顶点集合(Vertex),以E来定义图的边集合(Edge).如图,上述即为一个简单的无向图,其中顶点与顶点之间的边上的数值代表该边的权重.按照是否有方向可以将一个图分为无向图和有向图。原创 2022-09-18 21:35:19 · 424 阅读 · 0 评论 -
高级数据结构——LRU Cache、LFU Cache
LRU:Least Recent Used,即为最近最少使用,LRU是一种Cache替换算法.Cache的容量是有限的,因此当Cache装满时,如果有新的内容需要添加进来,那么就需要对Cache中的内容进行调整,而LRU算法则是将Cache中最近最少使用的内容剔除掉,也就是最久未使用的内容剔除掉.LFU和LRU一样,也是一种Cache替换算法.LFU:Least Frequent Used,即为最少频率使用。原创 2022-09-13 17:41:10 · 732 阅读 · 0 评论 -
高级数据结构——海量数据(位图,布隆过滤器)
位图(bitmap),适用于存储海量,非负整数,不重复的数据.假设我们用int数组来存放数据,1GB相当于是10亿字节,那么当存储40亿整形数据时,一个整形数据占用4个字节,因此一共需要40*4/10=16G,而16G远远超过了普通电脑的内存.而用位图存储40亿整形数据时,因为1个bit来存储1个数据,因此只需要16/4/8=0.5G此次位图的介绍采用的是byte数组,因此位图中1个元素实际上能够存储的元素个数为8(1byte = 8bit)原创 2022-09-12 11:24:49 · 529 阅读 · 0 评论 -
高级数据结构——红黑树
在之前介绍AVL树时,我们知道AVL树是高度平衡的二叉搜索树,而高度平衡意味着在对AVL树中的节点作更新操作时,我们需要花费较大的时间去动态调整树的结构.而红黑树相当于是对AVL树的一种改善.红黑树不像AVL树那样保持高度平衡(左右子树的高度差不超过1),而是通过给每个节点添加颜色标志(红/黑)这种限制来保证任意一条路径(从根节点到叶子结点)的长度不会超过其他路径长度的2倍,所以红黑树是一种接近平衡的二叉搜索树.红黑树具有4个性质每个节点的着色方式只有两种:红色或黑色根节点的着色为黑色。原创 2022-09-11 15:14:56 · 2397 阅读 · 0 评论 -
高级数据结构——AVL树
AVL树又被称为是高度平衡的二叉搜索树,一棵AVL树的任意左右子树的高度差不超过1,且任意一个节点大于该节点的左子节点的值,小于该节点的右子节点的值AVL树可以是专门为了查找数据而生,它适用于海量静态数据的查询的场景,而不适合频繁插入删除数据的场景.原创 2022-09-08 21:32:30 · 372 阅读 · 0 评论 -
队列详解(Java)
目录概念及类型概念类型相关题目(简单)用栈实现队列用队列实现栈总结概念及类型概念队列是一种数据结构,可以用顺序结构或链式结构来实现队列遵循先进先出的规则类型单向队列:即最原始的队列。满足队尾进元素,从队头出元素的特点。对于单向队列而言,当用顺序结构(即数组)去实现时,存在内存浪费的现象。如图,当确定了队列的最大空间时,即使队首元素出队列,队首元素所占用的位置仍不能被队列中其他元素使用,会造成数组的浪费。因此我们可以用链式结构来实现队列。我们应该思考这样一个问题:用单链表实现队列时如何才能原创 2022-01-17 17:38:32 · 1222 阅读 · 11 评论 -
查找算法详解(斐波那契和插值)
目录插值查找定义原理分析相关代码斐波那契查找定义原理分析过程和细节相关代码插值查找原创 2021-12-08 17:51:25 · 312 阅读 · 0 评论 -
快速幂详解
目录快速幂概念快速幂代码快速幂例题题目介绍思路分析相关代码总结快速幂概念在介绍快速幂之前,我们在求a的n次方时是遍历n次得到a的n次方,时间复杂度为O(n),而通过快速幂求a的n次方可以让时间复杂度降到O(logn).快速幂:顾名思义就是快速地求幂(feihua),如何进行快速求幂,根据之前介绍的快速幂的时间复杂度为O(logn)我们可以初步判断是通过类似二分的思想如何求幂。例如2 ^ 5 = (2 ^1) * (2 ^ 2) * (2 ^ 2),我们求了3次,即ceil(log5)次快速幂代码原创 2021-12-06 10:05:37 · 950 阅读 · 0 评论 -
栈的应用1(计算器)
目录总述思路分析相关代码片段总述本篇文章主要介绍栈这种数据结构在计算器的实现中的应用,核心思想即为如何实现中缀表达式转换为后缀表达式思路分析基本概念我们都知道1个表达式是由运算符、数字以及括号组成。例如:1-(2+3)*5,在计算的时候,我们首先计算括号中的内容,然后根据运算符的优先级的高低去进行相应的计算。我们平常见到的这种表达式即为中缀表达式什么是后缀表达式?后缀表达式又被称为逆波兰表达式,是一种没有括号,严格遵循从左到右进行运算的表达式。对于1-(2+3)*5这个中缀表达式,对应的原创 2021-11-28 23:42:16 · 227 阅读 · 0 评论 -
前缀和详解
目录前缀和概念前缀和代码前缀和例题题目介绍思路分析相关代码总结前缀和概念前缀和:顾名思义,是要求前缀的总和,什么是前缀,对于一个存放数字的数组而言,前缀就是指的数组的前k项,因此对应的前缀和就是数组前k项的和。前缀和一般用来求数组中连续段子数组的值的和,类似于等差数列中利用等差数列的和来求某一段子数列的和:前缀和代码public int[] prefix(int[] arr){ int[] prefixArr = new int[arr.length]; //前缀和的原创 2021-12-06 09:05:56 · 7383 阅读 · 0 评论