![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
算法竞赛知识点
文章平均质量分 61
主要是算法竞赛各类算法知识点的博客
lq mm
这个作者很懒,什么都没留下…
展开
-
高斯消元(解线性方程组)
高斯消元(南昌理工ACM)简介高斯消元法,是线性代数规划中的一种算法,可用来为线性方程组求解。但其算法十分复杂,不常用于加减消元法,求出矩阵的秩,以及求出可逆方阵的逆矩阵。不过,如果有过百万条等式时,这个算法会十分省时。如图对于方程,除去各未知数,将各数排在一起,成为矩阵,可将他的增广矩阵列出; 之后从上往下经过初等行列变换进一步将该矩阵化为上三角矩阵(最简阶梯型矩阵):初等行列变换:1、把某一行乘上一个非零的数;2、交换某两行;3、把某行的若干倍加到另一行上去;注:初等行列变换不影响原创 2021-01-17 09:16:01 · 5304 阅读 · 2 评论 -
并查集及其优化(南昌理工学院ACM集训队)
并查集(c++)-----南昌理工学院ACM集训队例题为洛谷P3367(并查集(模板))简介并查集:在一些有N个元素的集合应用问题中,我们通常是在开始时让每个元素构成一个单元素的集合,然后按一定顺序将属于同一组的元素所在的集合合并,其间要反复查找一个元素在哪个集合中。这一类问题近几年来反复出现在信息学的国际国内赛题中,其特点是看似并不复杂,但数据量极大,若用正常的数据结构来描述的话,往往在空间上过大,计算机无法承受;即使在空间上勉强通过,运行的时间复杂度也极高,根本就不可能在比赛规定的运行时间(1~3原创 2020-08-17 10:59:13 · 1170 阅读 · 2 评论 -
字符串匹配——KMP算法(luogu P3375)
KMP字符串匹配(南昌理工学院ACM集训队)前言在许多算法问题中,都需要我们在一个字符串主串中寻找他的子串所在的位置;对于传统的字符串匹配,对主串首部与模式串首部对齐,单个字符进行匹配,当匹配错误时,模式串相对与主串向前进一位,重头开始匹配(如图);传统的匹配方法从开头一直匹配到末尾,这样的时间复杂度为O(n*m);注:m与n分别为主串与模式串的长度;而KMP算法可以将时间复杂度缩短到O(n+m);算法简介KMP算法:充分利用模式串中字符的重复性,在比较时实现最大限度的移动量;KMP算法原创 2020-08-31 16:11:24 · 235 阅读 · 0 评论 -
最小生成树之Kruskal(C++)
最小生成树——Kruskal算法最小生成树Kruskal算法算法思想算法简介算法复杂度算法实现最小生成树最小生成树:简单来说就是,带权图中遍历所有点所经过边权之和最小;带权图:边赋以权值的图称为带权图(生成树的各边的权值总和称为该树的权);注:最小生成树中不形成回路,联通n个点恰巧经过n-1条边Kruskal算法算法思想贪心选取最短的边来组成一颗生成树算法简介kruskal算法:取出带权图中所有带权边,并对它们进行排序,依次取出权值最小的边;若此边与之前选取的边(存放在集合T中)无法形成原创 2020-07-26 17:56:24 · 2010 阅读 · 5 评论 -
树状数组入门小结(c++)
树状数组——南昌理工学院ACM集训队博主对于数据结构以及算法的学习修行尚浅,写博客更多的是为了日后的巩固与复习,博文中若是出现一些错误欢迎大家指出,O(∩_∩)O!前言今天来介绍一下树状数组,作为一种重要的数据结构,它又有怎样的魅力;提到树状数组,大家都会想到另一种数据结构——线段树;关于线段树的内容,可以去看我的另一篇博客(线段树入门(c++)(≧∇≦)ノ)———>传送门对于这两种数据结构,就像是一种父与子的关系:树状数组的作用被线段树完全涵盖, 凡是可以使用树状数组解决的问题, 使用线原创 2020-09-03 16:26:19 · 222 阅读 · 0 评论 -
冒泡排序(南昌理工ACM集训队)
冒泡排序简介排序:在算法竞赛中,排序是必不可少的一部分,c++选手通常使用stl中的 sort() 进行排序。但对于初学者来说,冒泡排序是算法竞赛上的必经之路。冒泡排序:冒泡排序(Bubble Sort),是一种计算机科学领域的较简单的排序算法。它重复地走访过要排序的元素列,依次比较两个相邻的元素,如果顺序(如从大到小、首字母从Z到A)错误就把他们交换过来。走访元素的工作是重复地进行直到没有相邻元素需要交换,也就是说该元素列已经排序完成。这个算法的名字由来是因为越小的元素会经由交换慢慢“浮”到原创 2020-11-11 20:28:56 · 184 阅读 · 0 评论 -
乘法逆元( ̄︶ ̄)↗(南昌理工学院ACM集训队)
乘法逆元(c++)——南昌理工学院ACM集训队逆元简介在进行大数计算时,为防止超出空间通常要用到取模(mod)操作;在各类计算操作中,加法、减法、乘法的取模操作都满足分配律;a % p + b % p = ( a % p + b % p ) % p;a % p - b % p = ( a % p - b % p ) % p;a % p * b % p = ( a % p * b % p ) % p;而除法的取模运算显然不符合分配律;由此,推出了逆元这慨念;定义:在mod p的条件下,对于整数原创 2020-08-14 09:15:20 · 1061 阅读 · 3 评论 -
线段树入门(c++)(≧∇≦)ノ
线段树入门(代码方面采用C++)别问,问就是只会C++。。。线段树概念线段树是一种二叉搜索树,它将一个区间(编号1~n)划分成一些单元区间(arr),每个单元区间对应线段树中的一个叶结点;对于线段树中的每一个结点都代表了一条线段,每一个非叶子节点[a,b],它的左儿子表示的区间为[a,(a+b)/2],右儿子表示的区间为[(a+b)/2+1,b]。对于叶子节点,a=b,叶子结点表示对应区间(arr)内的存储数据;线段树是平衡二叉树,最后的子节点数目为N,即整个线段区间的长度。线段树的优点在于,可以原创 2020-07-30 10:01:31 · 734 阅读 · 3 评论 -
最短路径———Dijkstra算法(南昌理工学院ACM集训队)
简介最短路径:从图中的某个顶点出发到达另外一个顶点的所经过的边的权重和最小的一条路径,称为最短路径算法:迪杰斯特拉算法(Dijkstra)是由荷兰计算机科学家狄克斯特拉于1959 年提出的,因此又叫狄克斯特拉算法。是从一个顶点到其余各顶点的最短路径算法,解决的是有权图中最短路径问题(主要用于解决带权图中的单源最短路径)迪杰斯特拉算法(Dijkstra)运用贪心思想,从起点开始,每次遍历到始点距离最近且未访问过的顶点的邻接节点,直到遍历到终点;算法思想由于算法运用贪心的思想,首先声明一个数组dis与原创 2020-08-07 14:43:13 · 1628 阅读 · 3 评论