1 条题解
-
0
(由于我比较菜,所以如果有什么锅或者有什么不对的地方欢迎指出)
应该是打作"归约"而不是"规约",感谢评论区大佬指正。
如果您有过和lxl谈笑风生的经历,可能会听说过一个叫作归约矩乘的东西,还大概知道它是用来证明一个问题最优时间复杂度不低于某个值的。那么,这个是什么?
前置知识:
可能还要一些分块的思想。
首先先其中一个方向的
其实归约矩乘,就是对于一个问题,如果我们能够证明它不弱于求 两个矩阵相乘这样一个问题,那么解决它的时间复杂度也是不低于解决矩阵乘法这样一个问题的。
的矩阵乘法,目前是没(这里表示任意,是一个常数)做法的。
然后对于一种特殊的矩阵,矩阵(矩阵里的数只有)的乘法,在忽略polygon因子的情况下,最优复杂度和普通的矩阵乘法的时间复杂度是相同的(因为普通矩乘按位拆就是0/1矩阵)。事实上归约矩乘一般都归约成矩阵的。
当然,现在也没有证明矩阵乘法没有的作法。
说了半天还是没办法证明时间复杂度下界,那么这玩意有啥用吗?在做题或者出题时还是比较有用的,毕竟对矩阵乘法已经被学术大佬们研究了很多却也没有做法,我们在自己做题时也不至于想出矩阵乘法的做法。就像如果你发现一个题是NPC问题,你总不至于去想多项式时间复杂度的算法吧。
于是,对于上述问题,我们就不应当去思考有没有做法。然后事实上,由于那些优于的矩乘大多都具有很大的常数,所以在OI上一般找到的做法就够了,至于一些时间复杂度更优的做法,就是学术研究的事情了。
(下面默认同级)
上面讲的可能有点抽象,那么下面来点例子:
问题1:
SP10707 COT2 - Count on a tree II
题意:给你一棵树,每个节点有一个颜色,若干次询问求树上两个节点路径上的节点的颜色种类数。
我们假定这个题有一个做法,那么对于两个的0/1矩阵A,B,我们考虑构造下面一种情况:
一棵树,从root挂下来条链,分为前半部分和后半部分,每部分条。
如果那么就在前半部分的第条链上挂一个颜色为的节点,而在后半部分第条链上挂一个颜色为的节点。
的话就随便搞一个大于的颜色。
然后对于,它相当于是,也就是有多少种颜色,使得在前半部分的第条链中出现且在后半部分的第条链中出现,那么就是 :
前半部分的第条链节点数 + 后半部分的第条链节点数 + 1 - 两条链链底之间的路径的颜色数。
那么询问就构造 任意的一个前半部分的链链底 到 任意的一个后半部分的链链底 的颜色数就行了(询问数是个)。
也就是说,假如有一种算法,它可以解决这个问题,那么就可以用它来解决的矩阵乘法问题,因此这个算法的时间复杂度也一定是不低于的矩阵乘法的最优复杂度的。
问题二:小Z的袜子
题意(略有修改):
一个序列,若干次询问求有多少个点对使得,。
建议读者先自行思考以下如何归约。
做法(仅简述思路):
考虑对序列成分成个块,块分为前半部分的块和后半部分的块。
0/1矩阵,
时在前半部分的第个块放入数。
时在后半部分的第个块放入数。
那么就是前半部分第个块对后半部分的第个块的贡献。
定义表示询问前半部分第个块到后半部分第个块的答案。
那么考虑容斥
那么即可证明这个问题也是不弱于的矩阵乘法的。
三、区间逆序对
然后你会发现如果把序列反转一下就那么就可以证明区间逆序对不弱于小Z的袜子。
四、区间加,区间的数的个数
现在有修改操作了。
考虑对于序列分成块。
0/1矩阵
表示在第个块放一个数。
然后我们考虑用操作维护。
考虑对于按行的操作。
第行,如果那么使第个块就的数相比最初的时候,否则第个块的数应当和最初时相同。(可以知道修改操作总共最多次)
完成了一行的操作后,我们就可以放上询问。
那么就相当于是此时序列里的个数(要求第个块必须处于状态,要求第个块存在数,这样一个块中才有。)
那么我们就询问全局的数个数 减去 全局 的数个数就行了。
询问也可以知道总共最多个。
于是这个问题也是不弱于的矩阵乘法的。
现在来说说另一个方向的归约
你们是不是很好奇为什么会有诸如这样的奇妙时间复杂度的做法
其实,这也要用到矩阵乘法,通过一些优于的矩阵乘法来优化做法。
还是来点例子吧
还是那个题:(时间复杂度分析忽略polylog因子)
一个序列,若干次询问求有多少个点对使得,。
考虑根号分治,将出现次数排名最多的 种数 和其他的数分别考虑。
其他的数出现次数最多次,所以我们可以对于这类数,转换成二维数点,时间复杂度或者实现的精细点可以。
然后对于排名前的数,考虑分块,分成块。
散块部分直接暴力
整块部分,我们只要预处理出任意两个块的贡献即可,之后就搞个二维前缀和就行了。
我们将这个数重标号
定义表示第个块 新标号中的出现次数
表示第个块 新标号中的出现次数
矩阵
那么,就是块间的贡献。
假设我们现在矩阵乘法能做到
那么我们这个题的时间复杂度就是,利用高中数学知识就可以算出最优是
可以看出,当的时候就就优于了。
当取目前最快的,该题的时间复杂度就可以做到传说中的
鸣谢:
lxl等Ynoi群的神仙们给的指点。
- 1
信息
- ID
- 4254
- 时间
- 2000ms
- 内存
- 512MiB
- 难度
- 10
- 标签
- 递交数
- 1
- 已通过
- 1
- 上传者