小超超爱学习9937
码龄1年
关注
提问 私信
  • 博客:11,325
    11,325
    总访问量
  • 32
    原创
  • 72,815
    排名
  • 161
    粉丝
  • 0
    铁粉

个人简介:记录学习算法路上的点点滴滴

IP属地以运营商信息为准,境内显示到省(区、市),境外显示到国家(地区)
IP 属地:山东省
  • 加入CSDN时间: 2023-11-20
博客简介:

xcc134679的博客

查看详细资料
  • 原力等级
    当前等级
    3
    当前总分
    199
    当月
    2
个人成就
  • 获得187次点赞
  • 内容获得0次评论
  • 获得69次收藏
  • 代码片获得125次分享
创作历程
  • 32篇
    2024年
成就勋章
兴趣领域 设置
  • 编程语言
    c++
  • 数据结构与算法
    算法数据结构线性回归链表贪心算法动态规划排序算法
创作活动更多

2024 博客之星年度评选报名已开启

博主的专属年度盛宴,一年仅有一次!MAC mini、大疆无人机、华为手表等精美奖品等你来拿!

去参加
  • 最近
  • 文章
  • 代码仓
  • 资源
  • 问答
  • 帖子
  • 视频
  • 课程
  • 关注/订阅/互动
  • 收藏
搜TA的内容
搜索 取消

ST表 C++

将原始数据按照固定长度划分为若干个区间,以每个区间的最小元素作为该区间的代表值。然后,根据代表值的特点,利用动态规划的方式计算出每个区间段的最小值。构建好ST表后,可以进行各种区间查询操作,比如查询某个区间的最小值、最大值、平均值等。查询操作的时间复杂度为O(log n),其中n为原始数据的长度。ST表的优势在于它的查询效率高,并且不需要额外的存储空间。它可以应用于各种区间查询问题,如最小值查询、最大值查询、区间和查询等。ST表是一种简洁、高效的数据结构,用于解决区间查询问题。
原创
发布博客 2024.10.18 ·
261 阅读 ·
2 点赞 ·
0 评论 ·
0 收藏

线性基 高斯消元法 C++

线性基的基本思想是使用一个长度固定的二进制向量表示一组数的线性组合关系。通过不断向线性基中插入新的数,可以将这组数的线性组合关系表示为线性基中的若干个线性无关的向量的异或和。线性基是一种数据结构,用于高效地解决一类与线性无关性有关的问题。具体而言,线性基可以用于快速求解一组非负整数线性组合的最大值、最小值,或者进行异或运算的一些操作。
原创
发布博客 2024.09.09 ·
310 阅读 ·
1 点赞 ·
0 评论 ·
0 收藏

三维前缀和 C++

如果我们用一个三维数组prefixSum[x][y][z]来表示三维前缀和,其中x、y和z分别表示三维数组的三个维度上的索引。三维前缀和是指在三维数组中,对于每个位置上的元素,计算该位置及其左上角所有元素的和。三维区间求和,考验空间想象能力。
原创
发布博客 2024.08.31 ·
497 阅读 ·
4 点赞 ·
0 评论 ·
1 收藏

有向图游戏 SG函数【博弈论】C++

如果当前节点v有若干个后继节点,分别为v1,v2,...,v_n,那么SG(v)为所有后继节点的SG值的异或和。即:SG(v) = SG(v1) XOR SG(v2) XOR ... XOR SG(v_n)需要注意的是,有向图游戏中的SG函数只适用于无环图。- SG函数具有性质:SG(v) = SG(w),当且仅当v和w的后继节点的SG值相同。设当前节点为v,那么SG(v)为当前局面的SG值。- 如果SG(v)为0,则当前局面为必败态(先手必输);- 如果当前节点v没有后继节点,则SG(v) = 0。
原创
发布博客 2024.08.29 ·
358 阅读 ·
3 点赞 ·
0 评论 ·
0 收藏

尼姆(Nim)游戏【博弈论】C++

