自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 最短路径算法

适用:单源带负权最短路径时间复杂度:O(nm)O(nm)O(nm)适用:单源带负权最短路径时间复杂度:平均O(m)O(m)O(m),最坏O(nm)O(nm)O(nm)适用:单源不带负权最短路径时间复杂度:O(n2+m)O(n^2+m)O(n2+m)适用:单源不带负权最短路径时间复杂度:O((n+m)log⁡n)O((n+m)\log n)O((n+m)logn)适用:多源带负权最短路径时间复杂度:O(n3)O(n^3)O(n3)

2025-03-16 12:28:15 676

原创 Dijkstra的一种感性证明

我们任然要维护层级性,但这个时候因为边权不是非0即1,所以queue和deque都不行,于是,priority_queue就派上用场了,用优先队列仍然可以维护层级性,那么就仍然可以求解。很简单,当遇到边权位0的边时,可以认为与之相连的那个店与自己在同一层级,用deque维护,将其插至deque开头,任然能维护层级性。不妨先不看带权图最短路径,先看无权图的最短路径,这个非常好写,就是BFS,用queue就行。因为运用了队列维护层级性,即靠前的层级小,靠后的层级大,肯定优先用层级小的去更新。

2025-03-09 17:42:23 150

原创 图的基本知识

图的构成:图是由点集和边集组成,记作G=<V,E>G=<V,E>G=<V,E>,当V为空集时,该图记作空图(当V=∅时E=∅,但当E=∅时,V不一定是∅当V=\emptyset时E=\emptyset,但当E=\emptyset时,V不一定是\emptyset当V=∅时E=∅,但当E=∅时,V不一定是∅)有向图与无向图:当所有边均为无向边时,图为无向图,否则为有向图,此时无向边可以转成2条有向边自环:一条边连接两个相同的点,即∃(u,u)∈E\exist (u,u)\in E∃(u,u)∈E重边:无向图中两

2025-03-08 22:05:19 517

原创 deque双端队列

双端队列可以认为是vector和queue的升级版:vector只可以在末尾操作,queue只能在开头删,末尾加,而deque支持在开头和末尾同时操作deque是STL容器之一,包含在头文件中初始化:常见用法:上述操作,时间复杂度均为O(1)不难发现,vector所有的操作双端队列均有,用法极度相似,只不过多了个在开头进行操作的功能

2025-02-12 20:47:31 197

原创 Tarjan算法求LCA正确性大致证明

每次只要将一个子树遍历完,就将其合并到其直接父亲节点上,因为后面的几个分叉出的子树中的点,与在以遍历完的子树中的点的LCA一定是它们的直接父亲节点(图中是节点1)。但是,这样会增加时间复杂度,因为如果先遍历,后更新,所有在以当前节点为根的子树中的点都会被算2次,一次在当前节点,一次在询问中的另一个节点。对于所有在以2号点为根的子树中的点,如果要求它们与一个在以3至6号点为根的子树中的点的LCA,那么结果都一定是1,因为这两个点都和2至6节点一样从1号节点开始分在了两个不同的子树中。

2025-02-10 11:08:11 255

原创 KMP详解

绿色的区间是我们构造的,它是一个长度等于len2的后缀,由于两段红色区间一样,所以绿色的区间和右边的蓝色区间一样,进而和左边的蓝色区间一样。因为我们定义len为前一个元素匹配后的前缀的位置,所以初始的。在模式串P后面拼接上任意一个不会再S和P中出现的字符(例:”#”),再将S拼接在后面,只要找到一个位置。,然后再重复上述操作(如果满足情况1,则直接计算,若仍然时情况2,则继续重复)的值跨不过#,因此只要匹配长度=|P|,就一定是在S中匹配到了P,的值,即前一个元素匹配后的前缀的位置,记作len。

2025-02-09 21:04:05 974

原创 单调队列优化多重背包

然后同步更新单调队列即可(可以认为这个枚举量同时代表了。处于该范围时能取到的最大值,此时,最大值的范围随。接下来就是考虑滑动窗口的问题,的变化而变化,因此,只需要枚举。为背包容量),所以时间复杂度为。也可以唯一确定,因此要枚举。的影响,故可以提到外面去。*一个小问题:应该先枚举。永远不变,所以优先枚举。的滑动窗口内的最大值。,所以我们必然要枚举。

2025-02-08 13:33:12 741

原创 背包问题汇总

品当前重量的最大值,f[i][j] = f[i - 1][j]状态:f[i][j]表示前i种物品放入背包中的最大值。

2024-10-04 15:18:29 569 1

原创 欧拉筛解释(含C++代码)

【代码】欧拉筛解释(含C++代码)

2024-10-04 15:11:49 508

原创 C++ sort用法

这种算法就是sort,属于头文件中,当然,也可以使用,同时,sort属于std命名空间,如果不使用,则需要使用std::sort。同时,sort使用的是IntroSort首先,它开始作为一个快速排序算法。快速排序是一种非常高效的排序算法,但在某些情况下,特别是对于近乎有序的数据,其性能会急剧下降。然后,如果递归深度超过了某个阈值(这个阈值通常是log2nlog_2(n)log2​n,其中n是数据的数量),它会切换到堆排序。这是为了避免快速排序在最坏情况下的复杂度On2。

2023-07-25 17:49:13 226

空空如也

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

TA关注的人

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