
java数据结构与算法
文章平均质量分 75
java中设计到的数据结构与算法
秋天的猿
这个作者很懒,什么都没留下…
展开
-
java数据结构与算法总结(三十五)--并行流水线
计算(B+C)*B/2。可以使用生产者消费者进行如下计算。package od;import java.util.concurrent.LinkedBlockingQueue;public class TestTwoUtils { public static void main(String[] args) { //并行流水线 // 加法 final LinkedBlockingQueue<Msg> plusQ = new原创 2021-04-16 20:45:08 · 219 阅读 · 0 评论 -
java基础总结(107)--排序
来自https://blog.youkuaiyun.com/qq_23179075/article/details/78753136在日常开发中,很多时候都需要对一些数据进行排序的操作。然而那些数据一般都是放在一个集合中如:Map ,Set ,List 等集合中。他们都提共了一个排序方法 sort(),要对数据排序直接使用这个方法就行,但是要保证集合中的对象是 可比较的。怎么让一个对象是 可比较的,那就需要该对象实现 Comparable<T> 接口啦。然后重写里面的compareTo()方法。我转载 2021-04-05 10:40:28 · 207 阅读 · 0 评论 -
java数据结构与算法总结(三十四)--常用的八大排序算法时间复杂度和空间复杂度比较
原文链接排序算法可以分为内部排序和外部排序,内部排序是数据记录在内存中进行排序,而外部排序是因排序的数据很大,一次不能容纳全部的排序记录,在排序过程中需要访问外存。各种内部排序按所采用的基本思想(策略)可分为:插入排序、交换排序、选择排序、归并排序和基数排序,它们的基本策略是:1、插入排序:依次将无序序列中的一个记录,按关键字值的大小插入到已排好序一个子序列的适当位置,直到所有的记录都插入为止。具体的方法有:直接插入、表插入、2-路插入和shell排序。2、交换排序:对于待排序记录序...转载 2021-02-27 21:05:46 · 338 阅读 · 0 评论 -
java数据结构与算法总结(三十五)--LRU算法原理及其实现
原文链接LRU是什么现代计算机,内存仍是相当昂贵的,那么如果利用好、管理好有限的内存,来为用户提供更好的性能,是一个有意义的议题。LRU(Least Recently Used) 即最近最少使用,属于典型的内存淘汰机制。通俗的说,LRU算法认为,最近被频繁访问的数据会具备更高的留存,淘汰那些不常被访问的数据。LRU算法实现思路根据LRU算法的理念,我们需要:一个参数cap来作为最大容量一种数据结构来存储数据,并且需要1. 轻易地更新最新的访问的数据。2. 轻易地找出最近最少被转载 2021-02-25 21:52:48 · 338 阅读 · 0 评论 -
java架构模式与设计模式(八)--看懂 Serverless,这一篇就够了
原文链接目录1. 无服务器(Serverless)计算是什么2. 理解Serverless技术—FaaS和BaaS2.1 FaaS(Function as a Service,函数即服务)2.2 BaaS(Backend as a Service,后端即服务)3. 无服务器(Serverless)计算如何工作?4. 无服务器(Serverless)适用于哪些场景?4.1 场景一:应用负载有显著的波峰波谷4.2 场景二:典型用例 - 基于事件的数据处理5. Server转载 2021-02-25 21:54:16 · 983 阅读 · 0 评论 -
MicroServices(七)--分布式一致性算法--Paxos
原文链接目录分布式一致性算法--Paxos分布式一致性算法--Paxos Paxos算法是莱斯利·兰伯特(Leslie Lamport)1990年提出的一种基于消息传递的一致性算法。Paxos算法解决的问题是一个分布式系统如何就某个值(决议)达成一致。在工程实践意义上来说,就是可以通过Paxos实现多副本一致性,分布式锁,名字管理,序列号分配等。比如,在一个分布式数据库系统中,如果各节点的初始状态一致,每个节点执行相同的操作序列,那么他们最后能得到一个一致的状态。为保证每个节点执行...转载 2021-02-26 19:53:50 · 306 阅读 · 0 评论 -
java数据结构与算法总结(三十四)--常用公式
等比数列求和等差数列求和原创 2021-02-26 19:54:35 · 152 阅读 · 0 评论 -
java数据结构与算法总结(三十三)--Btree和B+tree的区别
原文链接B树B树是一种多路自平衡搜索树,它类似普通的二叉树,但是B书允许每个节点有更多的子节点。B树示意图如下:B树的特点:(1)所有键值分布在整个树中(2)任何关键字出现且只出现在一个节点中(3)搜索有可能在非叶子节点结束(4)在关键字全集内做一次查找,性能逼近二分查找算法3:所有叶子节点都出现在同一层,且叶子节点不包含任何关键字信息(可以看做是外部接点或查询失败的接点,实际上这些结点不存在,指向这些结点的指针都为null)4:每个非叶子节点包含有n个关键字信..转载 2021-02-26 19:56:14 · 186 阅读 · 0 评论 -
java数据结构与算法总结(三十二)--Finite State Transducers
原文链接一、 简介Finite State Transducers简称FST, 中文名:有穷状态转换器。在自然语言处理等领域有很大应用,其功能类似于字典的功能(STL中的map,C#中的Dictionary),但其查找是O(1)的,仅仅等于所查找的key长度。目前Lucene4.0在查找Term时就用到了该算法来确定此Term在字典中的位置。FST可以表示成FST<Key, Value>的形式,我们可以用O(length(key))的复杂度,找到ke...转载 2021-02-27 21:06:28 · 463 阅读 · 0 评论 -
java数据结构与算法总结(三十一)--BTree和B+Tree
原文链接简介B 树是为了磁盘或其它存储设备而设计的一种多叉平衡查找树。(相对于二叉,B树每个内结点有多个分支,即多叉)B树又可以写成B-树/B-Tree,并不是B“减”树,横杠为连接符,容易被误导首先我们介绍一下一棵 m 阶B-tree的特性m 阶的定义:一个节点能拥有的最大子节点数来表示这颗树的阶数举个例子:如果一个节点最多有 n 个key,那么这个节点最多就会有 n+1 个子节点,这棵树就叫做 n+1(m=n+1)阶树包括以下5条特性1.每个结点x(假设为x)有如下属性:转载 2021-02-23 21:47:54 · 372 阅读 · 0 评论 -
java数据结构与算法总结(三十)--B-tree
原文链接B-tree(多路搜索树,并不是二叉的)是一种常见的数据结构。使用B-tree结构可以显著减少定位记录时所经历的中间过程,从而加快存取速度。按照翻译,B 通常认为是Balance的简称。这个数据结构一般用于数据库的索引,综合效率较高。中文名多路搜索树外文名B-tree特点综合效率较高属性数据结构目录结点性能用途B+树结点B-tree中,每个结点包含:1、本结点所含关键字的个数;2、指向父结点的指针;3、关...转载 2021-02-23 21:48:03 · 184 阅读 · 0 评论 -
java数据结构与算法总结(二十九)--关于二分查找和二叉树查找的比较和选择
原文链接下面是一道题目:在一个排序了的整数数组中(包含100万整数),寻找某一个特定的数。二分搜索、先构建二叉树再利用这棵树作为索引进行搜索,这两种搜索的时间复杂度都是logN。 什么时候该用第一种,什么时候该用第二种?看到这道题目考察的是二分查找和二叉树查找的比较和优劣选择的关系。(1)这里数组是一个100万的有序数组。(2)两者的时间的复杂度相同为logN关于二分查找和二叉树的理解:(1)二分查找即折半查找,优点是比较次数少,查找速度快,平均性能好;其缺点是要求待查表为有序表.转载 2021-02-23 21:48:13 · 263 阅读 · 0 评论 -
java数据结构与算法总结(二十七)--二叉查找树、平衡二叉树、红黑树的效率比较
原文链接查找、插入、删除操作的最坏时间复杂度 二叉查找树 平衡二叉树 红黑树 查找 O(n) O(logn) Olog(n) 插入 O(n) O(logn) Olog(n) 删除 O(n) O(logn) Olog(n) 二叉查找树因可能退化成链表,故其性能最差。平衡二叉树和红黑树是带有平衡条件的二叉查找树,故它们的效率也较高。平衡二叉树的插入/删除操作带来的旋转操作可能会达到logn次,而红黑树的插入/.转载 2021-02-22 22:57:05 · 457 阅读 · 0 评论 -
java数据结构与算法总结(二十六)--二叉树的算法时间复杂度
原文链接二叉搜索树,平衡二叉树,红黑树的算法效率操作 二叉查找树 平衡二叉树 红黑树 查找 O(n) O(logn) Olog(n) 插入 O(n) O(logn) Olog(n) 删除 O(n) O(logn) Olog(n) Olog(n)怎么算出来的 在一个树中查找一个数字, 第一次在根节点判断,第二次在第二层节点判断 以此类推,树的高度是多少就会判断多少次 树.转载 2021-02-22 22:57:50 · 515 阅读 · 0 评论 -
java数据结构与算法总结(二十五)--初识BitSet之API
原文链接1.BitSet类的基本原理类实现了一个按需增长的位向量。用一位来表示一个数据是否出现过,0表示没有出现过,1表示没有出现过默认情况下,set中所有位的初识值都是0(或者false)。多个线程操作一个BitSet是不安全的。2.API解析2.1 底层数据结构内部维护了一个long数组,所以数组words中的每个元素word默认是64位的long值。ADDRESS_BITS_PER_WORD = 6:每个word值需要6个bit来表示地址:64 = 2^...转载 2021-02-22 22:55:38 · 225 阅读 · 0 评论 -
java数据结构与算法总结(二十四)--RoaringBitmap数据结构及原理
原文链接首先每个RoaringBitmap(GitHub链接)中都包含一个RoaringArray,名字叫highLowContainer。highLowContainer存储了RoaringBitmap中的全部数据。RoaringArray highLowContainer;1这个名字意味着,会将32位的整形(int)拆分成高16位和低16位两部分(两个short)来处理。RoaringArray的数据结构很简单,核心为以下三个成员:short[] keys;Co.转载 2021-02-21 15:01:06 · 361 阅读 · 0 评论 -
java数据结构与算法总结(二十三)--通过BitSet源码来理解BitMap算法
原文链接BitMap是一种很常用的数据结构,它的思想的和原理是很多算法的基础,当然,并且在索引,数据压缩,海量数据处理等方面有广泛应用。一、简介BitMap 是一种很常用的数据结构,它的思想和原理是很多算法的基础,比如Bloom Filter 。BitMap 的基本原理就是用一个 bit 位来存放某种状态(如果理解不了,看完下文再回头来看即可),适用于拥有大规模数据,但数据状态又不是很多的情况。通常是用来判断某个数据存不存在的。它最大的一个特点就是对内存的占用极小,所以经常在大数据中被优化转载 2021-02-21 14:57:42 · 286 阅读 · 0 评论 -
java数据结构与算法总结(二十二)--树状数组
据说树状数组就是线段树。线段树参考链接有一天,小明给了我三个问题(其实是我自己出的啦~)(1)有一个机器,支持两种操作,在区间[1,10000]上进行。操作A:把位置x的值+k操作B:询问区间[l,r]所有数字之和区间的初始值全部为0现在你要充当这个机器,操作A和操作B会被穿插着安排给你,要求对于所有操作B,给出正确的答案。怎样做才能最节省精力?(2)有一个机器,支持两种操作,在区间[1,10000]上进行。操作A:把区间[l,r]的值全都+x操作B..转载 2020-06-02 23:53:34 · 505 阅读 · 0 评论 -
java数据结构与算法总结(二十一)--线段树
一:为什么需要线段树?题目一:10000个正整数,编号1到10000,用A[1],A[2],A[10000]表示。修改:无统计:1.编号从L到R的所有数之和为多少? 其中1<= L <= R <= 10000.方法一:对于统计L,R ,需要求下标从L到R的所有数的和,从L到R的所有下标记做[L..R],问题就是对A[L..R]进行求和。这样求和,对于每个询问,需要将(R-L+1)个数相加。方法二:更快的方法是求前缀和,令 S[0]=0, S[k]=A[1..k]转载 2020-06-02 23:47:22 · 456 阅读 · 0 评论 -
java数据结构与算法总结(二十)--二十三种设计模式
来自:https://www.cnblogs.com/geek6/p/3951677.html一、设计模式的分类总体来说设计模式分为三大类:创建型模式,共五种:工厂方法模式、抽象工厂模式、单例模式、建造者模式、原型模式。结构型模式,共七种:适配器模式、装饰器模式、代理模式、外观模式、桥接模式、组合模式、享元模式。行为型模式,共十一种:策略模式、模板方法模式、观察者模...转载 2018-11-20 10:22:49 · 284 阅读 · 0 评论 -
java数据结构与算法总结(十九)--十大经典排序算法最强总结(含JAVA代码实现)
来自https://www.cnblogs.com/guoyaohua/p/8600214.html项目主页:https://github.com/guoyaohua/最近几天在研究排序算法,看了很多博客,发现网上有的文章中对排序算法解释的并不是很透彻,而且有很多代码都是错误的,例如有的文章中在“桶排序”算法中对每个桶进行排序直接使用了Collection.sort()函数,这样虽...转载 2020-03-21 11:00:53 · 240 阅读 · 0 评论 -
java数据结构与算法总结(十八)--Java设计模式
来自https://developer.51cto.com/art/201907/599580.htm本文部分代码写的比较简洁,可结合其他不可帮助理解大神详解,这么详细的Java设计模式不收藏可惜了设计模式是很多程序员总结出来的优秀实践。曾经在刚开始写项目的时候学习过设计模式,在开发过程中,也主动或者被动的使用过。现在写代码虽说不会特意明确在用哪种设计模式,但潜移默化的写出来公认...转载 2020-03-21 11:16:58 · 623 阅读 · 0 评论 -
java数据结构与算法总结(十七)--桥接模式优点比较
原文链接:http://blog.youkuaiyun.com/jason0539/article/details/22568865生活中的一个例子: 拿汽车在路上行驶的来说。既有小汽车又有公共汽车,它们都不但能在市区中的公路上行驶,也能在高速公路上行驶。这你会发现,对于交通工具(汽车)有不同的类型,它们所行驶的环境(路)也有不同类型,在软件系统中就要适应两个方面(不同车型,不同道路)的变化...转载 2020-03-21 11:29:30 · 390 阅读 · 0 评论 -
java数据结构与算法总结(十六)--策略模式(Strategy Pattern) 介绍 优缺点 使用场景案例及代码演示
一句话概括:一个类的行为或算法可以在运行时更改。补充介绍:在策略模式(Strategy Pattern)中,一个类的行为或其算法可以在运行时更改,这种类型的设计模式属于行为型模式。Strategy的意思是“策略”,指的是与敌军对垒时行军作战的方法。在策略模式中,我们创建各种表示策略的对象和一个行为随着策略对象改变而改变的context对象。策略对象改变context对象的执行算法。...转载 2020-03-21 11:33:46 · 671 阅读 · 0 评论 -
java数据结构与算法总结(十五)--责任链模式优缺点
来自https://www.cnblogs.com/myseries/p/10944937.html目录1.1 简介1.2 责任链模式优缺点2 模式结构 2.1 对象定义 2.2 类图及设计 2.3 适用场景:1.1 简介责任链模式为请求创建一个接收者对象链,每个接收者都包含对另一个接收者的引用,如果一个对象不能处理该请求,那么它会把请求传给下一个接收者,依此类...转载 2020-03-21 11:39:51 · 4025 阅读 · 0 评论 -
java数据结构与算法总结(十四)--java图的邻接表实现两种方式及实例应用分析
图的遍历有邻接矩阵和邻接链表两种。V:代表节点数,E代表边的条数。由于邻接矩阵结构简单,这里介绍下邻接链表。根据《算法导论》341p,|E|远远小于|V|的平方时用邻接链表(这样的图称为稀疏图),|E|接近于|V|的平方时用邻接矩阵(这样的图称稠密图)。p342倒数第5行,对于无向图来说,邻接矩阵还有一个优势,每个记录项都只需要1位的空间。下文来自https://blog.csd...转载 2020-03-29 20:39:43 · 793 阅读 · 0 评论 -
java数据结构与算法总结(十三)--二叉树(遍历方法、递归实现)
二叉树的遍历二叉树的遍历是指按照某种顺序访问二叉树中的每个结点,使每个结点被访问一次且仅被访问一次。通过一次完整的遍历,可使二叉树中的结点信息由非线性排列变成某种意义上的线性序列。也就是说,遍历操作是非线性结构线性化。由二叉树的定义可知,一棵二叉树由根结点、左子树和右子树三部分组成。因此,只需要依次遍历这三个部分,就可以遍历整个二叉树。若以D、L、R分别表示访问根结点、遍历根结点的左子树和...转载 2020-04-01 19:54:35 · 242 阅读 · 0 评论 -
java数据结构与算法总结(十二)--算法
https://www.cnblogs.com/skywang12345/p/3603935.html一个总结的比较全的博客。转载 2020-03-19 22:13:10 · 99 阅读 · 0 评论 -
java数据结构与算法总结(十一)--背包问题
来自https://blog.youkuaiyun.com/lanyu_01/article/details/79815801问题描述:一个背包的总容量为V,现在有N类物品,第i类物品的重量为weight[i],价值为value[i]那么往该背包里装东西,怎样装才能使得最终包内物品的总价值最大。这里装物品主要由三种装法:1、0-1背包:每类物品最多只能装一次2、多重背包:每类物品都有个...转载 2020-03-21 11:22:26 · 270 阅读 · 0 评论 -
java数据结构与算法总结(十)--阻塞队列和非阻塞队列
来自https://baijiahao.baidu.com/s?id=1649350860832492296&wfr=spider&for=pc队列是一种数据结构,它有两个基本操作:在队列尾部加入元素和从队列头部移除元素。在我们日常开发中,经常用来并发操作数据。java包中有一些应用比较广泛的特殊队列:一种是以ConcurrentLinkedQueue为代表的非阻塞队列;另一种...转载 2020-04-01 21:13:30 · 620 阅读 · 0 评论 -
java数据结构与算法总结(九)--并查集
来自百度并查集,在一些有N个元素的集合应用问题中,我们通常是在开始时让每个元素构成一个单元素的集合,然后按一定顺序将属于同一组的元素所在的集合合并,其间要反复查找一个元素在哪个集合中。这一类问题近几年来反复出现在信息学的国际国内赛题中,其特点是看似并不复杂,但数据量极大,若用正常的数据结构来描述的话,往往在空间上过大,计算机无法承受;即使在空间上勉强通过,运行的时间复杂度也极高,根本就不可能在...转载 2020-03-29 20:47:25 · 358 阅读 · 0 评论 -
java数据结构与算法总结(八)--队列(Queue)用法
队列是一种特殊的线性表,它只允许在表的前端进行删除操作,而在表的后端进行插入操作。LinkedList类实现了Queue接口,因此我们可以把LinkedList当成Queue来用。以下实例演示了队列(Queue)的用法:import java.util.LinkedList;import java.util.Queue; public class Main { publ...转载 2020-04-01 20:17:57 · 1490 阅读 · 0 评论 -
java数据结构与算法总结(七)--【图数据结构的遍历】java实现广度优先和深度优先遍历
来自宽度优先搜索(BFS)遍历图需要使用队列queue数据结构; 深度优先搜索(DFS, Depth First Search)的实现需要使用到栈stack数据结构。java中虽然有Queue接口,单java并没有给出具体的队列实现类,而Java中让LinkedList类实现了Queue接口,所以使用队列的时候,一般采用LinkedList。因为LinkedList是双向链表,可以很方便...转载 2020-04-07 22:32:45 · 232 阅读 · 0 评论 -
java数据结构与算法总结(六)--0-1背包问题
原文来自动态规划的应用场景 适用动态规划的问题必须满足最优化原理、无后效性和重叠性。 a.最优化原理(最优子结构性质) 最优化原理可这样阐述:一个最优化策略具有这样的性质,不论过去状态和决策如何,对前面的决策所形成的状态而言,余下的诸决策必须构成最优策略。简而言之,一个最优化策略的子策略总是最优的。一个问题满足最优化原理又称其具有最优子结构性质。 b.无后效性 将各阶段按照一定的次序排列好之后,对于某个给定的阶段状态,它以前各阶段的状态无法直接影响它未来的决策,而只能通过当前的这个状转载 2020-05-19 22:33:40 · 450 阅读 · 0 评论 -
java数据结构与算法总结(五)--背包问题c详解:01背包、完全背包、多重背包
本文来自参考链接:http://www.cnblogs.com/fengty90/p/3768845.html http://blog.youkuaiyun.com/mu399/article/details/7722810 http://blog.youkuaiyun.com/xiaowei_cqu/article/details/8191808 http://blog.youkuaiyun.com/insistgogo/article/details/11176693背包问题是动态规划算法的一个典型实例,首先介绍动态规划算转载 2020-05-19 23:20:54 · 647 阅读 · 0 评论 -
java数据结构与算法总结(四)--Java实现表达式计算(中缀表达式转化为后缀表达式/逆波兰式)
定义:中缀表达式:我们平时写的数学表达式一般为中缀表达式,如“5+2*(3*(3-1*2+1))”,直接拿中缀表达式直接让计算机计算表达式的结果并不能做到。后缀表达式:把中缀表达表达式“5+2*(3*(3-1*2+1))”转化“523312*-1+**+”这样的形式,就是后缀表达式。这种记法叫做后缀(postfix)或逆波兰(reverse Polish)记法。计算这个问题最容易的方法就是使用一个栈。转换方法:按次序读取中缀表达式的字符。 读到一个操作数的时候,立即放入到输出中。 读到操转载 2020-06-02 22:29:05 · 328 阅读 · 0 评论 -
java数据结构与算法总结(三)--漫画:什么是红黑树
本文来自接下来先讲一下什么是左旋转!通过动画举个例子吧!人生像红黑树一样,总是需要某种平衡一边是给予,一边是接受一边是付出,一边是得到一边是耕耘,一边是收获一边是物质,一边是精神阿广你年过二十而未立置身于五光十色的世俗社会我希望阿广都能铭记一个古老但不失色彩的道理!“活...转载 2020-05-20 21:05:58 · 298 阅读 · 1 评论 -
java数据结构与算法总结(二)--二叉树遍历2
关于二叉树的前序、中序、后序三种遍历二叉树遍历分为三种:前序、中序、后序,其中序遍历最为重要。为啥叫这个名字?是根据根节点的顺序命名的。比如上图正常的一个满节点,A:根节点、B:左节点、C:右节点,前序顺序是ABC(根节点排最先,然后同级先左后右);中序顺序是BAC(先左后根最后右);后序顺序是BCA(先左后右最后根)。比如上图二叉树遍历结果前序遍历:A...转载 2018-12-05 12:57:15 · 172 阅读 · 0 评论 -
java数据结构与算法总结(一)--二叉树遍历一
二叉树前序、中序、后序遍历相互求法来自:https://blog.youkuaiyun.com/m0_37698652/article/details/79218014今天来总结下二叉树前序、中序、后序遍历相互求法,即如果知道两个的遍历,如何求第三种遍历方法,比较笨的方法是画出来二叉树,然后根据各种遍历不同的特性来求,也可以编程求出,下面我们分别说明。总结一下三种遍历方式的特征:前序:开头是...转载 2018-12-05 12:54:44 · 142 阅读 · 0 评论