- 博客(20)
- 收藏
- 关注
原创 通俗解析:如何通过生动比喻理解线性代数中的方程、矩阵和向量空间
理解线性无关和线性相关线性无关不仅仅意味着无法用一个向量表示另一个向量,更广泛地,它意味着不存在任何向量的非平凡线性组合等于零向量。线性相关意味着至少一个向量可以表示为其他向量的线性组合,这通常指示冗余或不必要的信息。关于维度的理解在数学中,维度是度量一个空间所需的坐标数量,或者说是形成该空间基的最小向量数。维度的这一定义有助于我们理解向量加入到集合中对空间的“填充”程度。正交性和线性无关性尽管正交向量组肯定是线性无关的,线性无关的向量不必须是正交的。
2024-05-08 21:17:06
897
原创 静态数据的快速处理:ST表解析与C++实现[模版题:P3865 【模板】ST 表 题解]
模版题:P3865 【模板】ST 表 题解]用于解决RMQ问题(Range Maximum/Minimum Query);
2024-04-16 14:21:38
1933
原创 理解图表示方法:邻接矩阵、邻接表和边列表的应用
不同的图表示方法对应于不同的图的特性和算法需求。在实现特定的图算法时,选择最合适的表示方法是至关重要的,这将直接影响算法的效率和实现的复杂性。
2024-04-10 17:31:04
412
1
原创 全面探索图算法:从Dijkstra到Floyd-Warshall的最短路径解析
在选择算法时,如果你的应用涉及到负权重边或需要计算所有顶点对的最短路径,Floyd-Warshall算法是合适的选择。而如果你需要求解单源问题,并且边的权重为非负,Dijkstra算法将提供更优的性能。
2024-04-10 17:15:27
394
1
原创 深入解析Floyd-Warshall算法: 动态规划求解全源最短路径
时间少的空间多,空间少的时间多,但代码都复杂,时间空间都多的代码简单,这是能量守恒吗?!Floyd-Warshall算法是一种计算图中所有顶点对之间最短路径的动态规划算法。它能够处理带有正或负权重边的图,但不能处理包含负权重循环的图。
2024-04-10 17:09:01
592
1
原创 深入理解Dijkstra算法:寻找最短路径的关键步骤
[2024-04-09(Prim普利姆算法)]]说人话就是:prim是维护点到集合的最近距离,而dijkstra是维护点到的最近距离。
2024-04-10 13:03:06
481
1
原创 掌握C++ STL:深入理解 resize 和 assign 方法
resize更适合于动态调整vector的大小,而assign则在需要重新设置vector的内容时发挥作用。
2024-04-10 12:33:05
571
1
原创 探索图论的奥秘:Kruskal与Prim算法的贪心之路
贪心不难,难的是得出正确的结果,难的是不忘初心。因为很多时候,局部最优解的叠加并不是全局最优解。只有那些得到全局最优解的人,才是贪出了成绩,贪出了水平,贪出了风格。
2024-04-09 20:50:45
381
原创 Prim普利姆算法实现及代码
2、选择边:在所有连接最小生成树和非树顶点的边中,选择一条权重最小的边。这条边和它所连接的非树顶点被加入到最小生成树中;1、初始化:选择一个起点,将其加入最小生成树集合(最初只有这一个顶点);从图的某一顶点开始,逐步增长最小生成树,知道树包含了所有顶点。3、重复2,直到所有顶点都被加入到最小生成树中。
2024-04-09 20:46:34
222
原创 Kruskal(克鲁斯卡尔)算法具体实现
将图中所有边按照权重进行排序,然后从权重最小的边开始,依次考虑每条边,并将边添加到生成树中,条件是添加这条边不会在树中创建一个环。主函数需要提供图的edge数组以及节点的个数(自己数太麻烦了),先创建并查集,通过并查集来判断是否成环,如果需要,还可以创建数组来储存最小生成树。一般记录最小生成树的权值即可。以边为中心来构建最小生成树。
2024-04-09 16:55:52
364
原创 深入解析与实现:快速幂算法及其模运算优化
计算形如3^100次方这种大幂运算,朴素算法要一个一个乘100多遍,时间复杂度为O(n),很低效。并且由于计算机除法是向下取整,所以在后面的偶数部分实现了exponent减1。这样子的时间负责度就是O(logN)了。那result来储存奇数多余的部分。但如果我们换个思路,9=3^2。计算3^100%100。
2024-04-09 15:08:23
366
原创 并查集(Disjoint Set Union)详解与C++实现
如果要判断两个元素是否在同一个集合里,或者添加一个元素到某集合,只能把二维数组都遍历一遍。这还是一个粗略的想法,如果沿着这个思路去实现代码,非常负责,因为管理集合还需要很多逻辑int n=1005;//根据题目节点数量而定//并查集初始化i<n;i++){//并查集里寻根的过程//判断u和v是否找到同一个根u=find(u);v=find(v);//将v->u这条边加入并查集u=find(u);v=find(v);
2024-04-06 20:38:48
649
1
原创 四个均值不等式的傻瓜记忆法
1、先记住第二个是算数,一阶,两数相加a+b,除以二才是cab22ab2、左边是平方和,听起来很高级,其实就是两个数的平方加到一起,要凑到c,那就得先除2变成c^2,然后开平方,就是ca2b222a2b23、算数右边的就是老朋友几何,ab是c^2开平方就是cab\sqrt{ab}ab4、调和,名字很抽象,排在最后一个先倒数之和1a1baba∗ba1b1a∗bab,再除2ab2ab。
2024-04-01 16:17:24
649
1
原创 深入理解欧几里得算法:求最大公约数的原理、证明和C++实现
假设 A 和 B 的最大公因数为 G,即 G=gcd(A,B)。设 A 被 B 除后的余数为 R(即 A=Bq+R)。首先,任何 A 和 B 的公因数也是 R 的公因数。因为 R=A−Bq,所以 A 和 B 的任何公因数同时也能整除 R。其次,任何 B 和 R 的公因数也是 A 的公因数。因为 A=Bq+R,所以任何同时整除 B 和 R 的数也能整除 A。(A,B)的最大公因数等价于(B,R)的最大公因数。结论1的意思是:A和B的公因数也是R的因数。结论2的意思是:B和R的公因数也是A的因数。
2024-04-01 09:23:56
717
原创 一文掌握堆(Heap)全貌:原理深度解析、动态演示核心操作与实际应用场景
自下而上建堆方法的优势在于它利用了堆的完全二叉树特性,从底层开始逐步构造子堆,确保了每个子树自身都已经是一个合法的堆,然后再逐步合并这些小堆。这样,在处理父节点时,其子节点已经是有序的,只需要做少量必要的调整即可。因此,相比于自顶向下插入每个元素再逐一上滤的方法,自下而上的建堆方法更加高效。
2024-03-31 17:58:51
2063
1
原创 堆排序算法中的关键决策:大根堆与小根堆的选择及其权衡考量
在某些场景下,小根堆可能更合适,而在另一些场景下,大根堆可能更方便。:使用大根堆,从堆顶移除元素后,直接放置在数组的后端,无需额外操作即可得到升序数组。:不断移除堆顶(最小)元素并将其存放到数组的后端,然后重新调整堆以保持堆的属性。随着元素的不断移除,堆变小,而排序后的部分则增长。:不断移除堆顶(最大)元素并将其存放到数组的后端,然后重新调整堆以保持堆的属性。:在理论上,大根堆和小根堆的性能是一样的,两者在构建和调整过程中的时间复杂度都是 O(n log n)。在小根堆中,最小的元素总是位于堆的根部。
2024-03-31 17:55:35
272
1
原创 解锁算法竞赛秘籍:树状数组(Fenwick Tree)的魅力(先看动画)
int lowbit(int x){//获取元素二进制最低位//结论二,更新/增加值[在这里插入图片描述](https://img-blog.csdnimg.cn/direct/03da1813645a4188a28a48a8825778e3.png#pic_center)while(p
2024-03-26 20:31:10
504
原创 C++新手笔记:文件输入操作
fout.open(filename,打开模式),缺省值(即默认操作)会截断文件内容(也就是把原本文件的内容覆盖)特别注意:如果不想覆盖原内容,而是在文件末尾追加,那就用。等价于ios::out和ios::trunc;
2024-03-21 21:02:15
246
3
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人