容斥原理与子集卷积(六)

这一节,我们讲讲子集卷积在任意环上的推广,和在min-sum半环上的一个做法。

讲之前解释一下一些简单的代数结构。

一些代数概念

半群(semigroup):如果一个集合 《容斥原理与子集卷积(六)》 和定义在这个集合上的一个二元运算 《容斥原理与子集卷积(六)》 ,(既是函数 《容斥原理与子集卷积(六)》 ),满足结合律(Associaltivity),即: 《容斥原理与子集卷积(六)》 那么称 《容斥原理与子集卷积(六)》 为半群。

幺半群(monoid):如果对于一个半群 《容斥原理与子集卷积(六)》 ,存在单位元(Identity),即: 《容斥原理与子集卷积(六)》 则称 《容斥原理与子集卷积(六)》 为幺半群。

群(group):如果一个幺半群 《容斥原理与子集卷积(六)》 ,满足任意元素存在逆元(Invertibility),即: 《容斥原理与子集卷积(六)》 则称 《容斥原理与子集卷积(六)》 为群。

阿贝尔群(Abelian group):如果一个群 《容斥原理与子集卷积(六)》 ,满足交换律(Commutativity),即: 《容斥原理与子集卷积(六)》 则称 《容斥原理与子集卷积(六)》 为阿贝尔群,或者交换群。

比如正整数的加法 《容斥原理与子集卷积(六)》 就是一个半群,而自然数的加法 《容斥原理与子集卷积(六)》 就是一个幺半群,整数的加法 《容斥原理与子集卷积(六)》 就是一个阿贝尔群。

半环(semiring):如果一个三元代数结构 《容斥原理与子集卷积(六)》 ,对于 《容斥原理与子集卷积(六)》 都满足结合律和交换律, 《容斥原理与子集卷积(六)》 对于 《容斥原理与子集卷积(六)》 来说满足分配律(distrbutivity),即: 《容斥原理与子集卷积(六)》 ,并且存在两个元素 《容斥原理与子集卷积(六)》 ,满足 《容斥原理与子集卷积(六)》《容斥原理与子集卷积(六)》 的零元素,即 《容斥原理与子集卷积(六)》《容斥原理与子集卷积(六)》《容斥原理与子集卷积(六)》 的单位元, 《容斥原理与子集卷积(六)》《容斥原理与子集卷积(六)》 的单位元,那么称 《容斥原理与子集卷积(六)》 是半环。

环(ring):如果一个三元代数结构 《容斥原理与子集卷积(六)》 ,满足 《容斥原理与子集卷积(六)》 是个阿贝尔群, 《容斥原理与子集卷积(六)》 是一个幺半群,并且 《容斥原理与子集卷积(六)》 对于 《容斥原理与子集卷积(六)》 满足分配律,那么 《容斥原理与子集卷积(六)》 就是一个环。

环与子集卷积

之前的文章中,我们讨论的都是值域定义在环 《容斥原理与子集卷积(六)》 的函数,其中 《容斥原理与子集卷积(六)》 是整数加法, 《容斥原理与子集卷积(六)》 是整数乘法。而我们所有的变换,zeta变换,Mobius变换,或者之后的子集卷积运算,都没有超出环的范围。

换句话说,只要我们想,我们可以对值域定义在任意的环上的函数进行zeta变换,Mobius变换,子集卷积运算

举个栗子:我们有两个函数 《容斥原理与子集卷积(六)》 ,我们想计算如下卷积: 《容斥原理与子集卷积(六)》 ,即把 《容斥原理与子集卷积(六)》 乘运算,换成了 《容斥原理与子集卷积(六)》 取最小运算。即环 《容斥原理与子集卷积(六)》 (这是一个合法的环,大家可以思考一下为什么)。这样的卷积,依然是可以利用zeta变换和Mobius变换快速计算,当然我们需要把zeta变换和Mobius变换的 《容斥原理与子集卷积(六)》 运算也变成 《容斥原理与子集卷积(六)》

半环min-sum上的子集卷积与覆盖积

我们现在可以计算 《容斥原理与子集卷积(六)》 环上的子集卷积了,但是如果我们想换过来呢?比如我们想计算 《容斥原理与子集卷积(六)》 上的子集卷积。

然而很不幸, 《容斥原理与子集卷积(六)》 并不是一个阿贝尔群(因为没有逆元),即对于 《容斥原理与子集卷积(六)》 ,不存在 《容斥原理与子集卷积(六)》 ,使得 《容斥原理与子集卷积(六)》 ,从而 《容斥原理与子集卷积(六)》 不是一个环。

不难验证, 《容斥原理与子集卷积(六)》 其实是个半环。zeta变换对于半环来说是没有任何问题的,但是到了Mobius变换,我们就需要求 《容斥原理与子集卷积(六)》 的逆元(因为运算中有个 《容斥原理与子集卷积(六)》 ),所以我们不能计算Mobius变换。但这并不意味着min-sum上的子集卷积是不可做的,我们可以转换到一个环上(虽然会增加复杂度)。

定理13:对于两个函数 《容斥原理与子集卷积(六)》 ,输入 《容斥原理与子集卷积(六)》 全部 《容斥原理与子集卷积(六)》 个值,所有 《容斥原理与子集卷积(六)》 在min-sum半环上的子集卷积的 《容斥原理与子集卷积(六)》 个输出值可以在 《容斥原理与子集卷积(六)》 的时间内计算出来。对覆盖积也成立。

证明:《容斥原理与子集卷积(六)》 ,我们构造连个新的函数 《容斥原理与子集卷积(六)》 ,其中 《容斥原理与子集卷积(六)》 。我们考虑卷积: 《容斥原理与子集卷积(六)》 其中 《容斥原理与子集卷积(六)》 表示 《容斥原理与子集卷积(六)》《容斥原理与子集卷积(六)》 的个数。这个卷积是一般的子集卷积,所以我们是能直接算出来等式左侧的。我们知道 《容斥原理与子集卷积(六)》 ,所以我们可以计算出所有的 《容斥原理与子集卷积(六)》 (考虑等式左侧表达成 《容斥原理与子集卷积(六)》 进制)。

所以我们就能得到, 《容斥原理与子集卷积(六)》

我们将半环上的 《容斥原理与子集卷积(六)》 转换到环上的 《容斥原理与子集卷积(六)》 ,所以我们可以在 《容斥原理与子集卷积(六)》 的复杂度内计算。但是由于 《容斥原理与子集卷积(六)》 是个 《容斥原理与子集卷积(六)》 bit的大整数,所以在这个整数上的四则运算的复杂度也该被考虑进来。故我们有复杂度 《容斥原理与子集卷积(六)》

证毕。

下一节将讲一些子集卷积的应用~

    原文作者:好地方bug
    原文地址: https://zhuanlan.zhihu.com/p/33376490
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