自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(91)
  • 收藏
  • 关注

原创 Python3 循环语句

Python 中的循环语句有 for 和 while。

2024-04-29 08:56:10 820

原创 Python3 条件控制

Python 条件语句是通过一条或多条语句的执行结果(True 或者 False)来决定执行的代码块。

2024-04-21 22:32:13 503 1

原创 Python3 条件控制

Python 条件语句是通过一条或多条语句的执行结果(True 或者 False)来决定执行的代码块。

2024-04-14 22:39:13 599

原创 Python3 条件控制

Python 条件语句是通过一条或多条语句的执行结果(True 或者 False)来决定执行的代码块。

2024-04-09 09:12:08 612

原创 Python3 集合

集合(set)是一个无序的不重复元素序列。集合中的元素不会重复,并且可以进行交集、并集、差集等常见的集合操作。可以使用大括号 { } 创建集合,元素之间用逗号 , 分隔, 或者也可以使用 set() 函数创建集合。创建一个空集合必须用 set() 而不是 { },因为 { } 是用来创建一个空字典。

2024-03-31 19:18:52 953

原创 Python3 字典

字典是另一种可变容器模型,且可存储任意类型对象。字典的每个键值 key=>value 对用冒号 : 分割,每个对之间用逗号()分割,整个字典包括在花括号 {} 中 ,格式如下所示:键必须是唯一的,但值则不必。值可以取任何数据类型,但键必须是不可变的,如字符串,数字。

2024-03-24 20:55:31 726

原创 Python3 元组

Python 的元组与列表类似,不同之处在于元组的元素不能修改。元组使用小括号 ( ),列表使用方括号 [ ]。元组创建很简单,只需要在括号中添加元素,并使用逗号隔开即可。创建空元组tup1 = ()元组与字符串类似,下标索引从 0 开始,可以进行截取,组合等。

2024-03-18 09:39:05 1030

原创 Python3 列表

序列是 Python 中最基本的数据结构。序列中的每个值都有对应的位置值,称之为索引,第一个索引是 0,第二个索引是 1,依此类推。Python 有 6 个序列的内置类型,但最常见的是列表和元组。列表都可以进行的操作包括索引,切片,加,乘,检查成员。此外,Python 已经内置确定序列的长度以及确定最大和最小的元素的方法。列表是最常用的 Python 数据类型,它可以作为一个方括号内的逗号分隔值出现。列表的数据项不需要具有相同的类型。

2024-03-13 17:03:20 1624

原创 Python3 字符串

