自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 java入门

文章目录1.基础语法基本数据类型整数类型浮点类型字符类型布尔类型类型转换运算符算术运算符关系运算符逻辑运算符赋值运算符三元运算符字符串运算符位运算符分支if 语句语法switch 语句语法循环while循环do while循环for循环三种循环方式的区别break与continue关键字数组数组的声明数组的初始化数组的访问数组的遍历多维数组2.面向对象封装继承重写this关键字super关键字多态接口和抽象类抽象类接口static和final关键字staticfinal3.常用APIString包装类基本类

2022-05-05 12:13:13 728

原创 并查集路径压缩

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

2022-04-09 09:01:58 392

原创 并查集快速查找,快速合并

并查集基础一、概念及其介绍并查集是一种树型的数据结构,用于处理一些不相交集合的合并及查询问题。并查集的思想是用一个数组表示了整片森林(parent),树的根节点唯一标识了一个集合,我们只要找到了某个元素的的树根,就能确定它在哪个集合里。二、适用说明并查集用在一些有 N 个元素的集合应用问题中,我们通常是在开始时让每个元素构成一个单元素的集合,然后按一定顺序将属于同一组的元素所在的集合合并,其间要反复查找一个元素在哪个集合中。这个过程看似并不复杂,但数据量极大,若用其他的数据结构来描述的话

2022-04-08 12:36:37 368

原创 并查集size rank的优化

并查集 size 的优化按照上一篇文章的思路,我们把如下图所示的并查集,进行 union(4,9) 操作。合并操作后的结构为:可以发现,这个结构的树的层相对较高,若此时元素数量增多,这样产生的消耗就会相对较大。解决这个问题其实很简单,在进行具体指向操作的时候先进行判断,把元素少的集合根节点指向元素多的根节点,能更高概率的生成一个层数比较低的树。构造并查集的时候需要多一个参数,sz 数组,sz[i] 表示以 i 为根的集合中元素个数。// 构造函数public UnionFin

2022-04-08 10:15:13 135

原创 二分搜索树节点删除以及二分搜索树的特性

本文介绍二分搜索树节点的删除之前,先介绍如何查找最小值和最大值,以及删除最小值和最大值。以最小值为例(最大值同理):查找最小 key 值代码逻辑,往左子节点递归查找下去:...// 返回以node为根的二分搜索树的最小键值所在的节点private Node minimum(Node node){ if( node.left == null ) return node; return minimum(node.left);}...删除二分搜索树的最小...

2022-04-06 11:11:48 149

原创 二分搜索树遍历

目录二分搜索树深度优先遍历Java 实例代码二分搜索树层序遍历Java 实例代码二分搜索树深度优先遍历二分搜索树遍历分为两大类,深度优先遍历和层序遍历。深度优先遍历分为三种:先序遍历(preorder tree walk)、中序遍历(inorder tree walk)、后序遍历(postorder tree walk),分别为:1、前序遍历:先访问当前节点,再依次递归访问左右子树。 2、中序遍历:先递归访问左子树,再访问自身,再递归访问右子树。 3、后序遍历:先

2022-04-05 11:13:18 753

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

