Xor-FWT 的另一种理解方式

学习 \(\text{Fennec's Algorithm}\) 的额外收获,顺手记录一下。

假设我们要求两个长度为 \(n\) 的数组的异或卷积,为方便起见令 \(n = 2^m\),也就是类似下面的形式

\[C_k = \sum\limits_{i \oplus j} A_i \times B_j
\]

考虑构造 \(\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 的另一种理解方式的更多相关文章

  1. CSS优先级的两种理解方式

    方式一:值相加 我们先去MDN看看官方的解释: 优先级是如何计算的? 优先级就是分配给指定的 CSS 声明的一个权重,它由 匹配的选择器中的 每一种选择器类型的 数值 决定. 而当优先级与多个 CSS ...

  2. [数据库事务与锁]详解八:底理解数据库事务乐观锁的一种实现方式——CAS

    注明: 本文转载自http://www.hollischuang.com/archives/1537 在深入理解乐观锁与悲观锁一文中我们介绍过锁.本文在这篇文章的基础上,深入分析一下乐观锁的实现机制, ...

  3. 重新理解JS的6种继承方式

    写在前面 一直不喜欢JS的OOP,在学习阶段好像也用不到,总觉得JS的OOP不伦不类的,可能是因为先接触了Java,所以对JS的OO部分有些抵触. 偏见归偏见,既然面试官问到了JS的OOP,那么说明这 ...

  4. C++ 中三种继承方式的理解

    一.公有继承(public inheritance) 1.概念:当类的继承方式为公有继承时,基类的公有成员和保护成员的访问属性在派生类中不变,而基类的私有成员不可以直接访问. 实验一下:   我们用代 ...

  5. 理解BurpSuit Intruder几种攻击方式

    Intruder标签下有四种攻击方式 Sniper Battering Ram Pitchfork Cluster Bomb 假设用户名密码词典分别如下: user1,user2,usre3 pass ...

  6. 015-线程同步-synchronized几种加锁方式、Java对象头和Monitor、Mutex Lock、JDK1.6对synchronized锁的优化实现

    一.synchronized概述基本使用 为确保共享变量不会出现并发问题,通常会对修改共享变量的代码块用synchronized加锁,确保同一时刻只有一个线程在修改共享变量,从而避免并发问题. syn ...

  7. Android中Fragment与Activity之间的交互(两种实现方式)

    (未给Fragment的布局设置BackGound) 之前关于Android中Fragment的概念以及创建方式,我专门写了一篇博文<Android中Fragment的两种创建方式>,就如 ...

  8. Android开发之基本控件和详解四种布局方式

    Android中的控件的使用方式和iOS中控件的使用方式基本相同,都是事件驱动.给控件添加事件也有接口回调和委托代理的方式.今天这篇博客就总结一下Android中常用的基本控件以及布局方式.说到布局方 ...

  9. 通过三个DEMO学会SignalR的三种实现方式

    一.理解SignalR ASP .NET SignalR 是一个ASP .NET 下的类库,可以在ASP .NET 的Web项目中实现实时通信(即:客户端(Web页面)和服务器端可以互相实时的通知消息 ...

  10. JavaScript 函数的两种声明方式

    1.函数声明的方式 JavaScript声明函数有两种选择:函数声明法,表达式定义法. 函数声明法 function sum (num1 ,num2){ return num1+num2 } 表达式定 ...

随机推荐

  1. 前端黑科技:使用 JavaScript 实现网页扫码功能

    在数字化时代,二维码已经渗透到我们生活的方方面面.从移动支付到产品溯源,二维码凭借其便捷性和高效性,成为了信息传递的重要载体.而随着前端技术的不断发展,我们甚至可以使用 JavaScript 在网页端 ...

  2. 9组-Alpha冲刺-6/4

    一.基本情况 队名:不行就摆了吧 组长博客:https://www.cnblogs.com/Microsoft-hc/p/15546712.html 小组人数: 8 二.冲刺概况汇报 卢浩玮 过去两天 ...

  3. QT中Table Widget树控件的使用

    关于Item Widgets中Table Widget的使用方法!了解在QT程序中插入表格得操作! Table Widget树控件的使用 1.创建数据及其初始化Table控件 // 创建一英雄列表,一 ...

  4. SMU Spring 2023 Contest Round 7

    A. Programming Contest 签到题. 输入输出读完应该就懂了: 从y1枚举到y2,若枚举的年份不在停办年份里则答案加一 void solve() { int n,m; cin > ...

  5. 2024-08-17:用go语言,给定一个从0开始的整数数组nums和一个整数k, 每次操作可以删除数组中的最小元素。 你的目标是通过这些操作,使得数组中的所有元素都大于或等于k。 请计算出实现这个目

    2024-08-17:用go语言,给定一个从0开始的整数数组nums和一个整数k, 每次操作可以删除数组中的最小元素. 你的目标是通过这些操作,使得数组中的所有元素都大于或等于k. 请计算出实现这个目 ...

  6. 关于Protobuf在使用中的一些注意点

    Protobuf是谷歌旗下的一款二进制序列化协议 协议的编写 在项目中新建一个xxx.proto文件 文件的格式 第一行写protobuf的版本 syntax = "proto3" ...

  7. 安装nvm,并通过nvm安装nodejs

    转载请注明出处: 1.安装nvm 打开终端,然后运行以下命令来下载并安装nvm: curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39 ...

  8. redux开发中的一个小坑

    redux的actiontypes,不可以重名,重名将会报错 When called with an action of type "inserttoken", the slice ...

  9. Linux 磁盘分区和格式化

    分区 常用命令行工具: fdisk:适用于 MBR 分区表 gdisk:适用于 GPT 分区表 parted:适用于 MBR 和 GPT 分区表,功能更强大.它还有一个 GUI 版本,名为 gpart ...

  10. Chrome 浏览器远程调试 【转】

    Chrome 浏览器按F12,可以调试JS,分析HTTP包等.但是有时候需要远程调试. 比如,某个EXE它内部嵌套了浏览器的话,可以想办法打开它的远程调试功能,然后在外部连到这个地址,就能分析它的ht ...