![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
算法笔记2
文章平均质量分 83
枪亡小白(小号)
大号没了,如果还想看【算法笔记】得兄弟们到这个号来。大号地址:https://blog.csdn.net/bbbb8989?type=blog
展开
-
【码极客精讲】B树
如果一个内部节点有2d个键值,那么添加一个键值给此节点的过程,将会拆分2d键值为2个d键值的节点,并把中间值节点添加给父节点。通过最大化内部里层节点的子节点的数量,树的高度减小,存取节点的开销被缩减。辅助的索引,使得查找问题从约为log2N 磁盘读取开销的二分查找,变成logbN 磁盘读取开销的查找,其中b为分块因素(每分块的入口数目:b = 100 入口每分块;在存取节点数据所耗时间远超过处理节点数据所耗时间的情况下,B树在可选的实现中拥有很多优势,因为存取节点的开销被分摊到里层节点的多次操作上。原创 2024-07-14 17:18:01 · 666 阅读 · 0 评论 -
【码极客精讲】树链剖分
树链剖分,计算机术语,指一种对树进行划分的算法,它先通过轻重边剖分将树分为多条链,保证每个点属于且只属于一条链,然后再通过数据结构(树状数组、BST、SPLAY、线段树等)来维护每一条链。将树中的边分为:轻边和重边 定义size(X)为以X为根的子树的节点个数。令V为U的儿子节点中size值最大的节点,那么边(U,V)被称为重边,树中重边之外的边被称为轻边。II. QMAX u v: 询问从点u到点v的路径上的节点的最大权值。III. QSUM u v: 询问从点u到点v的路径上的节点的权值和。原创 2024-07-14 16:50:16 · 206 阅读 · 0 评论 -
【码极客精讲】线段树
线段树是一种,与相似,它将一个区间划分成一些单元区间,每个单元区间对应线段树中的一个叶结点。使用线段树可以快速的查找某一个节点在若干条线段中出现的次数,时间复杂度为O(logN)。而未优化的为2N,实际应用时一般还要开4N的数组以免越界,因此有时需要离散化让空间压缩。线段树是一种,与相似,它将一个区间划分成一些单元区间,每个单元区间对应线段树中的一个叶结点。对于线段树中的每一个非[a,b],它的左儿子表示的区间为[a,(a+b)/2],右儿子表示的区间为[(a+b)/2+1,b]。因此线段树是。原创 2024-07-11 16:21:32 · 977 阅读 · 0 评论 -
【码极客精讲】RMQ算法
我们把f[i,j](j≥1)平均分成两段(因为j≥1时,f[i,j]一定是偶数个数字),从i到i+2^(j-1)-1为一段,i+2^(j-1)到i+2^j-1为一段(长度都为2^(j-1))。ST算法(Sparse Table),以求最大值为例,设d[i,j]表示[i,i+2^j-1]这个区间内的最大值,那么在询问到[a,b]区间的最大值时答案就是max(d[a,k], d[b-2^k+1,k]),其中k是满足2^k<=b-a+1(即长度)的最大的k,即k=[ln(b-a+1)/ln(2)]原创 2024-07-10 15:49:03 · 646 阅读 · 0 评论 -
【码极客精讲】树状数组
采用这个想法,我们可将一个前缀和划分成多个子序列的和,而划分的方法与数的2的幂和具有极其相似的方式。一方面,子序列的个数是其二进制表示中1的个数,另一方面,子序列代表的f[i]的个数也是2的幂。仍然以34为例,Not 0010 0010的结果是 1101 1101(221),加一后为 1101 1110(222), 把 0010 0010与1101 1110作AND,得0000 0010(2)。程序上,((Not I)+1) And I表明了最后一位1的值,位往前数,见到的第一个1,也就是位上的1.原创 2024-07-10 15:45:25 · 202 阅读 · 0 评论 -
【码极客精讲】欧拉回路
连到i一条容量为(Ii-Oi)/2的边,对于所有Ii原创 2024-07-09 17:55:17 · 791 阅读 · 0 评论 -
【码极客精讲】强联通分量
我们使用类比方法,在Tarjan算法中,每次mlik[i]的修改都是由于环的出现(不然,mlik[i]的值不可能变小),每次出现环,在这个环里面只剩下一个mlik[i]没有被改变(深度最低的那个),或者全部被改变,因为那个深度最低的节点在另一个环内。,我们在改进分析的时候,不是先选的树不会连通到其他树上(对于反图GT来说),也就是后选的树没有连通到先选的树,也即先出现的强连通分量收缩的点只能指向后出现的强连通分量收缩的点。可以说是最容易理解,最常用的算法,其比较关键的部分是同时应用了原图G和反图GT。原创 2024-07-09 17:44:18 · 534 阅读 · 0 评论 -
【码极客精讲】差分约束系统
例:d[x]-d[y]≥Z如果想连边后求最长路 那么将不等式变形为这种形式 d[x]≥d[y]+z y到x连一条权值为z的边求最短路则变形成d[y]≤d[x]-z x到y连一条权值为-z的边。观察xj-xi≤bk,会发现它类似最短路中的三角不等式d[v]≤d[u]+w[u,v],即d[v]-d[u]≤w[u,v]。则x+d=(x1+d,x2+d,…该问题的一个解为x=(-5,-3,0,-1,-4),另一个解y=(0,2,5,4,1),这2个解是有联系的:y中的每个元素比x中相应的元素大5。原创 2024-07-09 12:24:55 · 336 阅读 · 0 评论 -
【码极客精讲】SPFA算法
LLL:Large Label Last 策略,设队首元素为i,队列中所有dist值的平均值为x,若dist(i)>x则将i插入到队尾,查找下一元素,直到找到某一i使得dist(i)<=x,则将i出队进行松弛操作。在无权图中,BFS首先到达的顶点所经历的路径一定是最短路(也就是经过的最少顶点数),所以此时利用数组记录节点访问可以使每个顶点只进队一次,但在带权图中,最先到达的顶点所计算出来的路径不一定是最短路。的,所以我们不能放弃数组,而是在处理一个已经在队列中且当前所得的路径比原来更好的顶点时,直接更新。原创 2024-07-09 11:17:33 · 452 阅读 · 0 评论 -
【码极客精讲】最短路问题
如何找出最短路径呢,这里还是用到动态规划的知识,对于任何一个城市而言,i到j的最短距离不外乎存在经过i与j之间的k和不经过k两种可能,所以可以令k=1,2,3,...,n(n是城市的数目),在检查d(ij)与d(ik)+d(kj)的值;所以,若有d(ij)>d(ik)+d(kj),就表示从i出发经过k再到j的距离要比原来的i到j距离短,自然把i到j的d(ij)重写为d(ik)+d(kj),每当一个k查完了,d(ij)就是目前的i到j的最短距离。对(BsP),在字典序意义下有时间复杂性为o(n2)的算法。原创 2024-07-09 10:58:15 · 871 阅读 · 0 评论 -
【码极客精讲】最小生成树
若(u,v)是G中一条“一个端点在U中(例如:u∈U),另一个端点不在U中的边(例如:v∈V-U),且(u,v)具有最小权值,则一定存在G的一棵最小生成树包括此边(u,v)。在一给定的无向图G = (V, E) 中,(u, v) 代表连接顶点 u 与顶点 v 的边(即),而 w(u, v) 代表此边的权重,若存在 T 为 E 的子集且为无循环图,使得联通所有结点的的 w(T) 最小,则此 T 为 G 的最小生成树。T'和T的差别仅在于T'用轻边(u,v)取代了T中权重可能更大的紫边(u',v')。原创 2024-07-08 23:07:49 · 842 阅读 · 0 评论 -
【码极客精讲】AC自动机
也就是说,i是不断增加的,随着i的增加j相应地变化,且j满足以A[i]结尾的长度为j的字符串正好匹配B串的前 j个字符,当A[i+1]≠B[j+1],KMP的策略是调整j的位置(减小j值)使得A[i-j+1..i]与B[1..j]保持匹配且新的B[j+1]恰好与A[i+1]匹配,而next函数恰恰记录了这个j应该调整到的位置。同样AC自动机的失败指针具有同样的功能,也就是说当我们的模式串在Trie上进行匹配时,如果与当前节点的关键字不能继续匹配,就应该去当前节点的失败指针所指向的节点继续进行匹配。原创 2024-07-08 23:01:14 · 852 阅读 · 0 评论 -
【码极客精讲】字典树
给出N个单词组成的熟词表,以及一篇全用小写英文书写的文章,请你按最早出现的顺序写出所有不在熟词表中的生词。在这道题中,我们可以用数组枚举,用哈希,用字典树,先把熟词建一棵树,然后读入文章进行比较,这种方法效率是比较高的。给定N个互不相同的仅由一个单词构成的英文名,让你将他们按字典序从小到大输出用字典树进行排序,采用数组的方式创建字典树,这棵树的每个结点的所有儿子很显然地按照其字母大小排序。对所有串建立字典树,对于两个串的最长公共前缀的长度即他们所在的结点的公共祖先个数,于是,问题就转化为当时公共祖先问题。原创 2024-07-08 22:55:40 · 400 阅读 · 0 评论 -
【码极客精讲】SHA家族
我们来看看今天的主角:安全散列算法(英语:Secure Hash Algorithm,缩写为SHA)是一个家族,是FIPS所认证的安全散列算法。能计算出一个数字消息所对应到的,长度固定的(又称)的算法。且若输入的消息不同,它们对应到不同字符串的机率很高。SHA家族的五个算法,分别是SHA-1、SHA-224、SHA-256、SHA-384,和SHA-512,由(NSA)所设计,并由(NIST)发布;是美国的政府标准。后四者有时并称为SHA-2。SHA-1在许多安全协定中广为使用,包括和、SSH、原创 2024-07-08 13:50:52 · 920 阅读 · 0 评论 -
【码极客精讲】KMP算法
复旦大学朱洪教授对KMP串匹配算法进行了改进,他主要是修改了next函数,在求 next[j]时,不但要求P[i]=P[j-( next[j]-i)](i=1,2,…复旦大学朱洪教授对KMP串匹配算法进行了改进,他主要是修改了next函数,在求 next[j]时,不但要求P[i]=P[j-( next[j]-i)](i=1,2,…给定一个字符或符号组成的字符串目标对象T和一个字符串模式P,模式匹配的目的是在目标T中搜索与模式P完全相同的子串,返回T和P匹配的第一个字符串的首字母位置。原创 2024-07-08 13:46:19 · 322 阅读 · 0 评论 -
【码极客精讲】队列
队列是一种特殊的,特殊之处在于它只允许在表的前端(front)进行删除操作,而在表的后端(rear)进行插入操作,和栈一样,队列是一种操作受限制的线性表。进行插入操作的端称为队尾,进行删除操作的端称为队头。队列中没有元素时,称为空队列。队列的数据元素又称为队列元素。在队列中插入一个队列元素称为入队,从队列中删除一个队列元素称为出队。因为队列只允许在一端插入,在另一端删除,所以只有最早进入队列的元素才能最先从队列中删除,故队列又称为先进先出(FIFO—first in first out)。原创 2024-07-08 11:58:19 · 510 阅读 · 0 评论 -
【码极客精讲】栈
堆栈又名栈(stack),它是一种运算受限的线性表。限定仅在表尾进行插入和删除操作的线性表。这一端被称为栈顶,相对地,把另一端称为栈底。向一个栈插入新元素又称作进栈、入栈或压栈,它是把新元素放到栈顶元素的上面,使之成为新的栈顶元素;从一个栈删除元素又称作出栈或退栈,它是把栈顶元素删除掉,使其相邻的元素成为新的栈顶元素。要搞清楚这个概念,首先要明白“栈”原来的意思,如此才能把握本质。原创 2024-07-06 14:42:14 · 689 阅读 · 0 评论 -
【码极客精讲】动态规划
在多阶段决策问题中,各个阶段采取的决策,一般来说是与时间有关的,决策依赖于当前状态,又随即引起状态的转移,一个决策序列就是在变化的状态中产生出来的,故有“动态”的含义,称这种解决多阶段决策最优化的过程为动态规划方法。在上面的例子中状态就是某阶段的出发位置,它既是该阶段某路的起点,同时又是前一阶段某支路的终点。,一般来说是与时间有关的,决策依赖于当前状态,又随即引起状态的转移,一个决策序列就是在变化的状态中产生出来的,故有“动态”的含义,称这种解决多阶段决策最优化问题的方法为动态规划方法。原创 2024-07-06 14:32:41 · 781 阅读 · 0 评论 -
【码极客精讲】贪心算法
贪心算法采用自顶向下,以迭代的方法做出相继的贪心选择,每做一次贪心选择,就将所求问题简化为一个规模更小的子问题,通过每一步贪心选择,可得到问题的一个最优解。证明的大致过程为:首先考察问题的一个整体最优解,并证明可修改这个最优解,使其以贪心选择开始,做了贪心选择后,原问题简化为规模更小的类似子问题。例如,平时购物找零钱时,为使找回的零钱的硬币数最少,不要求找零钱的所有方案,而是从最大面值的币种开始,按递减的顺序考虑各面额,先尽量用大面值的面额,当不足大面值时才去考虑下一个较小面值,这就是贪心算法。原创 2024-07-06 14:26:55 · 604 阅读 · 0 评论 -
【码极客精讲】递推算法
第二步,放编号为k的元素,这时有两种情况.1,把它放到位置n,那么,对于剩下的n-2个元素,就有M(n-2)种方法;2,不把它放到位置n,这时,对于这n-1个元素,有M(n-1)种方法;当n个编号元素放在n个编号位置,元素编号与位置编号各不对应的方法数用M(n)表示,那么M(n-1)就表示n-1个编号元素放在n-1个编号位置,各不对应的方法数,其它类推.递推是按照一定的规律来计算序列中的每个项,通常是通过计算前面的一些项来得出序列中的指定项的值。通常是通过计算前面的一些项来得出序列中的指定项的值。原创 2024-07-06 12:13:47 · 396 阅读 · 1 评论