随笔分类 - ACwing / 算法基础课
发表于 2023-02-13 00:01阅读:0评论:0推荐:0
摘要:容斥原理 ,从n个数中选任意多个数的方案数 证明,$\left | S_{1}\cup S_{2} \dots \cup S_{n} \right | = \sum_{i} \left | S_
阅读全文 »
发表于 2023-02-12 23:58阅读:0评论:0推荐:0
摘要:高斯消元法 高斯消元能在O( )的时间复杂度内求解n个方程,n个未知数的多元线性方程组,即 $$ a_{11}x_{1}+a_{12}x_{2}+a_{13}x_{3}+\dots +a_{1n}x_{n} = b_{1}\a_{21}x_{1}+a_{22}x_{2}+a_{23}x_{3
阅读全文 »
发表于 2023-02-12 23:48阅读:0评论:0推荐:0
摘要:欧拉函数 什么是欧拉函数 欧拉函数 :1 - n 中与 n 互质的数的个数 例如: ,1 - 6 中与 6 互质的数为 1、5 a,b互质就是gcd(a,b) = 1 如何求解欧拉函数 对于一个数N,可以分解质因数为$N = P_{1}^{k_{1}} \ti
阅读全文 »
发表于 2023-02-12 23:46阅读:0评论:0推荐:0
摘要:质数 对所有的大于1的自然数字,定义了【质数/合数】这一概念。对于所有小于等于1的自然数,没有这个概念,它们既不是质数也不是合数。 质数的定义:对于大于1的自然数,如果这个数的约数只包含1和它本身,则这个数被称为质数,或者素数 质数的判定 试除法O(sqrt(n))对于一个数n,从2枚举到n-1,若
阅读全文 »
发表于 2023-02-12 23:37阅读:0评论:0推荐:0
摘要:最小生成树 最小生成树:由n个节点,和n-1条边构成的无向连通图被称为G的一颗生成树,在G的所有生成树中,边的权值之和最小的生成树,被称为G的最小生成树。(换句话说就是用最小的代价把n个点都连起来) 有两种常用算法: Prim算法(普利姆)朴素版Prim(时间复杂度O(n2),适用于稠密图)堆优化版
阅读全文 »
发表于 2023-02-12 23:28阅读:0评论:0推荐:0
摘要:最短路问题 常见的最短路问题可以分成两大类 单源最短路 多源汇最短路在最短路问题中,源点 也就是 起点,汇点 也就是 终点 单源最短路 单源最短路,指的是求一个点,到其他所有点的最短距离。(起点是固定的,单一的) 单元最短路问题又分成两种(n:点数,m:边数): 所有边权都是正数 朴素Dijkstr
阅读全文 »
发表于 2023-02-12 23:16阅读:0评论:0推荐:0
摘要:普通 DFS 与 BFS 概述 DFS:深度优先搜索(Depth-First-Search) BFS:宽度优先搜索(Breadth-First-Search) DFS和BFS的对比 DFS使用栈(stack)来实现,BFS使用队列(queue)来实现 DFS所需要的空间是树的高度h,而BFS需要的空
阅读全文 »
发表于 2023-02-12 23:12阅读:0评论:0推荐:0
摘要:哈希表 哈希表的作用:把一个比较大的空间,映射到一个比较小的空间。 一般做哈希运算时,取一个质数作为模,会使得冲突的概率降低 哈希表的存储 冲突解决方法 开放寻址法 拉链法 拉链法代码模板 Acwing - 840 模拟散列表 const int N = 100003; int h[N], e[N]
阅读全文 »
发表于 2023-02-12 23:09阅读:0评论:0推荐:0
摘要:Trie树(字典树) Trie树,又称字典树,是用来高效存储和查找字符串集合的一种数据结构查找时,可以高效的查找某个字符串是否在Trie树中出现过,并且可以查找出现了多少次 其逻辑结构如下:假设我们需要维护一个字符串集合,它需要支持两种操作 向集合插入一个字符串x 查询一个字符串在集合中出现了多少次
阅读全文 »
发表于 2023-02-12 22:58阅读:0评论:0推荐:0
摘要:链表 用数组模拟链表(链式向前星) 分类: 单链表,最主要用单链表写邻接表,用邻接表存储图或者树 双链表,优化某些问题 对于单链表,开2个数组val[N],nxt[N],其中val用来存每个链表节点的值,另1个数组nxt用来存每个节点的next指针。 用数组模拟静态单链表代码 int N = 1e5
阅读全文 »
发表于 2023-02-12 22:54阅读:0评论:0推荐:0
摘要:双指针 类型: 2个指针指向不同的序列,比如归并排序 2个指针指向同一个序列,用的比较多,比如快速排序 通用模板 俗称的枚举右端点,遍历左端点 for (int i = 0, j = 0; i < n; i++) { while (j < i && check(i,j)) j++; // 每道题的具
阅读全文 »
发表于 2023-02-12 22:49阅读:0评论:0推荐:0
摘要:高精度 A + B:两个大整数相加 A - B:两个大整数相减 A × b:一个大整数乘一个小整数 A ÷ b:一个大整数除以一个小整数 大整数的存储:用一个数组来存大整数的每一位上的数。 这里将大整数的个位,存到数组的第一位,大整数的最高位,存到数组的最后一位,即采用小端序 高精度加法 高精度加法
阅读全文 »
发表于 2023-02-12 22:42阅读:0评论:0推荐:0
摘要:第一章 基础算法一 快速排序 quick_sort(int q[], int l, int r) q是待排序数组,l是待排序区间的左边界,r是右边界 确定分界点x,可以取左边界的值q[l],或右边界的值q[r],或者中间位置的值q[(l + r)>>1] 根据基准值,调整区间,使得左半边区间的值全都
阅读全文 »