自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(16)
  • 收藏
  • 关注

原创 线程安全之乐观锁和悲观锁

悲观锁就是我们常说的锁。⽣冲突,所以必须对每次数据操作加上锁,以保证临界区的程序同⼀时间只能有⼀。由于⽆锁操作中没有锁的存在,因此不可能出现死锁的情况,也就是说乐观锁天⽣。会失败,但失败的线程并不会被挂起,仅是被告知失败,并且允许再次尝试,当然。没有冲突,线程可以不停地执⾏,⽆需加锁也⽆需等待。其中,乐观锁和悲观锁是⼀种分类⽅式。,顾名思义,它是乐观派。操作⼀个变量时,只有⼀个会胜出,并成功更新,其余均。⽅法的作⽤是⾸先检查当前引⽤是否等于预期引⽤,并且。之后,正准备更新它的新值的时候,被其它线程更。

2025-02-08 20:37:49 731

原创 算法之拓扑排序

通过对相邻的两个名字间进行比较,可以得到 n−1 个关系(如样例中 r<s , s<a ),它们可以构成一张图,而最后线性的字母表也必须要满足这些关系。很明显,如果这张图存在环,必然是无解的;而如果无环,那么拓扑排序即可得到结果。,而且删除操作不会产生环,所以每时每刻都一定存在入度为0的点,一定可以不断进行下去,直到所有点被删除。简单地说,就是给出一张名字的列表,要找到一张字母表使得这张人名的列表是按字典序排列的。(有向无环图)上的节点进行排序,使得对于每一条。即可,复杂度会多一个 log。

2025-01-22 18:26:34 680

原创 算法之字典树

拥有相同前缀的字符串可以共用部分节点。起始点是特殊点(我们设为1号点),不存储字符。大小的空间,但可以用 O(n) 的时间查询,其中 n 为查询的前缀或字符串的长度。就可以轻松解决了,但也可以使用字典树。是一种空间换时间的数据结构,我们牺牲了字符串个数×字符串平均字符数×。,然后先按查询前缀的方法查询,在结尾处再判断一下。如果是查询某个字符串是否存在,可以另开一个。)是一个比较简单的数据结构,也叫。这是一种常见的套路,即用。,用来存储和查询字符串。,每次查询后把叶子节点的。数组,在插入完成时,把。

2025-01-21 19:15:52 402

原创 字符串之KMP