开始时,有一堆物体,物体的数量可以是任意的。尼姆游戏的关键在于找到赢的策略。根据“尼姆和”的原理,当堆中物体的数量异或(XOR)运算结果为0时,第一个玩家将处于劣势。许多复杂的博弈问题都可以通过尼姆游戏的分析来解决,因为尼姆游戏具有简单而清晰的规则,并且可以应用于各种不同的情境。游戏的目标是通过移动游戏中的物体或减少物体的数量来使对手无法继续移动,从而获得胜利。然而,在实际的尼姆游戏中,玩家可以通过巧妙地选择物体的数量来制造劣势,从而获得胜利。这需要对游戏的状态进行分析,并找到一个优势的策略。
原创
发布博客 2024.08.26 ·
1005 阅读 ·
14 点赞 ·
0 评论 ·
4 收藏

倍增算法 最近公共祖先(LCA)C++

2. 查询:给定两个节点x和y,首先判断它们的深度d,将深度较大的节点向上移动到与另一个节点处于同一深度。预处理需要O(n log n)的时间来计算每个节点的祖先节点,查询阶段需要O(log n)的时间来计算最近公共祖先节点。这可以通过自底向上的动态规划来实现。第一级祖先节点是每个节点的父节点,第二级祖先节点是每个节点的父节点的父节点,以此类推。最近公共祖先问题是指在一棵有根树中,给定两个节点,找到它们的最近公共祖先节点。最近公共祖先节点是指在树中同时是这两个节点的祖先节点,并且离这两个节点的距离最近。
原创
发布博客 2024.08.18 ·
379 阅读 ·
4 点赞 ·
0 评论 ·
0 收藏

区间DP 石子合并 C++

石子合并问题是一个经典的区间DP问题,可以用区间DP方法解决。给定一行n个石子,每个石子有一个价值,现要将石子合并成若干堆,每次只能选择相邻的两堆进行合并,合并的得分为两堆石子的总价值,合并后的新堆的价值为得分。dp[i][j] = max{dp[i][k] + dp[k+1][j] + sum[i][j]},其中i
原创
发布博客 2024.08.17 ·
287 阅读 ·
1 点赞 ·
0 评论 ·
0 收藏

01背包,完全背包 C++

具体而言,给定一组商品,每个商品有一个重量和一个价值,以及一个背包的总容量,要求在不超过背包容量的情况下,选择商品,使得它们的总价值最大化。对于每个容量j,如果j大于等于w,则可以将物品i放入背包,更新dp[j]为dp[j-w]+v和dp[j]中的较大值。其中,dp[j] 表示容量为 j 的背包能够装下的最大价值,dp[j - wi] 表示在放入物品 i 的情况下,容量为 j - wi 的背包能够装下的最大价值。其中,dp[i][j]的值表示在前i个物品中,能够装入容量为j的背包中的物品的最大总价值。
原创
发布博客 2024.08.17 ·
348 阅读 ·
4 点赞 ·
0 评论 ·
10 收藏

匈牙利算法 二分图最大匹配 C++

增广路径是一个交错的路径,其中非匹配边和匹配边交替出现,起点和终点都是未匹配的节点。通过不断寻找增广路径,可以将匹配的数量不断增加。二分图是指将一个图的节点分为两个不相交的集合,图中的边只能连接两个集合中的节点。3. 如果该节点是已匹配的节点,将该节点的匹配节点作为新的起点,继续进行深度优先搜索,直到找到一条增广路径或遍历完所有相邻节点。2. 对于起点的每个相邻节点,如果该节点是未匹配的节点,直接将其匹配到起点,并结束该路径的搜索。匈牙利算法的时间复杂度为O(M*N),其中M是边的数量,N是节点的数量。
原创
发布博客 2024.08.16 ·
240 阅读 ·
5 点赞 ·
0 评论 ·
0 收藏

二分图判定 染色法 C++

