数据结构与算法
文章平均质量分 74
学习数据结构与算法
Nightmare004
一个小菜鸡
展开
-
生产者消费者问题
生产者消费者问题 (Producer-consumer problem),也称有限缓冲问题(Bounded-buffer problem),是一个多线程同步问题的经典案例。该问题描述了两个共享固定大小缓冲区的线程——即所谓的“生产者”和“消费者”——在实际运行时会发生的问题。生产者的主要作用是生成一定量的数据放到缓冲区中,然后重复此过程。与此同时,消费者也在缓冲区消耗这些数据。该问题的关键就是要保证生产者不会在缓冲区已经装满时加入数据,消费者也不会在缓冲区为空时消耗数据。原创 2023-12-01 10:33:34 · 517 阅读 · 0 评论 -
哲学家进餐问题
由荷兰学者Dijkstra提出的哲学家进餐问题(The Dinning Philosophers Problem)是经典的同步问题之一有五个哲学家,他们的生活方式是交替地进行思考和进餐,哲学家们共用一张圆桌,分别坐在周围的五张椅子上,在圆桌上有五个碗和五支筷子,平时哲学家进行思考,饥饿时便试图取其左、右最靠近他的筷子,只有在他拿到两支筷子时才能进餐,该哲学家进餐完毕后,放下左右两只筷子又继续思考。约束条件(1)只有拿到两只筷子时,哲学家才能吃饭。原创 2023-12-01 10:32:36 · 426 阅读 · 0 评论 -
Manteia C++开发工程师 回忆
输出ABfuncB注意这里是不会析构的,因为没有delete即使delete,也只会析构A,不会析构B的,因为这里A的析构不是虚函数。原创 2023-12-01 10:32:09 · 997 阅读 · 0 评论 -
卡伦特C++ 回忆
进程间通信(英语:Inter-Process Communication,简称IPC),指至少两个进程或线程间传送数据或信号的一些技术或方法。原创 2023-12-01 10:31:46 · 877 阅读 · 0 评论 -
线程通信和进程通信方法
进程间通信(英语:Inter-Process Communication,简称IPC),指至少两个进程或线程间传送数据或信号的一些技术或方法。原创 2023-12-01 10:27:22 · 971 阅读 · 0 评论 -
4399游戏开发 回忆
∣A∣10∣B∣42fA∣x∈A∣x朝上∣fAxfB10−x翻转A,则10−x朝上。原创 2023-12-01 10:25:58 · 892 阅读 · 0 评论 -
Leetcode81. Search in Rotated Sorted Array II
那我们也是啥都不知道,那只能一个个搜了。旋转数组找元素,其中元素不唯一。我们依然要在有序的部分里面找。原创 2023-11-12 22:36:10 · 425 阅读 · 0 评论 -
Leetcode33. Search in Rotated Sorted Array
那说明target就在这里面,否则只能在右半边。我们可以考虑只在有序的部分里寻找。旋转数组搜索,其中元素唯一。类似之前旋转数组找最小。,这说明左边是有序的。原创 2023-11-12 22:31:34 · 381 阅读 · 0 评论 -
Leetcode154. Find Minimum in Rotated Sorted Array II
上一题的方法1肯定是用不了了,因为不再能完全分成2个不同的部分。因为总体是一个单调递增的感觉,从左往右可能g了。只能是情况1,不可能是情况2和3。旋转数组找最小,这次值可以重复。不能直接排除一半,只能从右往左。那为啥不能是从左往右呢,考虑。不妨假设你已经做了上一题,,我们依然可以找右半边。所以我们沿着方法2走。原创 2023-11-12 21:32:38 · 208 阅读 · 0 评论 -
Leetcode153. Find Minimum in Rotated Sorted Array
旋转数组找最小值其中数组中的值唯一你可以顺序遍历,当然一般会让你用二分来搞。原创 2023-11-12 21:10:53 · 422 阅读 · 0 评论 -
Leetcode1191. K-Concatenation Maximum Sum
最重要的是要考虑如果这个最大子数组可以夸数组。图中红色为两个数组的最大子数组和,绿色是答案。因此我们可以先求两个数组的最大子数组和。,那就和以前的最大子数组和是一样的。也可能是还是原来数组的最大子数组和。给定一个数组,和一个正整数。原创 2023-10-23 15:49:37 · 144 阅读 · 0 评论 -
Leetcode978. Longest Turbulent Subarray
其实这题也很简单,就是直接找子数组,不满足条件了,就重新开始算。给定一个数组,找到最长的turbulent子数组的长度。turbulent子数组就是一增一减交替。原创 2023-10-23 15:39:32 · 192 阅读 · 0 评论 -
Leetcode1793. Maximum Score of a Good Subarray
其实这题有点像是接雨水那个题目。出发,哪一边大就往哪一边扩展。给定一个数组和一个下标。找到最大的子数组分数。原创 2023-10-23 15:25:10 · 181 阅读 · 0 评论 -
Leetcode456. 132 Pattern
如果存在132序列,返回True,否则返回false。遍历过程中,保留最小的,然后右边找两个满足元素。因此可以维护一个单调递减栈,如果当前元素小于。逆序遍历,这样的目的是要找。132模式,就是找到。,然后保留右边最大的。原创 2023-10-23 15:19:41 · 173 阅读 · 0 评论 -
leetcode201 Bitwise AND of Numbers Range
其实可以观察到,只会留下从高到低,第一个不同位之前的。因此代码可以直接删除最低位的1,直到小于等于为止。求区间内的数字全部与之后的结果。像这种一位都不会相同。原创 2023-09-30 18:35:26 · 206 阅读 · 0 评论 -
leetcode137 Single Number II
给定一个数组,一个数字只出现1次,其余数字出现3次,要找到这个只出现1次的数字。第一种想法就是,考虑二进制,每一位统计一下出现了多少次1,然后对3取模。因此,先异或,表示出现奇数次,接着排除掉出现2次的。ones表示出现一次的。twos表示出现两次的。第二种感觉有点魔法了。原创 2023-09-30 17:40:34 · 183 阅读 · 0 评论 -
leetcode456 132 Pattern
当前元素大于栈顶元素时出栈,出栈的最后一个元素作为。只要存储左边最小,因为他比其他的更有潜力成为答案。最开始肯定想着三重循环,时间复杂度。,接着在后面找能放在中间的。这样的话相当于先找到了。原创 2023-09-30 17:06:05 · 173 阅读 · 0 评论 -
全排列下一个
【代码】全排列下一个。原创 2023-05-20 11:13:47 · 92 阅读 · 0 评论 -
LFU缓存结构设计
最不经常使用页置换算法(Least Frequently Used,LFU))原创 2023-05-18 14:06:24 · 112 阅读 · 0 评论 -
图片仿射变换矩阵
这里用齐次坐标系。原创 2023-03-11 11:31:12 · 309 阅读 · 0 评论 -
Dilworth定理
设R是集合A的一个二元关系,若R满足:∀x∈A,有xRx∀xy∈A,若xRyyRx,则xy∀xyz∈A,若xRyyRz,则xRz则称R为A上的偏序关系,通常记作⪯。原创 2023-02-21 10:18:05 · 501 阅读 · 0 评论 -
字典树(trie树)
每个节点代表一个字符串的前缀。字典树(trie树)原创 2023-02-14 14:45:10 · 221 阅读 · 0 评论 -
kmp算法
πik0⋯imaxk∣s0⋯k−1==si−k−1⋯i简单来说就是最长的相等的真前缀与真后缀的长度。原创 2023-02-11 20:16:15 · 429 阅读 · 0 评论 -
图匹配学习
二分图一种描述方式为。原创 2023-02-06 00:39:56 · 1193 阅读 · 0 评论 -
最近公共祖先
最近公共祖先(Lowest Common Ancestor,LCA)指两个点的公共祖先中,离根最远/深度最深的性质:1.LCAuu2.若u是v的祖先,当且仅当LCAuvu3.如果u不是v的祖先,v不是u的祖先,则uv分别处于LCAuv的两棵不同的子树中4.两个点的LCA必定出现在两点间的最短路上5.设duv为uv之间的距离,hu为u到根的距离,则duvhuhv−2hLCAuv洛谷P3379。原创 2023-01-30 16:49:32 · 543 阅读 · 0 评论 -
笛卡尔树学习
否则就一直出栈,然后插入栈顶右子树,然后出栈的最后一个元素插入当前节点的左子树。维护一个单调栈,小根堆就维护单调递增栈。笛卡尔树是一种二叉树,每一个节点为。上了个快读,因为T了最后一个点。满足二叉搜索树的性质,, 就直接插入右子树,原创 2023-01-30 10:59:24 · 183 阅读 · 0 评论 -
Method of Four Russians
前置:ST表用来解决区间最值问题(RMQ)如果将整个数组分块,每一个块的大小是b,则可以分出bn每一个块求一个最小值出来,对这bn个最小值建一个ST表,则时间复杂度Obnlog2bn⊆Obnlog2n如果块的大小b∈Θlogn,则时间复杂度为On但是这个只是块之间的RMQ,查询区间可能是跨越几个块,也可能在块内这时候如果每一个块建一个ST表,则时间复杂度Obnblog2b⊆Onlo。原创 2023-01-29 23:33:45 · 325 阅读 · 0 评论 -
稀疏表(ST表,Sparse Table)
ST表用来解决区间最值问题(也可以解决区间gcd)利用倍增的思想,Onlog2n预处理,O1区间查询令fij表示区间ii2j−1fi0aifijmaxfij−1fi2j−1j−1对于查询lr,令s⌊log2r−l1⌋通过maxfll2s−1fr−2s1r来找到lr的最大值(为什么不是l2sr?因为有可能越界)剩下的就是可以考虑预处理。原创 2023-01-29 10:57:28 · 468 阅读 · 0 评论 -
树状数组学习
树状数组主要用于处理:单点修改区间查询 的问题如上图可以看得出来,如果x≡0mod2nn取最大整数值,那么cx管理的区间长度为2nn也是x最低位的1右边的0的个数取最低位的1,可以用所以cx管理的区间为x−lowbitx1x单点修改前缀和建树。原创 2023-01-25 12:48:41 · 377 阅读 · 0 评论 -
线段树学习
线段树是用来维护区间信息的数据结构。原创 2023-01-21 23:10:39 · 812 阅读 · 0 评论 -
单调栈学习
栈中的元素保持单调性。原创 2023-01-20 19:21:26 · 211 阅读 · 1 评论 -
约瑟夫环(Joseph problem)
n个人标号01⋯n−1,逆时针站一圈,从0号开始,每一次从当前的人逆时针数k个,然后这个人出局,问最后剩下的人是谁。原创 2023-01-13 20:21:59 · 717 阅读 · 0 评论 -
整数分块学习
也就是说,已知左端点,我们可以直接求出右端点。比较大时,就需要一些简单点的方法。由观察,整除的结果是一块一块的。比较小的时候可以直接暴力。每个约数出现次数就是。原创 2022-12-30 17:47:03 · 383 阅读 · 0 评论 -
pumping lemma
根据Myhill–Nerode theorem,正则语言可以转为有限自动机。根据抽屉原理,至少有一个状态被访问两遍,如图。即可满足pumping lemma。是正规语言,则存在整数。对于任意长度大于等于。对于一个长度大于等于。,进入自动机需要经过。原创 2022-11-23 00:19:06 · 506 阅读 · 0 评论 -
RE转NFA转DFA
https://github.com/Nightmare4214/re_nfa_dfaϵ\epsilonϵ代表空串某个给定字母表上一个任意的可数的串集合正则语言(regular language)/正则表达式(regular expression)每个正则表达式rrr表示一个语言L(r)L\left(r\right)L(r)归纳基础:1)ϵ\mathbf{\epsilon}ϵ是一个正则表达式,L(ϵ)={ϵ}L\left(\mathbf{\epsilon}\right)=\left\{\epsilon\原创 2022-11-17 16:26:27 · 638 阅读 · 0 评论 -
数根(digital root)
数根:数根是将一正整数的各个位数相加(即横向相加),若加完后的值大于10的话,则继续将各位数进行横向相加直到其值小于10为止考虑自然数n,对于b进制(b>1),定义数字和Fb:N→N为Fb(n)=i=0∑k−1di其中k=⌊logbn⌋+1为b进制下这个数字有多少位,di=binmodbi+1−nmodbi换句话说,n=∑i=0k−1di。原创 2022-10-02 13:52:25 · 1056 阅读 · 0 评论 -
tsp学习
假设起点是0。原创 2022-09-11 15:59:35 · 426 阅读 · 0 评论 -
n皇后学习
(col | (sub_diag >> row) | (main_diag >> (n - 1 - row)))就是可以用的列(当然还包括一些超过n的列)col | (sub_diag >> row) | (main_diag >> (n - 1 - row))就是被占用的列。每一行主对角线:-row+n-1->-row+n-1+n-1。sub_diag的第i位代表这一行第i个副对角线是否被占用。那么在i+1行,第k-1个副对角线就被占用了。那么在i+1行,第k+1个主对角线就被占用了。原创 2022-09-06 18:41:20 · 267 阅读 · 0 评论 -
精确覆盖问题
精确覆盖问题(Exact Cover Problem),指给定许多集合Si(1≤i≤n)S_i\left(1\le i\le n\right)Si(1≤i≤n),以及集合X⊂SX\subset SX⊂S,求满足以下条件的无序多元组(T1,T2,⋯ ,Tm)\left(T_1,T_2,\cdots,T_m\right)(T1,T2,⋯,Tm):(001011010010010110010100100001000010001101)\left(\begin{array}{lllllll}0 & 0原创 2022-09-04 16:39:30 · 928 阅读 · 0 评论 -
华容道AI
设空格:0,兵:1,竖的武将:2,横的武将:3,曹操:4总共有20个格子,可以用字符串或者char数组。原创 2022-08-31 23:24:16 · 739 阅读 · 0 评论