![](https://img-blog.csdnimg.cn/20201014180756922.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
Acwing算法基础课
文章平均质量分 94
抠脚的大灰狼
这个作者很懒,什么都没留下…
展开
-
Acwing - 算法基础课 - 笔记(贪心 · 二)
文章目录贪心(二)排序不等式绝对值不等式推公式贪心(二)这是算法基础课的最后一节,预计先把后面几道贪心的例题讲完,随后讲解一下时间复杂度的分析。排序不等式Acwing - 913. 排队打水假设各个同学的打水时间为:3 6 1 4 2 5 7并且就按照这个顺序来打水。当第一个同学打的时候,后面所有同学都要等他,所以等待的总时长要加上一个3 * 6,第二个同学打的时候,后面所有同学也都要等他,所以要加上个6 * 5,以此类推,所有同学等待的总时长为3 * 6 + 6 * 5 + 1 * 4 +原创 2022-01-05 10:27:48 · 1076 阅读 · 0 评论 -
Acwing - 算法基础课 - 笔记(贪心 · 一)
贪心(一)贪心预计讲两节,所有算法问题中,贪心和DP是最难的,甚至贪心比DP还要难。一个贪心算法的正确性的证明通常是很难的。贪心也没有一个常规的套路,更没有代码模板。DP虽然没有代码模板,但它至少有常用的套路。贪心这一章的几道例题,代码都非常短,讲课主要是以证明为主。区间问题区间选点Acwing - 905. 区间选点贪心问题,如果没什么思路的话,可以先随便试一下,然后举几个样例,来验证自己所试的方法是不是正确。这道题可以按照如下的思路来考虑:将每个区间按照右端点从小到大排序从前往后依次原创 2022-01-04 11:00:57 · 1965 阅读 · 1 评论 -
Acwing - 算法基础课 - 笔记(动态规划 · 三)
文章目录动态规划(三)数位统计DP状态压缩DP蒙德里安的梦想最短哈密顿路径树形DP记忆化搜索动态规划(三)本节也是以例题讲解形式为主,主要包括了:数位统计DP,状态压缩DP,树形DP,记忆化搜索。数位统计DP计数问题题目链接给定两个数a和b,求解a和b之间的所有数字中0-9出现的次数。比如a=10,b=13,则a和b之间共有4个数:10,11,12,13其中,0出现1次,1出现5次,2出现1次,3出现1次。这道题更像是一道奥数问题,最重要的一步是:分情况讨论。先考虑实现一个函数:cou原创 2021-12-01 15:57:22 · 1243 阅读 · 0 评论 -
Acwing - 算法基础课 - 笔记(动态规划 · 二)
文章目录动态规划(二)线性DP数字三角形最长上升子序列最长公共子序列区间DP石子合并动态规划(二)今天是讲线性DP和区间DP线性DP状态转移方程呈现出一种线性的递推形式的DP,我们将其称为线性DP。DP问题的时间复杂度怎么算?一般是状态的数量乘以状态转移的计算量DP问题,是基础算法中比较难的部分,因为它不像其他算法,有个代码模板可以用于记忆。DP问题更偏向于数学问题,它没有一套代码模板,但是有一种思考方式。遇到DP问题,通常我们可以从2个方面进行思考:状态表示考虑是一维还是二维(f[i]原创 2021-11-18 15:58:50 · 1450 阅读 · 0 评论 -
Acwing - 算法基础课 - 笔记(动态规划 · 一)
文章目录动态规划(一)0-1 背包完全背包多重背包分组背包动态规划(Dynamic Programming,简称DP)章节从两个角度进行讲解常用的DP模型背包问题DP的不同类型线性DP区间DP状态压缩DP树形DP计数类DP数位统计DP动态规划没有代码模板,它更偏向数学,其比较核心的部分在于状态的表示和状态的转移。共3小节,第一小节预计讲解背包问题。动态规划(一)什么是背包问题?背包问题的本质是,给定一堆物品和一个背包,每个物品有 体积 和 价值两种属性,在一些原创 2021-11-04 11:09:04 · 1023 阅读 · 0 评论 -
Acwing - 算法基础课 - 笔记(数学知识 · 四)(补)
容斥原理 & 简单博弈论原创 2023-01-18 09:32:35 · 1055 阅读 · 1 评论 -
Acwing - 算法基础课 - 笔记(数学知识 · 三)(补)
高斯消元 & 组合数原创 2023-01-18 09:30:43 · 956 阅读 · 0 评论 -
Acwing - 算法基础课 - 笔记(数学知识 · 二)
文章目录数学知识(二)欧拉函数公式法筛法欧拉定理快速幂扩展欧几里得算法中国剩余定理数学知识(二)这一小节主要讲解的内容是:欧拉函数,快速幂,扩展欧几里得算法,中国剩余定理。这一节内容偏重于数学推导,做好心理准备。欧拉函数公式法什么是欧拉函数呢?欧拉函数用 ϕ(n)\phi(n)ϕ(n) 来表示,它的含义是,111 到 nnn 中与 nnn 互质的数的个数比如,ϕ(6)=2\phi(6) = 2ϕ(6)=2,解释:1到6当中,与6互质的数只有1,5,共两个数。两个数 aaa , bbb 互原创 2021-07-23 14:57:49 · 1032 阅读 · 0 评论 -
Acwing - 算法基础课 - 笔记(数学知识 · 一)
文章目录数学知识(一)质数质数的判定分解质因数朴素思路优化筛选质数朴素筛法埃氏筛法线性筛法小结约数求一个数的所有约数求约数个数求约数之和求最大公约数第四章的内容是数学知识,主要讲解了数论组合计数高斯消元简单博弈论数学知识(一)这一小节主要讲解的是数论,主要包括了质数,约数,欧几里得算法。质数对所有的大于1的自然数字,定义了【质数/合数】这一概念。对于所有小于等于1的自然数,没有这个概念,它们既不是质数也不是合数。质数的定义:对于大于1的自然数,如果这个数的约数只包含1和它本身,则这个原创 2021-07-15 17:29:58 · 1228 阅读 · 4 评论 -
Acwing - 算法基础课 - 笔记(图论 · 三)
文章目录搜索与图论(三)最小生成树Prim算法Kruskal算法二分图染色法匈牙利算法搜索与图论(三)这一节讲解的是最小生成树和二分图最小生成树什么是最小生成树?首先,给定一个节点数是n,边数是m的无向连通图G。则由全部的n个节点,和n-1条边构成的无向连通图被称为G的一颗生成树,在G的所有生成树中,边的权值之和最小的生成树,被称为G的最小生成树。有两种常用算法:Prim算法(普利姆)朴素版Prim(时间复杂度O(n2),适用于稠密图)堆优化版Prim(时间复杂度O(mlogn),适原创 2021-07-02 17:07:46 · 704 阅读 · 1 评论 -
Acwing - 算法基础课 - 笔记(图论 · 二)
文章目录搜索与图论(二)单源最短路多源汇最短路算法思路朴素Dijkstra堆优化版DijkstraBellman-FordSPFAFloyd搜索与图论(二)这一节讲的是最短路。常见的最短路问题,一般分为两大类:单源最短路多源汇最短路在最短路问题中,源点也就是起点,汇点也就是终点。单源最短路单源最短路,指的是求一个点,到其他所有点的最短距离。(起点是固定的,单一的)根据是否存在权重为负数的边,又分为两种情况所有边的权重都是正数通常有两种算法朴素Dijkstra时间复杂度O原创 2021-06-28 09:05:45 · 928 阅读 · 1 评论 -
Acwing - 算法基础课 - 笔记(图论 · 一)
文章目录搜索与图论(一)DFS和BFS概述DFSBFS树与图的存储树与图的深度优先遍历树与图的宽度优先遍历拓扑排序搜索与图论(一)本节讲的是,普通的DFS和BFS,树和图的存储,拓扑排序。DFS和BFS概述DFS:深度优先搜索(Depth-First-Search)BFS:宽度优先搜索(Breadth-First-Search)DFS和BFS的对比DFS使用栈(stack)来实现,BFS使用队列(queue)来实现DFS所需要的空间是树的高度h,而BFS需要的空间是2h (DFS的原创 2021-06-23 19:50:40 · 1234 阅读 · 2 评论 -
Acwing - 算法基础课 - 笔记(数据结构 · 三)
文章目录数据结构(三)哈希表哈希表的存储字符串哈希STLvectorpairstringqueuepriority_queuestackdequesetmapbitset数据结构(三)本节讲解的是哈希表,和C++的STL容器的基本使用哈希表哈希表的作用:把一个比较大的空间,映射到一个比较小的空间。一般做哈希运算时,取一个质数作为模,会使得冲突的概率降低哈希表的存储冲突解决方法开放寻址法拉链法练习题:Acwing - 840 模拟散列表拉链法#include<iostream原创 2021-06-17 11:53:08 · 1225 阅读 · 4 评论 -
Acwing - 算法基础课 - 笔记(数据结构 · 二)
文章目录数据结构(二)Trie树并查集堆数据结构(二)本节讲解的内容是,Trie树(字典树),并查集,堆(Dijkstra算法可以使用堆进行优化)Trie树Trie树,又称字典树,是用来高效存储和查找字符串集合的一种数据结构查找时,可以高效的查找某个字符串是否在Trie树中出现过,并且可以查找出现了多少次其逻辑结构如下假设我们需要维护一个字符串集合,它需要支持两种操作向集合插入一个字符串x查询一个字符串在集合中出现了多少次假设我们有一个字符串集合,包含如下的字符串abcd,abc,原创 2021-06-11 12:01:32 · 1450 阅读 · 4 评论 -
Acwing - 算法基础课 - 笔记(数据结构 · 一)
文章目录数据结构(一)链表栈和队列单调栈单调队列KMP算法数据结构(一)本节讲解的是链表与邻接表栈与队列看毛片(kmp)算法链表使用数组模拟单链表,双链表使用数组模拟的链表,为静态链表,对单链表,开2个数组,其中1个用来存每个链表节点的值,另1个数组用来存每个节点的next指针。对双链表,开3个数组,其中1个用来存每个链表节点的值,另外2个数组用来存每个节点的prev和next指针单链表,用到比较多的是邻接表,邻接表经常用来存储图和树。(会在后续第三章讲图论时带出)单链表练习题:A原创 2021-05-11 17:21:01 · 1715 阅读 · 2 评论 -
Acwing - 算法基础课 - 笔记(基础算法 · 三)
文章目录基础算法(三)双指针小结位运算离散化区间合并基础算法(三)这节讲的是双指针算法,位运算,离散化,区间合并双指针2个指针指向不同的序列比如归并排序2个指针指向同一个序列比如快速排序对于形如for(int i = 0; i < n; i++) { for(int j = 0; j < n; j++) { }}这一类的双层循环,可能可以使用双指针来进行优化,从而能够把时间复杂度从O(n2)降低到O(n),比如求一个数组中最长原创 2021-05-07 16:53:42 · 1529 阅读 · 0 评论 -
Acwing - 算法基础课 - 笔记(基础算法 · 二)
文章目录基础算法(二)高精度高精度加法高精度减法高精度乘法高精度除法前缀差分基础算法(二)这节讲的是高精度,前缀,和差分。高精度A + B:两个大整数相加A - B:两个大整数相减A × b:一个大整数乘一个小整数A ÷ b:一个大整数除以一个小整数A × B 和 A ÷ B 见的不多,课程中没有讲。大整数的存储:用一个数组来存大整数的每一位上的数。这里将大整数的个位,存到数组的第一位,大整数的最高位,存到数组的最后一位,即采用小端序。高精度加法A + B算法题目:Acwi原创 2021-05-03 22:51:28 · 1046 阅读 · 1 评论 -
Acwing - 算法基础课 - 笔记(基础算法 · 一)
基础算法(一)本节讲解的是排序和二分,排序讲解了快排和归并,二分讲解了整数二分和浮点数二分。排序快排quick_sort(int q[], int l, int r)q是待排序数组,l是待排序区间的左边界,r是右边界基本思路选取一个基准值x可以取左边界的值q[l],或右边界的值q[r],或者中间位置的值q[l + r >> 1]⭐️根据基准值,调整区间,使得左半边区间的值全都≤x,右半边区间的值全都≥x采用双指针,左指针i从左边界l开始,往右扫描,右指针j从右边界原创 2021-05-03 15:23:07 · 4386 阅读 · 10 评论