染色法的思想是从一个顶点开始,将其染色为一种颜色,然后将与它相邻的顶点染成另一种颜色。接着,以与它相邻的顶点为起点,递归地将它们的相邻顶点染成与当前顶点不同的颜色。如果在染色过程中遇到相邻顶点已经被染成与当前顶点相同的颜色,说明该图不是二分图。4. 如果染色过程中遇到相邻顶点已经被染成与当前顶点相同的颜色,说明该图不是二分图。3. 以与起点相邻的顶点为起点,递归地进行染色操作,直到所有顶点都被染色。2. 对于与起点相邻的顶点,将其染成与起点不同的颜色。1. 选择一个顶点作为起点,并将其染成一种颜色。
原创
发布博客 2024.08.16 ·
313 阅读 ·
9 点赞 ·
0 评论 ·
0 收藏

单调栈,单调队列 C++

单调栈的基本思想是利用栈的特性,在元素入栈时进行一些操作,以保持栈内元素的单调性。在入栈过程中,如果新元素比栈顶元素更小,那么栈顶元素就不可能成为后续元素的最大值或满足特定条件的值,因此可以将其出栈。单调队列的特点是,队列中的元素保持递增或递减的顺序。当新元素进入队列时,首先将队列中比新元素小(或大)的元素移除,然后将新元素插入队列。它的特点是元素在栈内的顺序是单调的,通常为单调递增或单调递减。通过维护单调队列,在每次窗口滑动时,可以通过队列的头部元素即可获取窗口中的最大值或最小值。
原创
发布博客 2024.08.16 ·
411 阅读 ·
12 点赞 ·
0 评论 ·
0 收藏

三分法 C++

它通过将搜索区间分为三个部分并比较函数在两个划分点的取值,逐步缩小搜索范围来确定极值的位置。三分算法的时间复杂度为O(log N),其中N为搜索区间的长度。它的优势在于可以在单峰函数中快速找到极值的位置,但不适用于非单调函数或多峰函数的寻优问题。4. 比较两个划分点的函数取值,如果其中一个划分点的函数值更大(或更小),则极值在该划分点的同侧。5. 根据比较结果更新搜索区间,将较小(或较大)的划分点所在的区间作为新的搜索区间。7. 返回搜索区间的中点作为极值的近似位置。3. 计算两个划分点的函数取值。
原创
发布博客 2024.08.16 ·
296 阅读 ·
2 点赞 ·
0 评论 ·
0 收藏

整型二分,浮点二分法 C++

需要注意的是,由于浮点数的精度问题,如果要查找的目标值非常接近区间的边界,可能无法准确地找到目标值,而是得到一个非常接近但不完全相等的浮点数。另外,在实际应用中,可能还需要设置一个终止条件来避免无限循环,例如在已知的精度范围内无法再继续缩小区间。浮点二分法的基本思想是通过将区间不断地二分,来逐步缩小查找范围,直到找到目标值或确定目标值不存在。- 如果M等于目标值,那么找到了目标值,返回M。- 如果M小于目标值,那么将L设为M,继续二分。- 如果M大于目标值,那么将R设为M,继续二分。
原创
发布博客 2024.08.16 ·
366 阅读 ·
8 点赞 ·
0 评论 ·
0 收藏

高精度乘法,除法 C++

需要注意的是,高精度乘法和除法的实现需要考虑多种情况,如两个大数的符号、除数为零等。此外,由于高精度乘法和除法的计算复杂度较高,对于大规模数据的运算,可能会导致程序运行时间较长。高精度乘法的时间复杂度为O(n^2),其中n为大数的位数。与高精度乘法类似,高精度除法也通过数组或字符串来表示大数,通过循环和借位操作来实现除法运算。高精度除法的时间复杂度为O(n^2),其中n为大数的位数。由于计算机内部的整数类型通常有位数的限制,无法直接处理大数运算,高精度乘法和除法技术应运而生。
原创
发布博客 2024.08.15 ·
310 阅读 ·
6 点赞 ·
0 评论 ·
0 收藏

线段树的建立,修改,查询,更新 C++

