![](https://img-blog.csdnimg.cn/20201014180756754.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
算法笔记
个人的算法笔记
邵奕童1
这个作者很懒,什么都没留下…
展开
-
算法笔记——字符串哈希
字符串哈希,即得到一个字符串的哈希值。最常见的字符串哈希函数:将字符串转化为特定进制数并自然溢出,一般进制数最好是>300的质数。转化时每位从1开始,假设一个字符串只有小写字符和数字组成(a~z->1~26,0~9->27~37)。哈希碰撞(不同字符的哈希值相同)理论上是会发生的,但是概率很低,忽略不计。原创 2024-08-04 15:30:34 · 182 阅读 · 0 评论 -
算法笔记:高级搜索
要求解的问题是:给出一种初始布局(初始状态)和目标布局(为了使题目简单,设目标状态为 123804765),找到一种最少步骤的移动方法,实现从初始布局到目标布局的转变。对于无法用动态规划、搜索剪枝,同时暴搜超时的题目,可以尝试双向搜索,即开始状态和终止状态同时开始搜索,如果达到一个相同的状态说明搜索完成。相当将一颗搜索树变成两颗,如果两颗搜索树的某个节点(状态)相遇(状态相同),说明搜索结束。第二行,N 个以空格分隔的正整数,均不超过 10^16,代表每场比赛门票的价格。输出一行,表示方案的个数。原创 2024-06-21 11:23:36 · 240 阅读 · 0 评论 -
算法笔记:简单DP
1.基于左右两端点的可能性讨论。2.基于区间划分点的可能性讨论。时间复杂度一般为O(n^2)时间复杂度一般为O(n^3)原创 2024-04-27 10:41:03 · 88 阅读 · 0 评论 -
算法笔记:树上问题——树上倍增
【代码】算法笔记:树上问题——树上倍增。原创 2024-07-28 17:18:33 · 99 阅读 · 0 评论 -
算法笔记:线段树扩展
一些注意事项:1.线段树是一种基于二分思想的数据结构,因此几乎所有相关操作都默认有一个前提:目标一定在当前查询的区间内,不需要考虑目标不在当前区间内的可能性。原创 2024-06-22 21:03:16 · 181 阅读 · 0 评论 -
树(图论)的一些要点
1.树是特殊的图,是连通、无环、无向图。2.树顶点数为n,边数为n-1。原创 2024-05-16 20:40:16 · 122 阅读 · 0 评论 -
算法笔记:最大矩形面积
最大子矩形问题:在一个给定的矩形中有一些障碍点,要找出网格内部不包含任何障碍点,且边界与坐标轴平行的最大子矩形。常用的算法有两个:单调栈,时间复杂度O(n*m)(原文没有提如何解决忽略了左边界与整个举行的左边界重合,而右边界覆盖了一个障碍点的情况,实际解决方法是从左到右、从右到左各搜一遍)原创 2024-06-19 19:38:45 · 365 阅读 · 0 评论 -
算法笔记:树上问题——LCA(最近公共祖先问题)
2.将每个问题记录两次(两个节点各记录一次),保证每个问题第一次没有处理掉,一定会在第二次处理。2.让两个点一同往上走,保证不会到达相同的点。,vis数组确定哪些节点访问过。1.让两个点到达同一深度。时间复杂度(mlogn)1.使用并查集来确定当前。3.最后往上走最后一层。二.tarjan算法。时间复杂度(n+m)原创 2024-07-28 18:56:05 · 150 阅读 · 0 评论 -
算法笔记:二分&&三分
二分思想本质是:1.用于求出可行解的最值问题。2.实现是逐次逼近的思想。最典型的,有序数组的二分查找就是最简单的应用之一。在有序数组中找到第k大的数,第k大的数就是可行解的最值,第k+1,k-1大的数其实也算是可行解,但不是最优解。在精度要求固定的情况下,二分是一定可以找到最优解的。可二分问题的结构:1.求解最值2.可行解数量众多,如果把可行解从左到右排序(排序标准按照问题要求),最右边的可行解就是最优解。当遇到求解最值问题,且贪心、dp等方法均不可用时,可以尝试二分。原创 2024-05-18 12:19:44 · 205 阅读 · 0 评论 -
算法笔记:树状数组
正常树状数组:范围查询,单点修改。差分树状数组:范围修改,单点查询。加上类似倍增的思想,相当于。每个元素用二进制表示,原创 2024-05-19 11:44:39 · 119 阅读 · 0 评论 -
算法笔记:博弈问题
先找到XOR最高位1(即前面的所有位都为0),找所有堆数量的二进制位包含这位1(至少有一个,因为是奇数),将除这个数的其余均XOR,结果一定<这个数(设该位1为第x位,那么XOR结果前x位都为0,而这个数第x位为1),因此通过调整这个数,可以使得(这个数)XOR(其余数XOR结果)==0。=0,那么我一定可以通过玩一个小ICG游戏,使得总XOR值==0,即将敌方掉入必输局面(XOR==0,即SG总(x)== 0)。还是有必败点SG(0)== 0,设SG(x)== 0,表示当前局面必败;原创 2024-06-06 22:07:45 · 345 阅读 · 0 评论 -
算法笔记:数组模拟双向链表
在O(1)时间内实现增/删/改/查,可以使用数组模拟链表。数组:O(1)查找/修改,但是删/查为O(n)链表:O(1)删/查,但是查找/修改为O(n)数组模拟链表相当于数组+链表。原创 2024-05-20 21:54:26 · 93 阅读 · 0 评论 -
算法笔记:KMP问题
next数组:对str2,每位字符前面的字符串(不包含这个字符),前缀和后缀的最大匹配数量(不含整体),我们把这个前缀后缀相同的字符串称为border(之后简称next数组表示的前缀字符串为border前缀,next数组表示的后缀为border后缀)。2.由于border前缀==border后缀,因此str1和str2都再跳border长度的字符,即str1从(i+j-next[j]+next[j]),也就是(i+j)开始,因此str1其实没有动;KMP本质就是用next数组,对匹配过程做了一个加速。原创 2024-06-08 20:49:31 · 121 阅读 · 0 评论 -
算法笔记:单调栈
(注意,单调栈一般不允许栈内出现重复的数,所以出现新来的数与栈内的数相同的情况时,要么舍掉栈内的,压入新来的;下面代码是舍掉栈内的数,压入新来的数)求每个数左右两侧离它最近的、比它大/小(取决于栈的单调性)的两个数的位置。离他最近的左侧的数一定是单调栈内紧挨着他的数(见代码)离它最近的右侧的数一定是新来的数(见代码)典型例题是求矩阵最大面积。原创 2024-06-19 20:16:40 · 160 阅读 · 0 评论 -
一些经常犯的错误
1.建树时寻找树的根。原创 2024-05-15 20:27:31 · 80 阅读 · 0 评论 -
算法笔记:ST表与倍增算法
利用转移方程式构建完ST表后,当求区间(l,r),设步长为step,从l开始,先另step选取最大步长,如果当前跳跃步数到达的位置不超过r(ST[cur][step]<r),就记录一下。注意红字,这是能使用ST表的必要条件,意思是越靠前的点,能跳到的位置一定越靠前(也可以理解为,没有一个区间是完全包含另一个去区间的(最差情况是区间的左端点或右端点重合))。ST表:ST[l][p],代表区间(l,l+2^p-1)上维护的信息,l代表区间左端点,p代表区间长度。也就是说,当满足一定的单调性,才能使用ST表。原创 2024-07-15 16:09:09 · 165 阅读 · 0 评论