- 博客(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)logn)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
原创 C++ sort用法
这种算法就是sort,属于头文件中,当然,也可以使用,同时,sort属于std命名空间,如果不使用,则需要使用std::sort。同时,sort使用的是IntroSort首先,它开始作为一个快速排序算法。快速排序是一种非常高效的排序算法,但在某些情况下,特别是对于近乎有序的数据,其性能会急剧下降。然后,如果递归深度超过了某个阈值(这个阈值通常是log2nlog_2(n)log2n,其中n是数据的数量),它会切换到堆排序。这是为了避免快速排序在最坏情况下的复杂度On2。
2023-07-25 17:49:13
226
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人