一. 简单的直接算法 比较次数:(n-m-1)*m次 时间复杂度O(mn) 二. Rabin-karp算法 算法思想:将字符串转化成数字进行粗比较,筛选后进行细比较 算法设计: (1)直接数值比较 算法思想:字符集与 1-n 的数值满足双射,字符串转化为n进制数值 优化程度:a. 比较次数:n-m次 ...
分类:
编程语言 时间:
2020-06-25 18:00:36
阅读次数:
68
一个在反演里面经常用到的小技巧。 整除分块是用来解决一个整除的求和问题: \(\sum\limits_{i=1}^{n} \lfloor \frac{n}{i} \rfloor\) 如果直接暴力算,\(O(n)\) 的时间复杂度肯定接受不了。 但是观察得到,对于一些 \(i\),$\lfloor\f ...
分类:
其他好文 时间:
2020-06-25 13:55:48
阅读次数:
78
\(dsu\ on\ tree\) 是一个树上优化暴力,在统计每个子树信息的时候可以做到 \(O(nlogn)\) 大致思路:先轻重链剖分,然后统计每棵子树信息的时候先递归所有轻儿子(回溯时清空信息),最后递归重儿子(回溯时不清空信息)。 最重要的就是时间复杂度分析了吧(其实非常简单):我们发现一个 ...
分类:
其他好文 时间:
2020-06-25 12:21:45
阅读次数:
62
通常,矩阵树定理算出的生成树是边权乘积的和。 如果计算所有生成树边权和的和,比较暴力的方法就是枚举一条边,然后计算包含这条边的生成树个数。 这样的时间复杂度是$O(mn3)$的,最坏为$O(n3)$。 考虑优化: 对于一条边权为w的边,将边权设为关于x的多项式$1+wx$。 这样,容易证出,最后的一 ...
分类:
其他好文 时间:
2020-06-25 00:00:13
阅读次数:
181
这么简单的东西我现在才学,血亏... on tree大家都能翻译过来。至于dsu,大概就是并查集的意思吧。 但是这并不代表并查集上树了,只是代表用到了启发式合并的思想。 进入正题: 我们有一颗树,有对于子树的询问。这种题暴力就是遍历每个节点的子树中的所有信息暴力统计出来更新答案,然后消除该节点的贡献 ...
分类:
其他好文 时间:
2020-06-24 22:00:15
阅读次数:
46
需求背景 需求 一张数据表 其中有sid字段,代表tag,每行数据可能有多个tag字段 统计全量数据中所有tag出现的次数(按tag分组,分别有多少数据) source table demo id sid 1 a3,a4,a1,a2,a5 2 a5,a3,a4,a2 3 a5,a3,a4 targe ...
分类:
数据库 时间:
2020-06-24 16:34:59
阅读次数:
59
题目链接 题意: ? 对于给定序列,求出前奇数个元素的中位数。 思路: ? 既然要求中位数,根据题目一看,有点类似与滑动窗口那道题,但想了想,不一样。暴力维护队列,O(\(n^2\))的时间复杂度面对十万肯定会爆,再试试之前学过的STL模板的优先队列和set是否可以,发现两者对于中位数的查找似乎显得 ...
分类:
其他好文 时间:
2020-06-22 21:18:49
阅读次数:
79
$\text$序列,是树与序列的一种双射。 ##构建过程: 每次找到一个编号最小的叶子节点$Leaf$,将它删掉,并将它所连接的点的度数$-1$,且加入$\text$序列。 重复上述步骤,直到只剩下两个点。 ##实现: 考虑如何实现。 最朴素的显然每次暴力找,复杂度$O(n^2).$显然不够优秀。 ...
分类:
其他好文 时间:
2020-06-21 18:13:00
阅读次数:
67
题目来源于力扣(LeetCode) 一、题目 1299. 将每个元素替换为右侧最大元素 题目相关标签:数组 提示: 1 <= arr.length <= 10^4 1 <= arr[i] <= 10^5 二、解题思路 2.1 暴力法 遍历 nums 数组,对于每个元素都遍历一遍其索引后的全部元素 2 ...
分类:
其他好文 时间:
2020-06-20 23:59:48
阅读次数:
88
原题链接 https://www.luogu.com.cn/problem/P6492 题解 首先题目中的 L 和 R 我们可以分别用 0 和 1来代替; 一个很自然的想法是用线段树维护答案区间的左右端点; 思路简单暴力,但是合并信息的时候需要考虑的情况较多,且复杂度较高,会T; 这里贴上我这个思路 ...
分类:
其他好文 时间:
2020-06-20 21:27:48
阅读次数:
77