摘要:
珂朵莉树 0x00 绪言 Update:2022/11/23 原来文章大部分都是拼凑内容(现在也是.....),质量过低,所以进行了一次小换血,主要是对代码风格以及阅读体验进行了优化。 温馨提示:如果你幻想找到非指针珂朵莉树代码,那你可以停下了,就看这一篇文章即可,虽然这篇文章代码实现也是指针。但你 阅读全文
摘要:
树的存储结构 1.双亲表示法 双亲表示法即采用一组连续的空间表示,其中根结点的双亲用-1表示。 双亲表示法的存储结构 #define MAX_TREE_SIZE 50 //树中最多的结点数 typedef struct{ char data; //数据元素 int parent; //双亲位置 }P 阅读全文
摘要:
DFS连通性模型 1. 算法分析 使用dfs来判断是否两个点连通,也可以通过dfs来做计数 2.例题 一天Extense在森林里探险的时候不小心走入了一个迷宫,迷宫可以看成是由 n∗n 的格点组成,每个格点只有2种状态,.和#,前者表示可以通行后者表示不能通行。 同时当Extense处在某个格点时, 阅读全文
摘要:
双向广搜 所谓双向广搜,就是初始结点向目标结点和目标结点向初始结点同时扩展,直至在两个扩展方向上出现同一个结点,搜索结束。它适用的问题是,扩展结点较多,而目标结点又处在深沉,如果采用单纯的广搜解题,搜索量巨大,搜索速度慢是可想而知的,同时往往也会出现内存空间不够用的情况,这时双向广搜的作用就体现出来 阅读全文
摘要:
概念 广度优先搜索算法(Breadth-First Search,BFS)是一种盲目搜寻法,目的是系统地展开并检查图中的所有节点,以找寻结果。换句话说,它并不考虑结果的可能位置,彻底地搜索整张图,直到找到结果为止。BFS并不使用经验法则算法。 泛洪算法Flood Fill 泛洪算法图形处理中的一个填 阅读全文
摘要:
多源BFS 多源BFS,即同时存在多个起点,然后要求计算出图中任意一个点距离所有起点的最短距离,即图中任意点到每个起点的距离的最小值。 和一般的BFS的区别在于存在多个起点,而我们可以对所有的起点建立一个虚拟超级起点S,S与所有给定的起点一步相邻。设S到点A的最短距离为x,则 min(给定的所有起点 阅读全文
摘要:
CDQ分治 CDQ分治,传说中是一个神犇创造的算法。 在了解这种算法之前,我们有必要了解一下一种基本的思想:分治。 分治介绍 分而治之,将原问题不断划分成若干个子问题,直到子问题规模小到足以直接解决 子问题间互相独立且原问题形式相同,递归求解这些子问题,然后将各子问题的解合并得到原问题的解 一般步骤 阅读全文
摘要:
区间DP 一、问题 给定长为n的序列a[i],每次可以将连续一段回文序列消去,消去后左右两边会接到一起,求最少消几次能消完整个序列,n≤500。 f[i][j]表示消去区间[i,j]需要的最少次数。 则 若a[i]=a[j],则还有 这里实际上是以区间长度为阶段的,这种DP我们通常称为区间DP。 区 阅读全文
摘要:
单调队列优化DP 其实单调队列就是一种队列内的元素有单调性(单调递增或者单调递减)的队列,答案(也就是最优解)就存在队首,而队尾则是最后进队的元素。因为其单调性所以经常会被用来维护区间最值或者降低DP的维数已达到降维来减少空间及时间的目的。 单调队列的一般应用: 维护区间最值 优化DP 优化方法加样 阅读全文
摘要:
在程序中使用static 变量 1. 局部变量 普通局部变量是再熟悉不过的变量了,在任何一个函数内部定义的变量(不加static修饰符)都属于这个范畴。编译器一般不对普通局部变量进行初始化,也就是说它的值在初始时是不确定的,除非对其显式赋值。 普通局部变量存储于进程栈空间,使用完毕会立即释放。 静态 阅读全文
摘要:
什么是记忆化搜索? 搜索的低效在于没有能够很好地处理重叠子问题;动态规划虽然比较好地处理了重叠子问题,但是在有些拓扑关系比较复杂的题目面前,又显得无奈。记忆化搜索正是在这样的情况下产生的,它采用搜索的形式和动态规划中递推的思想将这两种方法有机地综合在一起,扬长避短,简单实用,在信息学中有着重要的作用 阅读全文
摘要:
数学角度 迭代公式代码解决问题 常用模板 for(int len=1;len<=n;len++) for(int L=1;L+len-1<=n;L++) R=l+Len-1; 对于一个迭代问题,首先可以考虑的是是不是可以打表。打表的实质就是针对输入数据的组合数很小的情况(或者是中间某个数值)下,解决 阅读全文
摘要:
状态机模型 我们知道,一般编写程序时都要画出流程图,按照流程图结构来编程,如果编写一个比较繁琐,容易思维混乱的程序时,我们可以利用有限状态机模型画出一个状态转移图,这样便可以利用画出的逻辑图来编写程序,简洁且不易出错。 那什么是有限状态机是什么意思呢?百度百科上这样解释: 有限状态机,(英语:Fin 阅读全文
摘要:
背包模型 背包问题就是考察对模型的应用。 先给几个模型: 多重背包问题 有 N 种物品和一个容量是 V 的背包。 第 i 种物品最多有 si 件,每件体积是 vi,价值是 wi。 求解将哪些物品装入背包,可使物品体积总和不超过背包容量,且价值总和最大。 输出最大价值。 输入格式 第一行两个整数,N, 阅读全文
摘要:
动态规划(提高) 这玩意本质上和我前面所写的动态规划是差不多的,但是在体型,难度和思维上进行了提升,在我以后所记录的所有提高算法都是这个道理。 数字三角形模型 数字三角形模型是一个比较简单的DP模型,而且在这个模型中,用闫氏DP分析法可以很好的解决。 Hello Kitty想摘点花生送给她喜欢的米老 阅读全文
摘要:
前言 很多人觉得贪心算法就是个基础算法,十分的简单,实际上想真正学好贪心是很难的。y总说过,贪心的不确定性让贪心的难度超越了图论和动态规划。接下来这些贪心的内容可能会颠覆你的世界观(AcWing的同学可以划走了)。 区间问题 区间问题是贪心算法的一个小版块,一个看似简单实际恶心的玩意。它的方法就是做 阅读全文
摘要:
动态规划 动态规划就我们常说的 dp,我在这里总结一下动态规划的笔记。 动态规划是一种非常实用的思想,常用来解决最优化、计数问题 基本思想:要解一个给定的复杂问题,我们可以将其简化为解其更简单的子问题,在根据子问题的解得出原问题的解。 子问题需要满足的性质: 子问题的范围更小,且子问题个数有限。 最 阅读全文
摘要:
质数和约数 这个章节没啥说的,就是几个函数。 bool is_prime(int x)//判断质数函数 { if (x < 2) return false; for (int i = 2; i <= x / i; i ++ ) if (x % i == 0) return false; return 阅读全文
摘要:
前言:二分图的定义和判定 二分图也称二部图,是图论里的一种特殊模型,也是一种特殊的网络流。其最大的特点在于,可以将图里的顶点分为两个集合,且集合内的点没有直接关联,如下图所示。 如果某个图为二分图,那么它至少有两个顶点,且其所有回路的长度均为偶数,任何无回路的的图均是二分图。 见图2所示,其存在回路 阅读全文
摘要:
前言 最小生成树和最短路还是区别很大的,所以又双叒来写了。 Kruscal算法 最小生成树问题顾名思义,概括来说就是路修的最短。 接下来引入几个一看就明白的定义: 最小生成树相关概念: 带权图:边赋以权值的图称为网或带权图,带权图的生成树也是带权的,生成树T各边的权值总和称为该树的权。 最小生成树( 阅读全文