算法基础课学习记录
Rati0nal
这个作者很懒,什么都没留下…
展开
-
记忆化搜索算法
概述记忆化搜索算法事实上是一种对递归算法的优化因为在递归算法中有很多重复计算,导致了非常离谱的时间和空间复杂度所以我们采用记住计算结果的方式,能很大程度上减少复杂度例题1 AcWing 901. 滑雪 例题2 AcWing 2067. 走方格...原创 2020-10-10 23:18:25 · 1484 阅读 · 0 评论 -
算法学习记录——暑假第二周(4)——常见数据结构(堆、栈、队列、映射等)与STL
文章目录原创 2020-09-14 13:06:47 · 131 阅读 · 0 评论 -
动态规划——数位统计、树形DP
数位统计DPAcWing 338. 计数问题区间DP的用处主要是统计某数字出现了多少次解决数位统计的问题基本上都需要用分情况讨论动态规划模型分析:原创 2020-08-02 15:50:13 · 212 阅读 · 0 评论 -
动态规划合集
动态规划分为如下几个模型:最常用的DP模型:背包问题线性DP区间DP、计数类DP树形DP、数位统计DP(某数字出现了多少次)状态压缩DP记忆化搜索动态规划优质博客链接:有图有详解:夜深人静写算法(二)- 动态规划翻译自TopCoder的一篇文章:动态规划:从新手到专家数学归纳法、贪心、DP对比以及DP讲解:六大算法之三:动态规划学习过程随笔:在学习DP上我经过了这四个阶...原创 2020-08-02 15:48:56 · 250 阅读 · 0 评论 -
动态规划——区间DP、计数类DP
区间DP区间DP的特点是状态表示的时候表示的是某一个区间的情况原创 2020-03-14 00:27:35 · 325 阅读 · 0 评论 -
动态规划——线性DP
所谓线性DP,就是递推方程是有一个明显的线性关系的,一维线性和二维线性都有可能。动态规划里的每一个状态都是一个多维(1-n维)的状态。比如说背包问题就是一个二维的问题,如果我们把它画出来的话会是一个二维矩阵的形式。而我们在求的时候,有一个明显的求的顺序:即一行一行地来求。这样的有线性顺序的叫做线性DP题目1:数字三角形AW898. 数字三角形给定一个如下图所示的数字三角形,从顶部出发...原创 2020-03-08 22:28:36 · 605 阅读 · 0 评论 -
最长上升子序列子序列问题
链接:AW896. 最长上升子序列 II题目详情给定一个长度为N的数列,求数值严格单调递增的子序列的长度最长是多少。输入格式第一行包含整数N。第二行包含N个整数,表示完整序列。输出格式输出一个整数,表示最大长度。数据范围1 ≤ N ≤ 100000,−109≤数列中的数≤109解法选择本题有两种解法,分别是DP和贪心解法,时间复杂度分别为O(n2)和O(nlogn)...原创 2020-03-07 21:39:10 · 273 阅读 · 0 评论 -
动态规划——背包问题
在写博客之前,先列出两个背包九讲链接以供参考yxc在B站上讲的背包九讲:背包九讲专题以及一篇非常经典的dd大牛的《背包九讲》0 1背包问题完全背包问题多重背包问题混合背包问题二维费用的背包问题分组背包问题背包问题求方案数求背包问题的方案有依赖的背包问题原创 2020-02-28 13:53:46 · 495 阅读 · 0 评论 -
多重背包问题的二进制优化
前情提要:动态规划——背包九讲——多重背包问题多重背包问题有N种物品和一个容量为V的背包。第i种物品最多有n[i]件可用,每件费用是c[i],价值是w[i]。这题目和完全背包问题很类似,特点是:每种物品都有自己特异的件数、花费、价值。朴素算法:每种物品有n[i]件可以取用,需要枚举每种物品选了多少件(枚举件数不能超过背包容量)for(int i=1;i<=n;i++) fo...原创 2020-02-27 20:19:10 · 1355 阅读 · 0 评论 -
数学知识——约数(因数)
约数,又称因数。整数a除以整数b(b≠0) 除得的商正好是整数而没有余数,我们就说a能被b整除,或b能整除a。a称为b的倍数,b称为a的约数。约数的判定:试除法众所周知,除了可能有一对同样的数相乘等于x以外,其余的一对约数一个小于sqrt(x)、一个大于sqrt(x)vector<int> get_divisors(int x){ vector<int>...原创 2020-02-13 14:02:51 · 1539 阅读 · 0 评论 -
数学知识——质数
质数是各种竞赛和考试中十分高频的考点,以下是我总结的一系列质数相关的算法质数的判定:试除法bool is_prime(int x)//时间复杂度O(sqrt(n)){ if (x < 2) return false; for (int i = 2; i <= x / i; i ++ ) if (x % i == 0) return false; ...原创 2020-02-08 23:11:49 · 224 阅读 · 0 评论 -
搜索与图论——最小生成树和二分图(2)
接上篇对最小生成树的相关算法进行的讲解此篇讲的是二分图的有关算法原创 2020-02-08 17:56:23 · 453 阅读 · 0 评论 -
搜索与图论——最小生成树和二分图(1)
内容梳理:最小生成树普利姆算法Prim克鲁斯卡尔算法Kruskal__稀疏图用这个朴素版Prim__稠密图堆优化版Prim__稀疏图二分图判断二分图:染色法求二分图的最大匹配:匈牙利算法最小生成树说明:根据实用主义原则,每个算法掌握一个效率最高的算法就行了,所以堆优化版Prim被淘汰。即稠密图用朴素版Prim、稀疏图用KruskalPrim算法时间复杂度O(n^2)此算法与dij...原创 2020-02-07 22:42:04 · 331 阅读 · 0 评论 -
搜索与图论---最短路
最短路问题一般分为两种情况单源最短路求一个点到其他所有点的最短距离多源(起点)汇(终点)最短路起点和终点都是不确定的知识结构图最短路单源最短路所有边权都是正数存在负权边多源汇最短路:Floyd算法朴素Dijstra算法堆优化版的Dijstra算法Bell-FordSPFA各个算法的事件复杂度和适用情况如下:朴素Dijstra算法堆优化版的Dijstra算法负权边的Bell-...原创 2020-02-07 12:57:39 · 183 阅读 · 0 评论 -
最短路问题:SPFA算法
看到最短路问题排除稠密图和多源汇之后直接用SPFA试时间复杂度方面:SPFA时间复杂度一般为O(m),最坏O(nm)。而堆优化版dijkstra算法为O(mlogn)。所以优先用SPFA,但如果遇到出题人设计数据卡SPFA的话再用Dijkstra。适用性方面:SPFA适用于单源最短路问题(是否存在负权边均可,且可用来判断负环)例题1:AW851:SPFA算法求最短路SPFA...原创 2020-02-06 23:47:41 · 305 阅读 · 0 评论 -
lowbit函数
lowbit函数——返回二进制数的最后一位1,在返回时附带其后面的0举例:x=1010 —> lowbit(x)=10 ==2x=101000 —> lowbit(x)=1000 ==8x=11111111000000 —> lowbit(x)=1000000 ==64即返回的数都是一个2的多少次方实现:由于数在计算机里以补码的方式储存,运用...原创 2020-02-02 22:33:33 · 1654 阅读 · 2 评论 -
搜索与图论---DFS和BFS、树与图的存储和遍历
深度优先搜索 DFS广度优先搜索 BFS树与图的存储树与图的深度优先遍历树与图的广度优先遍历拓扑排序DFS与BFSDFS尽可能往深处搜,当搜到头的时候才会回溯,然后继续向深处搜索。可以看成是一个非常执着的人两个DFS的重要概念:回溯和剪枝回溯剪枝分二分而是BFS一层一层地搜,这层遍历完了才会搜下面一层可以看成是一个稳重的人,每次都要...原创 2020-01-23 19:25:28 · 278 阅读 · 0 评论 -
搜索与图论---树与图的遍历
树与图的深度优先遍历DFS遍历方式每个节点只遍历一次,开一个标记数组——bool state[N];例题1:数的重心 AW846递归过程为int dfs(int u){ state[u]=true; int sum=1,res=0; for(int i=h[u];i!=-1;i=ne[i]) //一直走到链表底,符合DFS { int j=e[i]; ...原创 2020-01-18 13:28:22 · 684 阅读 · 0 评论 -
搜索与图论---数和图的存储
问题化简树是一种特殊的图(无环连通图)所以这里我们只需要讲图的存储图分为两种:有向图——只能按图的箭头所示方向连通无向图——两元素之间互通所以无向图又是一种特殊的有向图,我们在建立无向图边的时候建立两个互相连通的有向边就可以实现了现在,问题被化简为了:有向图的存储有向图有两种存储形式邻接矩阵(二维数组)邻接表(单链表)邻接表存储方式在插入新边的时候采用头插...原创 2020-01-17 17:40:26 · 189 阅读 · 0 评论 -
C++ STL学习笔记
淘汰需要老老实实些结构体来实现堆栈二叉树等数据结构的C语言等原创 2020-01-14 22:43:27 · 363 阅读 · 0 评论 -
模拟散列表(也称哈希表)过程分享
@模拟散列表过程分享#新的开始从这篇博客开始我会将在博客里分享我在acwing社区学习和刷题的过程,有任何问题希望能多多指正。以下是acwing社区主页acwing社区主页有部分截图截自yxc的讲解视频,侵删模拟散列表首先看一段摘自百度百科的话Hash,一般翻译做散列、杂凑,或音译为哈希,是把任意长度的输入(又叫做预映射pre-image)通过散列算法变换成固定长度的输出,该输出...原创 2020-01-11 22:50:42 · 241 阅读 · 0 评论