首先需要找到代表该区间的节点,如果当前节点代表的区间正好等于要查询的区间,则直接返回节点的值。否则,根据当前节点代表的区间和要查询的区间的关系,将查询操作转移到当前节点的左子节点或右子节点,并将子节点返回的信息合并起来。首先需要找到需要修改的节点,如果当前节点代表的区间正好等于要修改的区间,则直接更新节点的值。否则,根据当前节点代表的区间和要修改的区间的关系,将修改操作转移到当前节点的左子节点或右子节点。问题:给定一个区间,需要对该区间的某个特定信息进行更新操作,如修改某个元素的值、增加某个元素的值等。
原创
发布博客 2024.08.15 ·
943 阅读 ·
29 点赞 ·
0 评论 ·
12 收藏

求组合数 C++

递推法求组合数是一种的方法。它通过将问题分解成较小规模的子问题,并利用已经求解过的子问题的结果进行递推求解。快速幂求组合数是利用快速幂算法来求解幂的问题,而组合数可以表示为一个幂的形式。卢卡斯定理是用来求解组合数模质数的问题。它通过将组合数中的分子和分母都分解成质因数的幂次,然后利用模运算的性质进行计算。- 卢卡斯定理的优点是可以高效地求解组合数模质数的问题,但它。- 递推法求组合数的优点是可以求解任意数量的组合数,但是它的。
原创
发布博客 2024.08.13 ·
207 阅读 ·
4 点赞 ·
0 评论 ·
3 收藏

数学(判断质数,求质因数,求组合数 ) C++

【代码】数学(判断质数,求质因数,求组合数 ) C++
原创
发布博客 2024.08.13 ·
128 阅读 ·
3 点赞 ·
0 评论 ·
0 收藏

Kruskal算法 C++

Kruskal算法的时间复杂度主要取决于边的排序过程,通常为O(E log E),其中E为图中的边数。在每次选择边的过程中,需要保证加入的边不会造成生成树中出现环路,即边的两个端点不在同一个连通分量中。1. 算法需要对所有边进行排序,排序的时间复杂度为O(E log E),其中E为边的数量,因此在边的数量较大时,算法的效率会降低。3. 依次遍历排序后的边,如果加入该边不会导致生成树中出现环路,则将该边加入生成树,并将边的两个端点合并到同一个连通分量中。最小生成树是一个无向图的生成树,其边的权重之和最小。
原创
发布博客 2024.08.12 ·
255 阅读 ·
8 点赞 ·
0 评论 ·
2 收藏

Prim算法 C++

2. 算法每次选择一个顶点加入最小生成树,因此对于图中每个顶点都需要进行判断和更新,而不仅仅是处理边。通过维护一个数组来标记是否访问过顶点,以及一个数组来记录每个顶点的最小生成树的边。1. 算法的时间复杂度较高,在稀疏图的情况下,边的数量远小于顶点数量的平方,算法的时间复杂度接近O(V^3)。2. 算法的时间复杂度为O(V^2),其中V是顶点的数量。Prim算法的时间复杂度为O((V+E)logV),其中V为顶点数,E为边数。3. 算法保证了生成的最小生成树是原图的子图,即包含了所有顶点。
原创
发布博客 2024.08.12 ·
371 阅读 ·
4 点赞 ·
0 评论 ·
6 收藏

Floyd算法 C++

对于每对节点i和j,检查节点k是否可以通过更短的路径成为节点i到j的中间节点。即,检查节点i到节点j的路径长度是否大于节点i到节点k再到节点j的路径长度。如果是,则更新节点i到节点j的路径长度为节点i到节点k再到节点j的路径长度。初始时,矩阵的值为图中节点之间的直接距离,如果两个节点直接相连,则距离为边的权重;相比于Dijkstra算法和Bellman-Ford算法,Floyd算法可以处理有负权重的图,但是由于时间复杂度较高,适用于节点数量较少的情况。最终得到的矩阵即为所有节点对之间的最短路径长度。
原创
发布博客 2024.08.12 ·
138 阅读 ·
1 点赞 ·
0 评论 ·
0 收藏
加载更多