- 博客(96)
- 收藏
- 关注
原创 字符串之KMP算法
今天,是字符串的一个重要算法——kmp算法(考研会考)解决字符串匹配问题(主串p,模式串ss是p的字串吗?若是,找出具体位置)。
2026-03-25 22:23:08
428
原创 背包问题BP
在选择背包的物品时,对每种物品i只有两种选择,即装入背包1和不装如背包0,不能将物品装入背包多次,也不能只装一部分(商品不可分割)给n种物品,每种物品有无限多个,放入容量为m的背包中(可以重复放入同一种物品),如何使背包的价值最大。01背包时有个易错点,会放很多次,但是在完全背包中,刚好可以达到降维的目的(三维->二维)题目本身不难,但是会加情景,情景中的变量和背包中的变量是否一致是需要考虑的。题目本身不难,但是会加情景,情景中的变量和背包中的变量是否一致是需要考虑的。 二维->一维(滚动数组)
2026-03-24 23:39:57
357
原创 拓扑排序算法
今天是拓扑排序算法~拓扑序列:设G = (V, E)是一个具有n个顶点的有向图,V中的顶点序列V1、V2、V3…Vn满足若从顶点Vi->Vj有一条路径,则在顶点序列中顶点Vi必在Vj之前。我们称其为拓扑序列拓扑排序:对DAG图构造拓扑序列的过程只有无环图才能产生拓扑序列。
2026-03-23 23:04:31
644
原创 最短路径之Bellman-Ford算法
今天,是最短路径~基于动态规划(后面详细讲),可以计算图中任意两点间的最短路径(多源最短路)基于贪心,用来计算一个点到其他任意点的最短路径的算法(也就是说,只能计算起点只有一个的情况)。不能处理存在负边权的情况。假设起点是sdis[i] /dis[s][i]表示s到i的最短(路径的)距离,w[i][j]表示边<i, j>的权值,用i做中转点,来不断缩短s到j的距离。此操作称作松弛(relax)在Dijkstra算法中,对每条边执行一次松弛操作:贪心 + 松弛。
2026-03-22 23:23:55
465
原创 排序算法详解1
我们拿到一个数据结构,就会就其中进行一定的操作,比如:让数据的关键字有序存放这里的序,找数据的唯一标识key(按照?排序),默认是从小到大。
2026-03-20 21:15:33
253
原创 最小生成树算法
今天介绍最小生成树算法,最小生成树算法前提:(对应数据结构要掌握的)Kruskal算法Prim算法生成树:仅针对于连通图,对于有n个顶点的连通图,至少有n-1条边,那么连接所有顶点的极小连通子图就是生成树连通图:如果从任意一个顶点出发,沿着边总能走到任何其他顶点非连通图不存在生成树,而是只存在生成森林注:若在图的生成树上任意加上一条边,就必然形成回路最小生成树:对于连通网来说,边是带权值的,生成树的各边也带权值,因此把生成树的各边的权值总和称为生成树的权,把权值最小的生成树称为最小生成树。
2026-03-20 21:11:40
542
原创 线性和区间动态规划
线性DP是具有线性阶段划分的动态规划算法。若状态包含多个维度,则每个维度都是线性划分的阶段其是在线性结构上进行状态转移,这类问题没有固定的模板将问题划分为若干个子区间,并通过自定义状态和状态转移方程来求解每个子区间的最优解,最终得到整个区间的最优解对于每个区间,它的合并方式可能有很多种,我们需要去枚举所有的划分方式,通常是枚举区间的分割点,找到最优的方式(一般是找最少消耗)
2026-03-01 15:57:45
805
原创 字符串哈希
今天,是字符串哈希通常我们采用的是多项式Hash的方法,对于一个长度为l的字符串s来说,我们可以这样定义多项式Hash函数:其中,M需要选择一个素数(至少要比最大的字符要大),b是一个比最大字符大的整数(ASCII码值比较,根据经验,131比较好用)s = "xyz";该函数,实际上是将字符串看成b进制数,和我们平时的将一个某n进制数,变为一个十进制数,相类似。由于算出来的数字可能很大,所以对一个质数M取模(对质数取模,保证冲突相对较低)
2026-02-22 17:18:45
973
原创 图的存储之链式前向星
今天,是图的相关算法~数据结构涉及5种存图方式:邻接矩阵、邻接表、十字链表、邻接多重表、边集数组邻接矩阵:有向图、无向图邻接表:有向图、无向图十字链表:有向图邻接多重表:无向图边集数组:有向图、无向图邻接表、十字链表、邻接多重表是基于链表实现的,涉及到指针指向,代码操作复杂,易出现bug。刷题时常用的时邻接矩阵和邻接表(实现会进行改进)邻接矩阵、边集数组本身是基于数组的。
2026-02-12 15:02:45
1148
原创 DFS & BFS 搜索及优化
今天,是搜索及其优化~相当有难度的一个算法,可谓是融合递归、队列等知识搜索:也是对状态空间进行枚举,通过穷尽所有的可能来找到最优解,或者统计合法解的个数。搜索有很多优化方式,如减小状态空间,更改搜索顺序、剪枝等搜索分为:DFS & BFS深度优先遍历,每次都尝试往更深的节点走。在搜索算法中,该DFS常常指利用递归函数方便地实现暴力枚举的算法。通常是:构造一棵搜索树(状态树)来进行搜索。枚举所有的可能情况,每一种答案的得出过程有很多种可能,这些结果可以形成一棵状态树/搜索树。
2026-02-10 16:47:29
372
原创 并查集相关
今天,是并查集~并查集:查找某两个元素是否在同一个(树型)集合中(本质就是在集合中做合并和查询操作)一开始:所有的元素相互独立,每个元素单独成树给出信息:x y可以放在同一个集合中,分别查找x和y的根节点,把两棵树进行合并查询:a b,看一下a b是否在同一棵树中。
2026-02-06 17:11:11
346
原创 递归 & 分治
今天,我们来学习算法的第一座大山——递归 & 分治~在数学和计算科学中是指函数的定义中使用函数自身的方法,在计算科学中还额外指一种通过重复将问题分解为同类的子问题而解决问题的方法在树的学习中,这种思想也是使用颇为广泛大问题可以分解成小问题,小问题可以继续分,大问题和子问题的解决方式是一样的字面意思就是“分而治之”,把一个复杂的问题分成两个或更多的相同或相似的子问题,子问题相互独立,直到最后子问题可以简单的直接求解,原问题的解即子问题的合并。——最优子结构性质。
2026-01-31 16:47:52
347
原创 二分算法(优化)
在一个有序数组中查找一个数。每次考察数组当前部分的中间元素,如果中间元素刚好是要找的,就结束搜索过程;如果中间元素小于所查找的值,那么左侧的只会更小,不会有所查找的元素,只需到右侧查找;如果中间元素大于所查找的值,同理,只需到左侧查找。
2026-01-29 21:14:39
431
原创 进程调度和批处理系统调度
今天,我们来介绍调度~调度的本质是一个程序,调度的对象是进程(或内核级线程)CPU读了指令,就能运算,这就需要一个程序让CPU的PC指针指到一个对应的任务上怎么理解进程和内核级线程呢?就当作资源体,如:P1、P2…
2026-01-29 15:37:40
623
原创 前缀和 & 差分
今天,我们一起走进前缀和 & 差分~一种重要的预处理算法前缀和,数列的前i项和,是一种重要的预处理方式。差分和前缀和互为逆运算解决元素变化问题。
2026-01-28 15:52:17
673
原创 双指针算法
今天,我们来重温算法题型之滑动窗口问题~在大题中算是一种优化的策略滑动窗口/n指针/尺取法,本质都是一样的。利用双/n指针遍历获取满足条件的区间的算法。
2026-01-24 22:22:59
519
原创 管程、消息通信、屏障等
本篇将是进程间通信的最后一节~高级语言才有(尤其是Java语言比较支持)解决问题:进程的同步、互斥,不需要死锁死锁:我占着这把锁,别人也占着,抢不到锁,让有锁的人也放弃CPU(就像上一章中讲述的优先级反转的问题)定义:抽象的表示共享资源和对共享资源数据操作的集合(一种数据类型)把操作方法,初始化方法,共享变量(临界区)统统封装在一起管程内定义的局部变量只能被管程访问,任何进程只能经过特殊的函数调用才能进入管程,一次只能进一个进程不同的编程语言有不同的行为(不一定叫管程)
2026-01-21 22:00:23
721
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