目录二分搜索树节点的插入Java 实例代码二分搜索树节点的查找Java 实例代码二分搜索树节点的插入首先定义一个二分搜索树,Java 代码表示如下:BST.javapublic class BST<Key extends Comparable<Key>, Value> { // 树中的节点为私有的类, 外界不需要了解二分搜索树节点的具体实现 private class Node { private Key k

2022-04-04 10:58:36 226

原创 二分搜索树

目录一、概念及其介绍二、适用说明三、二分查找法过程图示四、Java 实例代码一、概念及其介绍二分搜索树(英语:Binary Search Tree),也称为 二叉查找树 、二叉搜索树 、有序二叉树或排序二叉树。满足以下几个条件:若它的左子树不为空,左子树上所有节点的值都小于它的根节点。 若它的右子树不为空,右子树上所有的节点的值都大于它的根节点。它的左、右子树也都是二分搜索树。如下图所示:二、适用说明二分搜索树有着高效的插入、删除、查询操作。平均时

2022-04-03 14:21:17 54

原创 索引堆及其优化

目录一、概念及其介绍二、适用说明三、结构图示四、Java 实例代码一、概念及其介绍索引堆是对堆这个数据结构的优化。索引堆使用了一个新的 int 类型的数组,用于存放索引信息。相较于堆,优点如下:优化了交换元素的消耗。 加入的数据位置固定,方便寻找。二、适用说明如果堆中存储的元素较大,那么进行交换就要消耗大量的时间,这个时候可以用索引堆的数据结构进行替代,堆中存储的是数组的索引,我们相应操作的是索引。三、结构图示我们需要对之前堆的代码实现进行改造

2022-04-03 11:53:36 1062

原创 堆排序(java)

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

2022-04-02 11:19:54 4484

原创 堆的shiftup以及shiftdown

目录堆的 shift upJava 实例代码堆的 shift downJava 实例代码堆的 shift up本小节介绍如何向一个最大堆中添加元素,称为 shift up。假设我们对下面的最大堆新加入一个元素52,放在数组的最后一位,52大于父节点16,此时不满足堆的定义,需要进行调整。首先交换索引为 5 和 11 数组中数值的位置,也就是 52 和 16 交换位置。此时 52 依然比父节点索引为 2 的数值 41 大,我们还需要进一步挪位置。这时

2022-04-01 10:32:13 1090

原创 堆的基本储存

目录一、概念及其介绍二、适用说明三、结构图示四、Java 实例代码一、概念及其介绍堆(Heap)是计算机科学中一类特殊的数据结构的统称。堆通常是一个可以被看做一棵完全二叉树的数组对象。堆满足下列性质:堆中某个节点的值总是不大于或不小于其父节点的值。 堆总是一棵完全二叉树。二、适用说明堆是利用完全二叉树的结构来维护一组数据,然后进行相关操作,一般的操作进行一次的时间复杂度在 O(1)~O(logn) 之间,堆通常用于动态分配和释放程序所使用的对象。若为优

2022-04-01 09:50:57 99

原创 双路快速排序以及三路排序算法

目录双路快速排序一、概念及其介绍二、适用说明三、过程图示四、Java 实例代码三路排序算法一、概念及其介绍二、适用说明四、Java 实例代码双路快速排序一、概念及其介绍双路快速排序算法是随机化快速排序的改进版本,partition 过程使用两个索引值(i、j)用来遍历数组,将 <v 的元素放在索引i所指向位置的左边,而将 >v 的元素放在索引j所指向位置的右边,v 代表标定值。二、适用说明时间和空间复杂度同随机化快速排序。 对于有大

2022-03-31 11:15:47 1022

原创 随机化快速排序(java)

一、概念及其介绍快速排序由 C. A. R. Hoare 在 1960 年提出。随机化快速排序基本思想:通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列。二、适用说明快速排序是一种比较快速的排序算法,它的平均运行时间是 O(nlogn),之所以特别快是由于非常精练和高度优化的内部循环,最坏的情形性能为 O(n^2)。像归并一样,快速排序也是一种

2022-03-31 11:01:23 1273

原创 归并排序(java实现)

目录一、概念及其介绍二、适用说明三、过程图示四、Java 实例代码一、概念及其介绍归并排序(Merge sort)是建立在归并操作上的一种有效、稳定的排序算法,该算法是采用分治法(Divide and Conquer)的一个非常典型的应用。将已有序的子序列合并,得到完全有序的序列;即先使每个子序列有序,再使子序列段间有序。若将两个有序表合并成一个有序表,称为二路归并。二、适用说明当有 n 个记录时,需进行 logn 轮归并排序,每一轮归并,其比较次数不超过 n,元素移

2022-03-30 12:08:34 7535 1

原创 希尔排序(java实现)

一、概念及其介绍希尔排序(Shell Sort)是插入排序的一种,它是针对直接插入排序算法的改进。希尔排序又称缩小增量排序,因 DL.Shell 于 1959 年提出而得名。它通过比较相距一定间隔的元素来进行,各趟比较所用的距离随着算法的进行而减小,直到只比较相邻元素的最后一趟排序为止。二、适用说明希尔排序时间复杂度是 O(n^(1.3-2)),空间复杂度为常数阶 O(1)。希尔排序没有时间复杂度为 O(n(logn)) 的快速排序算法快 ,因此对中等大小规模表现良好,但对规模非常大的数

2022-03-29 19:14:44 5171

原创 插入排序(java)

java插入排序

2022-03-29 12:15:55 52

原创 数据结构与算法

数据结构:数据结构(英语:data structure)是计算机中存储、组织数据的方式。数据结构是一种具有一定逻辑关系,在计算机中应用某种存储结构,并且封装了相应操作的数据元素集合。它包含三方面的内容,逻辑关系、存储关系及操作。不同种类的数据结构适合于不同种类的应用,而部分甚至专门用于特定的作业任务。例如,计算机网络依赖于路由表运作,B 树高度适用于数据库的封装。常见的数据结构栈(Stack):栈是一种特殊的线性表,它只能在一个表的一个固定端进行数据结点的插入和删除操作。 队列(Queue):

2022-03-29 11:03:34 132

空空如也

空空如也

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

TA关注的人

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