记号

  • \(\otimes\) 代表或/与/异或卷积
  • \(\oplus\) 代表“拼接”,例如 \(A\oplus B\) 即将 \(B\) 接在 \(A\) 的后面;
  • \(+,-,\times\) 代表按位运算,例如 \(A+B=\{a_0+b_0,a_1+b_1,...,a_n + b_n\}\);
  • \(F(A)\) 代表 \(A\) 进行 fwt 后的序列;
  • \(A_0\) 代表 \(A\) 的前半部分,\(A_1\) 代表 \(A\) 的后半部分,\(A_0\oplus A_1 = A\)

或卷积

直接给出或FWT的递归形式:

\[F(A)=\begin{cases}F(A_0) \oplus F(A_0+A_1)&|A| > 1\\A&|A|=1\end{cases}
\]

接下来是一些性质:

  • \(F(A + B) = F(A) + F(B)\),这一点比较明显;
  • \(F(A\otimes B)=F(A) \times F(B)\),直接证明比较麻烦,我们考虑归纳证明。

易知在 \(|A| = |B| = 1\) 时,上述结论成立。

假设已经证明了对于 \(|A| = |B| = \frac n2\) 上述结论成立,下证对于 \(|A| = |B| = n\) 成立。

首先一个简单的分析——考虑 \(A_0\) 和 \(A_1\),其实下标上只有最高位上 \(A_0\) 是 \(0\),\(A_1\) 是 \(1\) 的区别。然后我们再考虑 \((A \otimes B)_0\),既然是或卷积,最高位是 \(0\),那肯定参与的下标都是最高位为 \(0\),也即

\[(A \otimes B)_0 = A_0 \times B_0
\]

稍微复杂的是 \((A \otimes B)_1\),要求最高位至少有一个 \(1\),也就是说

\[(A \otimes B)_1 = A_0 \otimes B_1 + A_1 \otimes B_0 + A_1 \otimes B_1
\]

有了以上的结论就可以完成或卷积性质的证明了:

\[\begin{aligned}
F(A \otimes B) &= F\Big[(A \otimes B)_0\Big] \oplus F\Big[(A \otimes B)_0 + (A \otimes B)_1\Big]\\
&= F(A_0\otimes B_0) \oplus F(A_0 \otimes B_0 + A_0 \otimes B_1 + A_1 \otimes B_0 + A_1 \otimes B_1)\\
&= [F(A_0) \times F(B_0)] \oplus [F(A_0 + A_1) \times F(B_0 + B_1)]\\
&= [F(A_0) \oplus F(A_0 + A_1)] \times [F(B_0) \oplus F(B_0 + B_1)] & \text{(按位运算)}\\
&= F(A) \times F(B)
\end{aligned}
\]

与卷积与或卷积相同。

异或卷积

同样的,我们可以得到

\[\begin{matrix}
(A \otimes B)_0 = A_0 \otimes B_0 + A_1 \otimes B_1\\
(A \otimes B)_1 = A_0 \otimes B_1 + A_1 \otimes B_0
\end{matrix}
\]

然后给出异或FWT的递归式:

\[F(A)=\begin{cases}
F(A_0 + A_1) \oplus F(A_0 - A_1)&|A| > 1\\
A&|A| = 1
\end{cases}
\]

接下来是类似的归纳推导:

\[\begin{aligned}
F(A \otimes B) &= F[(A \otimes B)_0 + (A \otimes B)_1] \oplus F[(A \otimes B)_0 - (A \otimes B)_1]\\
&= F(A_0 \otimes B_0 + A_1 \otimes B_1 + A_0 \otimes B_1 + A_1 \otimes B_0) \oplus F(A_0 \otimes B_0 + A_1 \otimes B_1 - A_0 \otimes B_1 - A_1 \otimes B_0)\\
&= [F(A_0 + A_1) \times F(B_0 + B_1)] \oplus [F(A_0 - A_1) \times F(B_0 - B_1)]\\
&= [F(A_0 + A_1) \oplus F(A_0 - A_1)] \times [F(B_0 + B_1) \otimes F(B_0 - B_1)]\\
&= F(A) \times F(B)
\end{aligned}
\]

小记

之前推导 FWT 是正向的构造,虽然构造非常巧妙,但是不太好理解。尤其是异或卷积利用到“异或后二进制位 1 的个数的奇偶性不变”这种虽然明显,但并不好用的性质。

现在能找到一种用归纳法证明 FWT 的方式,感觉非常直接,所以记下来了。

