![](https://img-blog.csdnimg.cn/c8e2bef67ce14d5795698d48ed45e03b.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
算法基础知识
文章平均质量分 93
chasing the wind
NothingAtall.
学生一枚,记录一些学习心得
Give it to them, share them to others
展开
-
【详解】手撕 一维、二维、三维差分数组原理(附图解,模板,例题分析)
差分是一种处理数据巧妙而简单的方法,可以应用于区间修改和询问问题。例如,将给定的数据集合 A 分成很多区间,并对这些区间进行很多次操作,每次都是对某段区间内的所有元素做相同的加减操作,此时若一个个的遍历修改这段区间内的每个元素,就会非常的耗时,效率不高。为此,我们引入一个叫 “差分数组” B,当修改这段区间时,只需要对这段区间的 端点进行修改,就能将整段区间的元素修改,这个操作是非常平滑的,只需要 O(1) 的复杂度。当我们将所有修改操作进行完毕后,再利用差分数组,即可计算出新的数据集合 A。原创 2022-11-03 11:58:56 · 5372 阅读 · 55 评论 -
线段树详解(附图解,模板及经典例题分析)
线段树是一种常用来维护区间信息的数据结构 可以在 O(logn) 的时间复杂度内实现单点修改、区间修改、区间查询(区间求和,求区间的最大值,求区间的最小值)等操作 如下图所示,线段树是建立在区间基础上的树,树的每个节点都代表着一段区间【L,R】原创 2022-10-31 20:43:32 · 2726 阅读 · 7 评论 -
树状数组详解(附图解,模板及经典例题分析)
顾名思义,就是像树一样的数据结构,与 Trie 树类似,其结构类型为完全二叉树,节点排列非常的有规律,故我们直接可以使用数组来模拟,以达到简洁而高效的目的原创 2022-10-19 22:16:05 · 3107 阅读 · 14 评论 -
组合数四大相关求法详解(附模板)
Problem A 求组合数Ⅰ 给定 n 组询问,每组询问给定两个整数 a , b , 请你输出 $ C^b_a \ \ mod ~~(10^9 + 7)$ 的值思路代码模板乘法递推 – O(nlognnlognnlogn)Problem B 求组合数Ⅱ 给定 n 组询问,每组询问给定两个整数 a , b , 请你输出 $ C^b_a \ \ mod ~~(10^9 + 7)$ 的值如果不熟悉逆元求解的,可以点开这里食用 - > 乘法逆元(inverse element)及四大相关求法详解(含证原创 2022-10-02 11:23:13 · 736 阅读 · 1 评论 -
手撕并查集及其优化,三大相关模板实现详解(附图解)
一旦用了路径压缩,会破坏树的形态,因为原来的节点的父节点会直接压缩到祖先上,这样一来我们调用的时候父子关系发生了改变,造成了算法的错误。 所谓 ” 路径压缩 “ ,就是一种在执行 ” 查找 “ 过程中,扁平化树的结构的方法,使得在路径上的每一个节点都可以直接连在根节点上,为以后直接或则间接引用节点的操作加速。 当树的高度过高,查询元素的个数过多时, BF 做法 的时间效率显得过于吃力,此时我们需要对元素所在集合查询时的路径进行缩短优化,此时均摊的时间复杂度为。的所在集合的祖宗节点的父节点置为。原创 2022-09-24 20:27:38 · 311 阅读 · 1 评论 -
Trie树(字典树)详解及代码实现 -- 查询前缀,字符串出现的次数
是一种高效存储查找字符串集合的数据结构核心思想是利用空间换时间,利用字符串的公共前缀来降低查询时间的开销适用于 全是同类字符的情形原创 2022-09-18 15:51:00 · 738 阅读 · 3 评论 -
数论 -- 欧拉函数求解详解(含推导及证明)
为了使重叠部分不被重复计算,可以先不考虑重叠的情况,把包含于某内容中的所有对象的数目先计算出来,然后再把计数时重复计算的数目排斥出去,使得计算的结果既无遗漏又无重复设 S 是有穷集,当求某些 1 ~ n 中每一个数的欧拉函数时,若用公式法,那么时间复杂度 为O(n√n),太慢,故此我们需要批量预处理计算欧拉函数,这样就可以直接以 O(1) 查询 欧拉函数了。设 Φ(n) 表示 集合{ 0 , 1, ···,n - 1 }中与 n 互素的数的个数。**| 集合 | 表示集合中元素的个数 **原创 2022-09-13 11:45:05 · 1625 阅读 · 0 评论 -
数论 -- 欧几里得及其拓展算法详解
① 若 a, b 是整数,且 gcd(a , b) = d,那么对于任意的整数 x , y。ax+by 都一定是 d 的倍数,特别地,一定存在整数x,y,使 ax+by = d成立。首先,只有 m % gcd( a,b) == 0 ,即 当且仅当 m 是 a,b 最大公约数的倍数时,该线性方程才有解。欧几里得算法又称辗转相除法,是指用于计算两个非负整数a,b的最大公约数。公式 :gcd( a,b ) = gcd( b,a mod b )当 m 为1 时,由裴蜀定理推论可知,只有当 a,b互质才有解。原创 2022-09-11 11:50:07 · 335 阅读 · 0 评论 -
数论--约数相关知识及代码实现
{ 试除法求约数, 约数个数, 约数之和 } 设 a 和 b 是两个整数,如果 d | a 且 d | b,则称 d 为 a 与 b 的 公约数原创 2022-09-11 11:18:20 · 286 阅读 · 0 评论 -
乘法逆元(inverse element)及四大相关求法详解(含证明)
若整数 a,m 互质,并且对于任意的整数 b,如果满足 a | b ( a 能整除 b ),则存在一个整数 x,使得 b/a ≡ bx ( mod m ) ,则称 x 为 a 模 m 的乘法逆元,记为 a^{−1}( mod m ) 或者 inv( a )。原创 2022-07-30 21:06:45 · 8992 阅读 · 0 评论 -
数论 -- 质数判定及其筛法求解
对于一个合数 x,假设 pj 是 x 的最小质因子,在 i 枚举到 x 之前一定会枚举到 x / pj,故在循环语句中 x 中的合数一定会被筛掉,又每个数只会被筛一次,所以整个过程是线性的。设 a,b 时两个整数,且 b ≠ 0,如果存在整数c,使得 a = b * c,则称。:如果 x 除了它本身还能被其他数整除,那么它不是素数,反之则是素数。,即 x 的质因子成对存在,故只需枚举每对中较小的那一个就行,即。a,即 a 是 b 的倍数,b 是 a 的因子。每当扫描到一个数时,若它尚未被标记,则它不能被。原创 2022-09-05 21:30:05 · 472 阅读 · 0 评论