![](https://img-blog.csdnimg.cn/0b32f4d4447c474ea174ba65e84e4913.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
数据结构
文章平均质量分 60
数据结构
小俱的一步步
莫忧莫惧莫回头
展开
-
N皇后,回溯【java】
可以把八皇后问题扩展到n皇后问题,即在n×n的棋盘上摆放n个皇后,使任意两个皇后都不能处于同一行、同一列或同一斜线上。显然,棋盘的每一行上可以而且必须摆放一个皇后,所以,n皇后问题的可能解用一个n元向量X=(x1, x2, …, xn)表示,其中,1≤i≤n并且1≤xi≤n,即第i个皇后放在第i行第xi列上。2.从第一行开始,遍历该行的每一个位置,符合的填为“Q”,不符合的跳过,再递归下一行,遍历完下一行后,将该行当前位置又重置为“(2)将上面图例(四皇后问题)按回溯算法搜索并输出全部的解。原创 2023-12-11 13:12:21 · 265 阅读 · 15 评论 -
数塔问题【java】
一直走到最底层,要求找出一条路径,使得路径上的数值和最大。问题描述:从数塔的顶层出发,在每一个结点可以选择。从最低层向上遍历每次记录最大值,直到顶层;逆向求出所走路径,即从顶向底。原创 2023-11-27 15:49:10 · 265 阅读 · 12 评论 -
多段图的最短路径【java】
设图G=(V, E)是一个带权有向图,如果把顶点集合V划分成k个互不相交的子集Vi (2≤k≤n, 1≤i≤k),使得E中的任何一条边(u, v),必有u∈Vi,v∈Vi+m (1≤i≤k, 1<i+m≤k),则称图G为多段图,称s∈V1为源点,t∈Vk为终点。多段图的最短路径问题求从源点到终点的最小代价路径。最后使用parent追溯所走的路径,将点存储到栈中。(2)设计动态规划法的填表过程和求解方法;(3)设计测试数据,并讨论所得结果。(1)掌握动态规划法的设计思想;(1)确定多段图的存储结构。原创 2023-11-27 15:32:50 · 288 阅读 · 1 评论 -
图Graph的存储、图的广度优先(BFS)和深度优先遍历(DFS)
图是由一组顶点和一组能够将两个顶点相连的边组成的。图的类型:顶点之间的连接方向:无方向-->无向图有方向-->有向图 ;边上是否有权值:有-->带权图 无-->无权图;分别是:无向无权、有向无权、无向有权、有向有权图。图的遍历⭐️1.广度优先遍历算法思想:某个顶点V0出发,首先访问这个顶点,然后访问V0的各个未曾访问的邻接点W1,W2,…,Wk。然后,依次从W1,W2,…,Wk出发访问各自未被访问的邻接点。这个过程重复进行,直到全部顶点都被访问为止。原创 2023-11-22 00:44:55 · 246 阅读 · 9 评论 -
高精度算法【Java】(待更新中~)
在Java中可以使用BigInteger进行高精度计算,除此也可以仿照竖式相加的计算原理进行计算。BigInteger 提供所有 Java 的基本整数操作符的对应物,并提供 java.lang.Math 的所有相关方法。另外,BigInteger 还提供以下运算:模算术、GCD 计算、质数测试、素数生成、位操作以及一些其他操作.核心思想:将两个数转为字符数组,都倒序后,进行对应位相乘,将有进位的值加到下次计算中。原创 2023-11-20 00:09:20 · 997 阅读 · 5 评论 -
计数排序【java实现】
排序特点:输入元素大于等于零,当输入的元素是 n 个 0 到 k 之间的整数时,它的运行时间是 O(n + k)。计数排序不是比较排 序,排序的速度快于任何比较排序算法。适合数据范围小的数组。核心思想:找出数组中最大值, 创建hash数组,数组长度为最大值max+1,以数组下标表示排序元素的值,hash数组元素的值表示排序元素出现的次数,进行统计出现的次数,最后进行回填。原创 2023-11-09 14:53:14 · 100 阅读 · 8 评论 -
残缺的棋盘-分治法【java】
在一个2^k*2^k 个方格组成的棋盘中,恰有一个方格与其他方格不同,称该方格为一特殊方格,且称该棋盘为一特殊棋盘。在棋盘覆盖问题中,要用图示的4种不同形态的L型骨牌覆盖给定的特殊棋盘上除特殊方格以外的所有方格,且任何2个L型骨牌不得重叠覆盖。原创 2023-10-31 18:42:32 · 195 阅读 · 15 评论 -
0-1背包问题——穷举法+二维dp数组+回溯(java)
穷举法:每件物品装还是不装有两种选择,使用0-表示不装,1表示装,n件物品就有2^n种,穷举2^n种,找到符合符合weight背包容量的且为价值最大的方式。因此dp[i][w]取装物品 i dp[i-1][w-wt[i-1]]+val[i-1] 和 不装物品i dp[i-1][w] 的。dp[i][w]数组含义:对于前i个物品,当前背包容量为w时,可装下的最大值是dp[i][w]。dp[i-1][w-wt[i-1]]+val[i-1]:装物品i的价值。dp[i-1][w]:不装物品i的价值。原创 2023-10-30 22:35:48 · 671 阅读 · 5 评论 -
2-3树—>红黑树【java实现】
添加完成后的2-3树,将出现三节点的左边记为红色,下来就可以向左下拉变成红黑树了。节点可以存放一个元素或两个元素,因此孩子节点可以为两个或三个。5.根节点到任意叶子结点的黑色节点的数目相同。4.红色节点的孩子节点一定都是黑色节点。3.叶子结点是(null)黑色。1.节点不是黑色就是红色。添加时需要调整的五种情况。下拉后变为一棵红黑树。原创 2023-10-30 09:39:51 · 543 阅读 · 10 评论 -
平衡二叉树(AVL)【java实现+图解】
一种自平衡二叉搜索树,它是在每个节点上增加一个平衡因子,然后通过调整树中节点的高度来保持树的平衡。平衡因子是左子树的高度减去右子树的高度,用它可以表示出当前节点的平衡程度。删除:每删除一个节点后,也需要更新输的高度,平衡因子可能改变,依据平衡因子对二叉树进行调整。添加:每次添加一个节点后更新输的高度,平衡因子可能改变,依据平衡因子对二叉树进行调整;判断是否是平衡二叉树:通过判断每个子树的平衡因子的是否在[-1,1]区间内。,当一个节点的平衡因子绝对值大于1时,这个节点就被称为不平衡节点。原创 2023-10-24 00:07:59 · 843 阅读 · 14 评论 -
线段树【java实现】
平衡二叉树,数组中的元素都存储在叶子结点中,如图是一个求区间最大值的线段树。已知数组arr[11,5,3,7,8,2] ,树的高度与数组的长度关系为:为了方便我们用代码实现线段树,将创建的数为满二叉树,如下图举例。原创 2023-10-17 18:41:20 · 214 阅读 · 6 评论 -
单调栈(力扣496、LCR03、503)
单调栈:数据存储顺序单调递增或单调递减解决适用问题:左边和右边比当前小(大)且最近的。原创 2023-10-05 18:27:19 · 228 阅读 · 5 评论 -
插入、希尔、归并、快速排序(java实现)
插入排序排序原理:1.把所有元素分为两组,第一组是有序已经排好的,第二组是乱序未排序。2.将未排序一组的第一个元素作为插入元素,倒序与有序组比较。3.在有序组中找到比插入元素小或者大的元素,将插入元素放入该位置,后面元素向后移动一位。时间复杂度:O(n^2)稳定性:当A与B相等,排序前A若在B前,排序后A仍然在B前,就说明该排序是稳定的。插入排序:稳定希尔排序排序原理:1.选择一个增长量h,按照h将数据分组。2.每组进行插入排序。3.减少增长量h直到h=1,重复步原创 2023-08-12 11:20:49 · 1058 阅读 · 8 评论 -
图的深度优先遍历和广度优先遍历
广度优先:先访问所有直接相邻的节点,然后访问所有与这些节点相邻的节点,以此类推,直到遍历完整个图。深度优先:每次访问当前节点后,首先访问当前节点的第一个邻接矩阵。原创 2023-08-10 16:33:44 · 145 阅读 · 8 评论 -
数据结构之数组
1.数据结构是程序的组成部分:数据结构 + 算法 = 程序2.数据结构学什么?数据结构是一门基础学科,研究数据如何在计算机中组织和存储3.学习数据结构有什么用?了解数据在电脑中的组织和存储,就能利用不同特点数据的存储方式来高效的获取数据和修改数据。4.数据结构分为三类:线性结构:数组,队列,栈,链表,哈希表......树形结构:二叉树,二分搜索树,红黑树,AVL树,堆,Trie,线段树,并查集.....图形结构:邻接矩阵、邻接表......原创 2023-03-26 20:03:11 · 464 阅读 · 1 评论 -
数据结构之栈与队列
栈:后进先出队列:先进先出原创 2023-04-09 10:31:31 · 72 阅读 · 0 评论