「postOI」以另一种方式证明 FWT的更多相关文章

  1. 「BJWC2018」Border 的四种求法

    「BJWC2018」Border 的四种求法 题目描述 给一个小写字母字符串 \(S\) ,\(q\) 次询问每次给出 \(l,r\) ,求 \(s[l..r]\) 的 Border . \(1 \l ...

  2. 「MoreThanJava」机器指令到汇编再到高级编程语言

    「MoreThanJava」 宣扬的是 「学习,不止 CODE」,本系列 Java 基础教程是自己在结合各方面的知识之后,对 Java 基础的一个总回顾,旨在 「帮助新朋友快速高质量的学习」. 当然 ...

  3. 「MoreThanJava」Day2:变量、数据类型和运算符

    「MoreThanJava」 宣扬的是 「学习,不止 CODE」,本系列 Java 基础教程是自己在结合各方面的知识之后,对 Java 基础的一个总回顾,旨在 「帮助新朋友快速高质量的学习」. 当然 ...

  4. loj#2552. 「CTSC2018」假面

    题目链接 loj#2552. 「CTSC2018」假面 题解 本题严谨的证明了我菜的本质 对于砍人的操作好做找龙哥就好了,blood很少,每次暴力维护一下 对于操作1 设\(a_i\)为第i个人存活的 ...

  5. 「JavaScript」四种跨域方式详解

    超详细并且带 Demo 的 JavaScript 跨域指南来了! 本文基于你了解 JavaScript 的同源策略,并且了解使用跨域跨域的理由. 1. JSONP 首先要介绍的跨域方法必然是 JSON ...

  6. 「JavaScript」JS四种跨域方式详解

    原文地址https://segmentfault.com/a/1190000003642057 超详细并且带 Demo 的 JavaScript 跨域指南来了! 本文基于你了解 JavaScript ...

  7. Linux 小知识翻译 - 「版本号」的命名方式

    包括OS,所有的软件都有版本号信息.一般来说,版本号的增大表示软件的功能增强了或者修正了一些Bug,也就是表示软件更新了. 版本号的命名方式没有统一的标准.每种软件都不一样. 大部分情况下,版本号以「 ...

  8. 「python」: arp脚本的两种方法

    「python」: arp脚本的两种方法 第一种是使用arping工具: #!/usr/bin/env python import subprocess import sys import re de ...

  9. Android逆向之旅---静态方式分析破解视频编辑应用「Vue」水印问题

    一.故事背景 现在很多人都喜欢玩文艺,特别是我身边的UI们,拍照一分钟修图半小时.就是为了能够在朋友圈显得逼格高,不过的确是挺好看的,修图的软件太多了就不多说了,而且一般都没有水印啥的.相比较短视频有 ...

  10. 「Python」6种python中执行shell命令方法

    用Python调用Shell命令有如下几种方式: 第一种: os.system("The command you want"). 这个调用相当直接,且是同步进行的,程序需要阻塞并等 ...

随机推荐

  1. vue学习笔记(三)---- vue-resource

    一.使用vue-resource发起get请求 github仓库地址:https://github.com/pagekit/vue-resource/blob/develop/docs/http.md ...

  2. 城市路(Dijkstra)

    这道题目需要用到 Dijkstra plus 版(堆优化) 模板还是一样就是有几个点值得注意 1.这里用的是优先队列,原版需要搜出最小,并且没用过的点,省时间就剩在这里用小根堆就可以完美解决这个问题. ...

  3. 2211-11Flask入门教程

    本篇记录来自Flask入门教程 准备工作 在通过这本书学习 Flask 开发前,我假设你已经了解了 Python 和 HTML 的基础知识.如果还没有,那么可以先从下面这些在线资源入手: <使用 ...

  4. 祝 .NET 20周年生日快乐

    活动官网:https://dotnet.microsoft.com/zh-cn/

  5. Vue + ElementUI el-input无法输入、修改、删除的问题

    1.业务背景 查询资料此问题出现的原因是:vue页面进行数据渲染时,层次嵌套或者多重数据绑定导致该组件信息框数据不能被Vue实时监听到,以此出现了数据发生改变但页面上更新或删除对应信息框的数据毫无反应 ...

  6. NuGet私有服务器ProGet Docker搭建和公司中实战用法

    一.什么时候需要用到NuGet私有服务器 很多公司中架构师会搭建一个统一的项目基础架构模板,然后全部新项目都会拿这个基础架构来开发新的项目,那架构中就会有很多的中间件,比喻公司内部的封装好的Redis ...

  7. 郁金香 注入DLL代码 与MFC窗口DLL文件 开源

    10/10号更新 DLL注入器注入DLL卡死 问题 新增打开控制台 将阳光输出到控制台中 注入DLL代码 1 #include <stdio.h> 2 #include<Window ...

  8. vue中央事件

    详情请看这个链接https://blog.csdn.net/sinat_17775997/article/details/59025563

  9. JZOJ 3570. 【GDKOI2014】壕壕的寒假作业

    解析 这道题比较水. 求最快什么时候做完作业? 如果要最快完成第i份作业,那么是i的前继那些作业都要完成之后才能够完成i,所以,为了尽快完成i,我们要把i的前继的作业全部先做完. 最慢什么时候做完作业 ...

  10. vue-seamless-scroll滚动加点赞衔接处数据不同步问题

    VUE使用vue-seamless-scroll自动滚动加点赞,因为有两个overhidden导致点击不同同步dom,在代码中会出现两处vue-seamless-scroll上下悬接,悬接处点赞触发没 ...