(全称Knuth-Morris-Pratt字符串查找算法,由三位发明者的姓氏命名)是可以在中快速查找的一种算法。要想知道KMP算法是如何减少字符串查找的的,我们不如来看暴力匹配方法是如何浪费时间的。所谓暴力匹配,就是逐字符逐字符地进行匹配(比较s[i]和p[j]),如果当前字符匹配成功(s[i]==p[j]),就匹配下一个字符(++i, ++j),如果失配,i回溯,j置为0(举例来说,假如, 我们暴力匹配,过程会是怎样?从头开始匹配,第一个字符是a,匹配成功。第2~4个字符也匹配成功,继续。

2025-01-20 16:59:33 626

原创 数论之扩展欧几里得

实际上,c必须是gcd(a,b)的倍数,因为我们由方程ax+by=c两边除以gcd(a,b)可得agcd(a,b)x+bgcd(a,b)y=cgcd(a,b),方程左边当然是整数,那么方程右边也必须是整数。可以看到,通过求bx0+(amodb)y0=c的解,可以得出ax+by=c的解。设除了已经求出的x,y之外还有一组解x1=x+δ和y1,那么由ax1−aδ+by=gcd(a,b),得ax1+b(y−aδb)=gcd(a,b),得y1=y−aδb。

2025-01-19 20:46:11 1440

原创 博弈论之sg函数

对于双堆的Nim游戏,设sg(n,m)表示剩余石子数分别为n和m的状态的sg值,则sg(0,0)=0,并且sg(n,0)=sg(0,n)=n。我们发现sg(1,1)=0,而sg(1,2)=sg(2,1)=1,sg(2,2)=0……继续探索可以猜测,当n=m时,sg(n,m)=0,否则sg(n,m)≠0。设sg(m)表示剩余石子数为m的状态的sg值,则显然sg(0)=0,那么sg(1)=1,sg(2)=2……归纳可证sg(n)=n。

2025-01-18 19:39:56 615

原创 算法之可持久化线段树

大家可能用过Photoshop的历史记录画笔,使用它可以返回之前的某个状态,并在此基础上进行修改。实现这样的功能,便需要的数据结构,它保存每个历史版本,可以高效地查询和修改历史版本,且因其维持原结构的还在领域有很大作用。就是这样一种数据结构。想要让线段树可持久化,最朴素的实现方法是每进行一次操作都建一棵新的树,不用说也知道,这样做的时间和都是不可接受的。稍微思考一下会发现,每次修改操作都只会有少数的点被修改,所以大量的点是可以共用的。要实现这一点,需要我们用的方法存储每个点的左右子节点。假如原始数据为。

2025-01-17 16:49:49 709

原创 算法之分块

是一种思想,把一个整体划分为若干个小块,对整块整体处理,零散块单独处理。本文主要介绍——利用分块思想处理区间问题的一种。块状数组把一个长度为 n 的数组划分为 a 块,每块长度为 na。对于一次区间操作,对区间內部的整块进行整体的操作,对区间边缘的零散块单独暴力处理。(所以分块被称为“优雅的暴力”)这里,块数既不能太少也不能太多。如果太少,区间中整块的数量会很少,我们要花费大量时间处理零散块;如果太多,又会让块的长度太短,失去整体处理的意义。

2025-01-16 17:08:22 607

原创 算法之线段树

(Segment Tree)几乎是最常用的数据结构了,它主要用于维护(要求满足结合律)。与相比,它可以实现 O(log⁡n) 的,还可以同时支持(加、乘),更具通用性。接下来我们用这道模板题为例,看看线段树是怎么维护这一信息的。

2025-01-15 15:00:48 1329

原创 算法之st表

具体地说,我们要找的是一个整数 s ,两个子区间分别为 [l,l+2s−1] 和 [r−2s+1,r]。f,对于范围内的所有f[a][b],先算出并存储 maxi∈[a,a+2b)(Ai) (本文中的区间都是离散意义下的,只包含整数,所以此区间也可以写成[a,a+2b−1] ),这称为。把区间平分为两部分,前半段按定义当然是从 j 到 j+2i−1−1 的最大值,后半段则是从j+2i−1到 j+2i−1+2i−1−1=j+2i−1 的最大值。f(x,y) ,满足 f(a,a)=a ,则f是可重复贡献的。

2025-01-14 16:21:25 318

原创 算法之树状数组

树状数组(inaryndexree,)也是很多OIer心中最简洁优美的数据结构之一。最简单的树状数组支持两种操作,当然,树状数组能维护的不局限于加法,支持的操作也不止这两种,甚至有大佬能用树状数组实现,但这篇笔记不会深入讨论(因为我也还不是很懂hh)。这个数据范围,直接模拟肯定会T,所以我们要使用数据结构来维护数组,树状数组可以说是其中最简洁的一种。我们来看看树状数组是怎么实现的。

2025-01-13 16:04:50 628

原创 算法之并查集

并查集被很多OIer认为是最简洁而优雅的数据结构之一,主要用于解决一些的问题。它管理一系列当然,这样的定义未免太过学术化,看完后恐怕不太能理解它具体有什么用。。这其实是一个很有现实意义的问题。我们可以建立模型,把所有人划分到若干个不相交的集合中,每个集合里的人彼此是亲戚。为了判断两个人是否为亲戚,只需看它们是否属于同一个集合即可。因此,这里就可以考虑用进行维护了。

2025-01-12 16:58:36 1551

原创 算法之数位DP

不过你肯定发现,上面的 2?和另两种不同,因为它的第一个?例如在本题中, 106?的答案是一样的,所以他们可以当作同样的状态。当我们搜到 206?例如,如果我们要求 231756 以内符合条件的数,我们只需要知道形如 0?为了简化问题,我们只需要求出 [0,m] 内符合条件的值,以及 [0,n−1] 内符合条件的值,再把两者相减即可。首先,我们要把数字拆成数位的数组,一般我喜欢从高位到低位存储,这样需要。也可以,很多与按位与/或/异或有关的题目,都可以用数位DP解决。实际上,不仅是十进制可以数位DP,

2025-01-12 14:53:37 662

原创 操作系统 - 内存 - 动态分区分配算法

2025-01-11 15:51:54 113

原创 mysql基础学习

1.数据结构 数组 链表 栈 队列 二叉树 哈希表 集合框架中的等等2.基础语法 项目结构 (1)项目名字 (2)项目源代码文件,包:Package{ 命名:全小写,自己首字母缩写+日期 代码域的

2023-10-18 15:23:29 45 1

原创 关于acm新生欢乐赛的一点解释

关于acm欢乐赛的一点想法

2022-10-30 19:14:59 118 1

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除