Xor-FWT 的另一种理解方式
Xor-FWT 的另一种理解方式
学习 \(\text{Fennec's Algorithm}\) 的额外收获,顺手记录一下。
假设我们要求两个长度为 \(n\) 的数组的异或卷积,为方便起见令 \(n = 2^m\),也就是类似下面的形式
\]
考虑构造 \(\mathbb{Z}_2^n\) 中的向量表达异或运算。对于两条向量 \(u, v\),它们的加法 \(u + v\) 恰好就是原本的 \(i \oplus j\)(因为是 \(\bmod 2\) 意义下所以自然不会进位)。
类似的定义向量点乘 \(u \cdot v = u_0 \times v_0 + u_1 \times v_1 + \ldots u_{m - 1} \times v_{m - 1}\),同样是在 \(\bmod 2\) 意义下。所以结果相当于 \(\text{pocount}(i \ \text{and} \ j) \bmod 2\)。我们发现其恰好对应 \(\text{FWT}\) 的贡献系数。下面简记 \(\langle i, j \rangle = \text{pocount}(i \ \text{and} \ j) \bmod 2\)。
设 \(\hat{A}_i = \sum\limits_{j} A_i (-1)^{\langle i, j \rangle}\)。\(\text{Xor-FWT}\) 的主流程即将 \(\hat{A}\) 和 \(\hat{B}\) 的对应位置乘起来,得到 \(\hat{C}\)。
现在考虑 \(A_u\) 对 \(\hat{A}_w\) 的贡献,系数为 \((-1)^{u \cdot w}\),类似的 \(B_v\) 对 \(\hat{B}_w\) 的贡献系数 \((-1)^{v \cdot w}\),而对应位置系数相乘相当于指数相加,即 \(A_u \times B_v\) 对 \(C_w\) 的贡献系数 \((-1)^{(u + v) \cdot w}\),即先将 \(u\) 和 \(v\) 做异或卷积(\(u + v\)),再考察其对 \(\hat{C}_w\) 的贡献。
Xor-FWT 的另一种理解方式的更多相关文章
- CSS优先级的两种理解方式
方式一:值相加 我们先去MDN看看官方的解释: 优先级是如何计算的? 优先级就是分配给指定的 CSS 声明的一个权重,它由 匹配的选择器中的 每一种选择器类型的 数值 决定. 而当优先级与多个 CSS ...
- [数据库事务与锁]详解八:底理解数据库事务乐观锁的一种实现方式——CAS
注明: 本文转载自http://www.hollischuang.com/archives/1537 在深入理解乐观锁与悲观锁一文中我们介绍过锁.本文在这篇文章的基础上,深入分析一下乐观锁的实现机制, ...
- 重新理解JS的6种继承方式
写在前面 一直不喜欢JS的OOP,在学习阶段好像也用不到,总觉得JS的OOP不伦不类的,可能是因为先接触了Java,所以对JS的OO部分有些抵触. 偏见归偏见,既然面试官问到了JS的OOP,那么说明这 ...
- C++ 中三种继承方式的理解
一.公有继承(public inheritance) 1.概念:当类的继承方式为公有继承时,基类的公有成员和保护成员的访问属性在派生类中不变,而基类的私有成员不可以直接访问. 实验一下: 我们用代 ...
- 理解BurpSuit Intruder几种攻击方式
Intruder标签下有四种攻击方式 Sniper Battering Ram Pitchfork Cluster Bomb 假设用户名密码词典分别如下: user1,user2,usre3 pass ...
- 015-线程同步-synchronized几种加锁方式、Java对象头和Monitor、Mutex Lock、JDK1.6对synchronized锁的优化实现
一.synchronized概述基本使用 为确保共享变量不会出现并发问题,通常会对修改共享变量的代码块用synchronized加锁,确保同一时刻只有一个线程在修改共享变量,从而避免并发问题. syn ...
- Android中Fragment与Activity之间的交互(两种实现方式)
(未给Fragment的布局设置BackGound) 之前关于Android中Fragment的概念以及创建方式,我专门写了一篇博文<Android中Fragment的两种创建方式>,就如 ...
- Android开发之基本控件和详解四种布局方式
Android中的控件的使用方式和iOS中控件的使用方式基本相同,都是事件驱动.给控件添加事件也有接口回调和委托代理的方式.今天这篇博客就总结一下Android中常用的基本控件以及布局方式.说到布局方 ...
- 通过三个DEMO学会SignalR的三种实现方式
一.理解SignalR ASP .NET SignalR 是一个ASP .NET 下的类库,可以在ASP .NET 的Web项目中实现实时通信(即:客户端(Web页面)和服务器端可以互相实时的通知消息 ...
- JavaScript 函数的两种声明方式
1.函数声明的方式 JavaScript声明函数有两种选择:函数声明法,表达式定义法. 函数声明法 function sum (num1 ,num2){ return num1+num2 } 表达式定 ...
随机推荐
- CDH添加es服务
地址:https://blog.csdn.net/guoliduo/article/details/105072857 注意:目前只支持cdh5.x的版本安装es,cdh6.x暂不支持.
- lamada 表达式
语法篇 -- \(lamada\) 表达式 函数内定义的函数,看起来能使代码更加美观. 具体定义方法: 前面挂个 auto ,不管他返不返回值 后面是函数名(表达式名) 例: Cekas 先是中括号表 ...
- Go channel 介绍
Go 语言(Golang)中的 chan 是通道(channel)的缩写,用于在不同的 goroutine 之间进行通信.通道允许你在 goroutine 之间传递数据,从而实现同步和共享内存.下面是 ...
- Linux 安装 TeX Live
安装新版本 cd /tmp # 下载安装压缩包 wget https://mirror.ctan.org/systems/texlive/tlnet/install-tl-unx.tar.gz # 解 ...
- 【Mac】之本地连接虚拟机linux环境
上一篇安装完centos虚拟机之后,如何远程连接呢? 先进入虚拟机的界面: 发现没有bash 终端输入: # -bash :telnet:command not found # 发现是虚拟机没有安装 ...
- docker系列教程:docker图形化工具安装及docker系列教程总结
通过前面的学习,我们已经掌握了docker-compose容器编排及实战了.高级篇也算快完了.有没有相关,我们前面学习的时候,都是通过命令行来操作docker的,难道docker就没有图形化工具吗?答 ...
- 使用inno setup 打包Pyinstaller生成的文件夹
背景:pyinstaller 6.5.0.Inno Setup 6.2.2 1. 需要先使用pyinstaller打包,生成包括exe在内的可执行文件夹 注意:直接使用pyinstaller打包,生成 ...
- CentOS 7 yum无法使用解决方法Could not retrieve mirrorlist http://mirrorlist.centos.org/?release=7&arch=
在centos7中使用yum命令时候报错: Loading mirror speeds from cached hostfile Could not retrieve mirrorlist http: ...
- Angular 学习笔记 (消毒 sanitizer)
refer : https://www.intricatecloud.io/2019/10/using-angular-innerhtml-to-display-user-generated-cont ...
- face-api.js 学习笔记
参考 Build Real Time Face Detection With JavaScript (youtube get started) face-api.js - JavaScript API ...