字符串是 Python 中最常用的数据类型。我们可以使用引号( ' 或 " )来创建字符串。创建字符串很简单,只要为变量分配一个值即可。

2024-03-04 00:08:18 877

原创 Python3 运算符

4 + 5 = 9例子中,4 和 5 被称为操作数,+ 称为运算符。

2024-02-25 23:36:46 804

原创 GB/T28181介绍

对标准的整体介绍和适用范围进行说明。

2024-01-15 01:13:32 1128

原创 JAVA动态代理

动态代理是Java中一种强大的机制,可以在运行时创建代理类和对象。通过使用JDK动态代理,你可以实现在目标类的方法执行前后进行不同的增强操作。方法定义了在方法执行前和执行后的增强操作。最后,创建一个测试类,使用。接下来,创建一个实现。

2024-01-08 01:13:16 394

原创 Java 序列化

Java 序列化是一种将对象转换为字节流的过程,以便可以将对象保存到磁盘上,将其传输到网络上,或者将其存储在内存中,以后再进行反序列化,将字节流重新转换为对象。序列化在 Java 中是通过 java.io.Serializable 接口来实现的,该接口没有任何方法,只是一个标记接口,用于标识类可以被序列化。当你序列化对象时,你把它包装成一个特殊文件,可以保存、传输或存储。反序列化则是打开这个文件,读取序列化的数据,然后将其还原为对象,以便在程序中使用。

2024-01-02 00:46:55 944

原创 List 流的使用

本文将介绍在 Java 1.8 中对 List 进行流操作的使用方法。引入的 java.util.stream 包为开发者提供了一种更为便捷和强大的方式来处理集合数据。通过使用流,我们能够以声明性的方式进行集合操作,减少了样板代码,提高了代码的可读性和可维护性。List是 Java 中最常用的集合之一,而 Stream API 则是 Java 1.8 中引入的一套用于处理集合数据的新工具。Stream 是一系列支持函数式编程的元素序列,它可以让你以一种更为声明性的方式处理数据,而不是传统的命令式编程方式。

2023-12-24 22:49:57 312

原创 Spring Boot重试调用第三方API

在实际的应用开发中,我们经常需要调用第三方API来获取数据或执行操作。然而,由于网络波动、第三方服务不稳定等原因,API调用可能会面临失败的情况。为了提高应用的可靠性和稳定性,我们需要在调用第三方API时实现优雅的重试机制。本文将介绍如何在Spring Boot项目中通过Spring Retry库实现对第三方API的优雅重试。通过以上步骤,我们成功地在Spring Boot项目中引入了Spring Retry库,并实现了对第三方API的优雅重试。

2023-12-19 16:58:18 544

原创 Java、Spring Boot和事务管理

在实际应用中,结合Java、Spring Boot和事务管理的最佳实践,可以确保应用程序在面对复杂的业务场景时仍然能够保持高度的稳定性和可维护性。Java作为一种强大的编程语言,通过其广泛的生态系统和强大的库支持,为开发人员提供了构建高性能应用程序的丰富工具。Spring Boot是一个基于Spring框架的项目,它进一步简化了Java应用程序的开发,并提供了强大的依赖注入和模块化的方式。编程式事务涉及到手动地在代码中控制事务的开始、提交和回滚,而声明式事务则是通过在代码中使用注解或XML配置来定义事务。

2023-12-10 22:24:59 327

原创 广度优先遍历与最短路径

广度优先遍历从某个顶点 v 出发,首先访问这个结点,并将其标记为已访问过,然后顺序访问结点v的所有未被访问的邻接点 {vi,..,vj} ,并将其标记为已访问过,然后将 {vi,...,vj} 中的每一个节点重复节点v的访问方法,直到所有结点都被访问完为止。下图所示,右边蓝色表示从 0 开始遍历节点的顺序,下面是记录距离 0 的距离,可知广度优先遍历能求出无权图的最短路径。下面用代码展示如何用广度优先遍历方式完成遍历,并且查询到最短路径。

2023-11-27 09:24:42 82

原创 寻路算法-

图的寻路算法也可以通过深度优先遍历 dfs 实现,寻找图 graph 从起始 s 点到其他点的路径,在上一小节的实现类中添加全局变量 from数组记录路径,from[i] 表示查找的路径上i的上一个节点。首先构造函数初始化寻路算法的初始条件,from = new int[G.V()] 和 from = new int[G.V()],并在循环中设置默认值,visited 数组全部为false,from 数组全部为 -1 值,后面对起始节点进行 dfs 的递归处理。

2023-11-12 23:42:34 136

原创 深度优先遍历与连通分量

深度优先遍历(Depth First Search)的主要思想是首先以一个未被访问过的顶点作为起始顶点,沿当前顶点的边走到未访问过的顶点。当没有未访问过的顶点时,则回到上一个顶点,继续试探别的顶点,直至所有的顶点都被访问过。下图示例的图从 0 开始遍历顺序如右图所示:无向图 G 的一个极大连通子图称为 G 的一个连通分量(或连通分支)。连通图只有一个连通分量,即其自身;非连通的无向图有多个连通分量。连通分量与连通分量之间没有任何边相连。深度优先遍历可以用来求连通分量。

2023-11-06 21:47:11 122

原创 相邻节点迭代器

图论中最常见的操作就是遍历邻边,通过一个顶点遍历相关的邻边。邻接矩阵的遍历邻边的时间复杂度为 O(V),邻接表可以直接找到,效率更高。对于这两种图的表达方式我们可以抽象出一个接口,生成这一套算法的框架,而不用去考虑底层是邻接表还是邻接矩阵。本小节写了一个测试用例 GraphReadTest,通过调用抽象接口实现图的展示,可以在 read 包查看。

2023-10-30 09:47:05 51

原创 图论基础和表示

图论(Graph Theory)是离散数学的一个分支,是一门研究图(Graph)的学问。图是用来对对象之间的成对关系建模的数学结构,由"节点"或"顶点"(Vertex)以及连接这些顶点的"边"(Edge)组成。值得注意的是,图的顶点集合不能为空,但边的集合可以为空。图可能是无向的,这意味着图中的边在连接顶点时无需区分方向。否则,称图是有向的。下面左图是一个典型的无向图结构,右图则属于有向图。本章节介绍的图都是无向图。

2023-10-23 00:13:30 1034

原创 并查集路径压缩

并查集里的 find 函数里可以进行路径压缩,是为了更快速的查找一个点的根节点。对于一个集合树来说,它的根节点下面可以依附着许多的节点,因此,我们可以尝试在 find 的过程中,从底向上,如果此时访问的节点不是根节点的话,那么我们可以把这个节点尽量的往上挪一挪,减少数的层数,这个过程就叫做路径压缩。如下图中,find(4) 的过程就可以路径压缩,让数的层数更少。

2023-10-15 23:34:52 112

原创 并查集 rank 的优化

上一小节介绍了并查集基于 size 的优化,但是某些场景下,也会存在某些问题,如下图所示,操作 union(4,2)。根据上一小节,size 的优化,元素少的集合根节点指向元素多的根节点。操作完后,层数变为4,比之前增多了一层,如下图所示:由此可知,依靠集合的 size 判断指向并不是完全正确的,更准确的是,根据两个集合层数,具体判断根节点的指向,层数少的集合根节点指向层数多的集合根节点,如下图所示,这就是基于 rank 的优化。

2023-09-24 23:40:23 92

原创 并查集 size 的优化

我们把如下图所示的并查集,进行 union(4,9) 操作。合并操作后的结构为:可以发现,这个结构的树的层相对较高,若此时元素数量增多,这样产生的消耗就会相对较大。解决这个问题其实很简单,在进行具体指向操作的时候先进行判断,把元素少的集合根节点指向元素多的根节点,能更高概率的生成一个层数比较低的树。构造并查集的时候需要多一个参数,数组,表示以为根的集合中元素个数。在进行合并操作时候,根据两个元素所在树的元素个数不同判断合并方向。优化后,合并结果如下,9 指向父节点 8。

2023-09-17 21:45:12 79

原创 并查集快速合并

对于一组数据,并查集主要支持两个动作:union(p,q) - 将 p 和 q 两个元素连接起来。find(p) - 查询 p 元素在哪个集合中。isConnected(p,q) - 查看 p 和 q 两个元素是否相连接在一起。在上一小节中,我们用数组的形式表示并查集,实际操作过程中查找的时间复杂度为,但连接效率并不高。本小节,我们将用另外一种方式实现并查集。把每一个元素,看做是一个节点并且指向自己的父节点,根节点指向自己。

2023-09-10 19:50:37 148

原创 并查集快速查找

查询元素所在的集合编号,直接返回数组值,的时间复杂度。合并元素和元素所属的集合, 合并过程需要遍历一遍所有元素, 再将两个元素的所属集合编号合并,这个过程是复杂度。

2023-09-04 20:58:39 88

原创 并查集基础

并查集是一种树型的数据结构,用于处理一些不相交集合的合并及查询问题。并查集的思想是用一个数组表示了整片森林(parent),树的根节点唯一标识了一个集合,我们只要找到了某个元素的的树根,就能确定它在哪个集合里。

2023-07-30 22:17:22 112

原创 二分搜索树的特性

我们使用二分搜索树的目的是通过查找 key 马上得到 value。minimum、maximum、successor(后继)、predecessor(前驱)、floor(地板)、ceil(天花板、rank(排名第几的元素)、select(排名第n的元素是谁)这些都是二分搜索树顺序性的表现。二叉搜索树可能退化成链表,相应的,二叉搜索树的查找操作是和这棵树的高度相关的,而此时这颗树的高度就是这颗树的节点数 n,同时二叉搜索树相应的算法全部退化成 O(n) 级别。二分搜索树在时间性能上是具有局限性的。

2023-07-23 22:38:08 153

原创 二分搜索树节点删除

本小节介绍二分搜索树节点的删除之前,先介绍如何查找最小值和最大值,以及删除最小值和最大值。以最小值为例(最大值同理):删除二分搜索树的最小 key 值,如果该节点没有右子树,那么直接删除,如果存在右子树,如图所示:删除节点 22,存在右孩子,只需要将右子树 33 节点代替节点 22。删除只有左孩子的节点,如下图节点 58。删除掉元素 58,让左子树直接代替 58 的位置,整个二分搜索树的性质不变。删除只有右孩子的节点,如下图节点 58。

2023-07-16 23:07:40 112

原创 二分搜索树层序遍历

二分搜索树的层序遍历,即逐层进行遍历,即将每层的节点存在队列当中,然后进行出队(取出节点)和入队(存入下一层的节点)的操作,以此达到遍历的目的。如果根节点为空,无可遍历;如果根节点不为空:先将根节点入队;先取出根节点放入队列取出 29,左右孩子节点入队队首 17 出队,孩子节点 14、23 入队。31 出队,孩子节点 30 和 43 入队最后全部出队Java 实例代码。

2023-05-28 23:43:40 552

原创 二分搜索树深度优先遍历

二分搜索树遍历分为两大类,深度优先遍历和层序遍历。

2023-05-21 21:34:53 42

原创 二分搜索树节点的查找

以下实例在二分搜索树中寻找 43 元素元素 43 比根节点 42 大,需要在右子节点继续比较。元素 43 比 59 小,需要在左子节点继续比较。元素 43 比 51 小,需要在左子节点继续比较。查找 51 的左子节点 43,正好和相等,结束。Java 实例代码。

2023-05-14 21:21:06 36

原创 二分搜索树节点的插入

Node 表示节点,count 代表节点的数量。以下实例向如下二分搜索树中插入元素 61 的步骤:(1)需要插入的元素 61 比 42 大,比较 42 的右子树根节点。(2)61 比 59 大,所以需要把 61 移动到 59 右子树相应位置,而此时为空,直接插入作为 59 的右子节点。插入操作也是一个递归过程,分三种情况,等于、大于、小于。

2023-04-16 23:09:15 40

原创 二分搜索树

一、概念及其介绍二分搜索树(英语:Binary Search Tree),也称为 二叉查找树 、二叉搜索树 、有序二叉树或排序二叉树。满足以下几个条件:若它的左子树不为空,左子树上所有节点的值都小于它的根节点。 若它的右子树不为空,右子树上所有的节点的值都大于它的根节点。它的左、右子树也都是二分搜索树。如下图所示:二、适用说明二分搜索树有着高效的插入、删除、查询操作。平均时间的时间复杂度为O(log n),最差情况为O(n)。二分搜索树与堆不同,不一定是完全二叉树

2023-04-09 23:07:40 311

原创 索引堆及其优化

索引堆是对堆这个数据结构的优化。索引堆使用了一个新的 int 类型的数组,用于存放索引信息。优化了交换元素的消耗。加入的数据位置固定,方便寻找。

2023-04-02 20:09:44 177

原创 优化堆排序

上一节的堆排序,我们开辟了额外的空间进行构造堆和对堆进行排序。这一小节,我们进行优化,使用原地堆排序。对于一个最大堆,首先将开始位置数据和数组末尾数值进行交换,那么数组末尾就是最大元素,然后再对W元素进行 shift down 操作,重新生成最大堆,然后将新生成的最大数和整个数组倒数第二位置进行交换,此时到处第二位置就是倒数第二大数据,这个过程以此类推。整个过程可以用如下图表示:Java 实例代码。

2023-03-26 23:32:08 83

原创 基础堆排序

一、概念及其介绍堆排序(Heapsort)是指利用堆这种数据结构所设计的一种排序算法。堆是一个近似 完全二叉树的结构,并同时满足堆积的性质:即子结点的键值或索引总是小于(或者大于)它的父节点。二、适用说明我们之前构造堆的过程是一个个数据调用 insert 方法使用 shift up 逐个插入到堆中,这个算法的时候时间复杂度是O(nlogn),本小节介绍的一种构造堆排序的过程,称为Heapify,算法时间复杂度为O(n)。三、过程图示。

2023-03-22 22:42:26 219

原创 堆的 shift down

本小节将介绍如何从一个最大堆中取出一个元素,称为 shift down,只能取出最大优先级的元素,也就是根节点,把原来的 62 取出后,下面介绍如何填补这个最大堆。第一步,我们将数组最后一位数组放到根节点,此时不满足最大堆的定义。调整的过程是将这个根节点 16 一步一步向下挪,16 比子节点都小,先比较子节点 52 和 30 哪个大,和大的交换位置。继续比较 16 的子节点 28 和 41,41 大,所以 16 和 41 交换位置。

2023-03-12 22:08:23 72

原创 堆的 shift up

堆的 shift up

2023-03-05 21:50:29 63

原创 堆的基本存储

一、概念及其介绍堆(Heap)是计算机科学中一类特殊的数据结构的统称。堆通常是一个可以被看做一棵完全二叉树的数组对象。堆满足下列性质:堆中某个节点的值总是不大于或不小于其父节点的值。堆总是一棵完全二叉树。二、适用说明堆是利用完全二叉树的结构来维护一组数据,然后进行相关操作,一般的操作进行一次的时间复杂度在之间,堆通常用于动态分配和释放程序所使用的对象。若为优先队列的使用场景,普通数组或者顺序数组,最差情况为O(n^2),堆这种数据结构也可以提高入队和出队的效率。入队出队普通数组。

2023-02-26 21:37:39 400

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除