概述

快速沃尔什变换,可以用来处理有关异或卷积的问题。

而异或运算,也就是二进制下的不进位加法运算,我们考虑能否将其拓展到高维。

也就是,在 \(k\) 进制下的不进位加法卷积。

对于具体的某一位,我们的卷积方式就是:\(a_i\times b_j\to c_{(i+j)\bmod k}\)。

我们考虑有什么东西是能够在乘法的意义下做到对 \(k\) 取模的——单位根。

记 \(k\) 阶单位根为 \(\omega_k=e^{\dfrac{2i\pi}{k}}\) ,则 \(\omega_k^k=1\) 。

也就意味着 \(\omega_k^i\times\omega_k^j=\omega_k^{(i+j)\bmod k}\) ,如果使用单位根占位,我们就成功将 \(a_i\times b_j\) 的贡献给到了 \(c_{(i+j)\bmod k}\) 。

其实这个就是循环卷积的形式,我们一葫芦画瓢给出FFT中的范德蒙德矩阵:

\(\begin{bmatrix}1&1&1&\dots&1\\1&\omega_k^{1\times 1}&\omega_k^{1\times 2}&\dots&\omega_k^{1\times (k-1)}\\1&\omega_k^{2\times 1}&\omega_k^{2\times 2}&\dots&\omega_k^{2\times (k-1)}\\\vdots&\vdots&\vdots&\ddots&\vdots\\1&\omega_k^{(k-1)\times 1}&\omega_k^{(k-1)\times 2}&\dots&\omega_k^{(k-1)\times (k-1)}\end{bmatrix}\)

它的逆矩阵即为:

\(\frac{1}{k}\begin{bmatrix}1&1&1&\dots&1\\1&\omega_k^{-1\times 1}&\omega_k^{-1\times 2}&\dots&\omega_k^{-1\times (k-1)}\\1&\omega_k^{-2\times 1}&\omega_k^{-2\times 2}&\dots&\omega_k^{-2\times (k-1)}\\\vdots&\vdots&\vdots&\ddots&\vdots\\1&\omega_k^{-(k-1)\times 1}&\omega_k^{-(k-1)\times 2}&\dots&\omega_k^{-(k-1)\times (k-1)}\end{bmatrix}\)

这个就是我们每一层变换的矩阵,暴力变换的复杂度为 \(k^2n\log n\),如果换成FFT可以做到 \(kn\log n\log k\),但由于常数,并不建议使用。

但是有的时候,并不一定存在模意义下的单位根,所以我们就像FFT维护复数一样,考虑维护一个形如 \(\sum\limits_{i=0}^{k-1}a_i\omega_k^i\) 的式子,并对其进行加减乘运算,这样便可以解决单位根不存在的问题。

例题

[清华集训2016] 石家庄的工人阶级队伍比较坚强

我们如果记剪刀为 \(0\),石头为 \(1\),布为 \(2\);平局为 \(0\),被赢为 \(1\),赢为 \(2\),你会发现,所有的胜负关系都是满足模 \(3\) 意义下的加法的,所以我们考虑进行 \(3\) 进制下FWT。

我们记 \(f_{i,S}\) 表示 \(i\) 轮之后,策略为 \(S\) 的人的得分, \(g_S\) 表示在胜负状态为 \(S\) 的情况下的评分。则 \(f_{i,j}=\sum\limits_{a\oplus b=j}f_{i-1,a}g_b\),其中 \(\oplus\) 代表 \(3\) 进制下的不进位加法。

记 \(F=FWT(f_0),G=FWT(g)\),则最终 \(FWT(f_n)=FG^n\) 。

我们考虑维护 \(a+b\omega_3\) 的二元组,同时 \(\omega_3^2=-\omega_3-1\) ,即可使用模意义下的加减乘运算了,最后答案中必然满足 \(b=0\) ,输出 \(a\) 即可。

CF1103E Radix sum

题意:给定长为 \(n\) 序列 \(a\) ,问从中可重复选择 \(n\) 次选择出来的数做十进制下不进位加法求和的值为 \(p,p=0,1\dots n-1\) 的方案数为多少,答案对 \(2^{58}\) 取模, \(n\leqslant 100000\)。

记 \(f_{i,S}\) 表示选了 \(i\) 个数,十进制下不进位加法的结果为 \(S\) 的方案数,\(g_S\) 表示序列 \(a\) 中有多少个 \(S\) ,则 \(f_{i,j}=\sum\limits_{a\oplus b=j}f_{i-1,a}g_b\) ,其中 \(\oplus\) 为十进制下不进位加法,使用与上一题类似的快速幂求解即可。

使用十进制下FWT,直接暴力对每个数维护一个十元组 \((a_0,a_1\dots a_9)\) 表示 \(\sum\limits_{i=0}^9a_i\omega_{10}^i\) ,使用自然溢出对于 \(2^{64}\) 取模。

因为最后我们要乘上 \(\dfrac{1}{100000}\) ,又 \((2^{58}\times 32)|2^{64}\) ,存在 \(3125\) 在模 \(2^{58}\) 的意义下的逆元,处理后可求出最终答案。

浅谈高维FWT的更多相关文章

  1. 浅谈算法——FWT(快速沃尔什变换)

    其实FWT我啥都不会,反正就是记一波结论,记住就好-- 具体证明的话,推荐博客:FWT快速沃尔什变换学习笔记 现有一些卷积,形如 \(C_k=\sum\limits_{i\lor j=k}A_i*B_ ...

  2. 转:浅谈Spectral Clustering 谱聚类

    浅谈Spectral Clustering Spectral Clustering,中文通常称为“谱聚类”.由于使用的矩阵的细微差别,谱聚类实际上可以说是一“类”算法. Spectral Cluste ...

  3. MCMC 浅谈

    # MCMC 浅谈 1. 采样(sampling)是什么 MCMC在采样算法中有着举足轻重的地位,那么什么是采样?采样就是根据某种分布生成样本.举个例子,线性同余发生器就是根据均匀分布生成样本,这就很 ...

  4. 浅谈 Fragment 生命周期

    版权声明:本文为博主原创文章,未经博主允许不得转载. 微博:厉圣杰 源码:AndroidDemo/Fragment 文中如有纰漏,欢迎大家留言指出. Fragment 是在 Android 3.0 中 ...

  5. 浅谈 LayoutInflater

    浅谈 LayoutInflater 版权声明:本文为博主原创文章,未经博主允许不得转载. 微博:厉圣杰 源码:AndroidDemo/View 文中如有纰漏,欢迎大家留言指出. 在 Android 的 ...

  6. 浅谈Java的throw与throws

    转载:http://blog.csdn.net/luoweifu/article/details/10721543 我进行了一些加工,不是本人原创但比原博主要更完善~ 浅谈Java异常 以前虽然知道一 ...

  7. 浅谈SQL注入风险 - 一个Login拿下Server

    前两天,带着学生们学习了简单的ASP.NET MVC,通过ADO.NET方式连接数据库,实现增删改查. 可能有一部分学生提前预习过,在我写登录SQL的时候,他们鄙视我说:“老师你这SQL有注入,随便都 ...

  8. 浅谈WebService的版本兼容性设计

    在现在大型的项目或者软件开发中,一般都会有很多种终端, PC端比如Winform.WebForm,移动端,比如各种Native客户端(iOS, Android, WP),Html5等,我们要满足以上所 ...

  9. 浅谈angular2+ionic2

    浅谈angular2+ionic2   前言: 不要用angular的语法去写angular2,有人说二者就像Java和JavaScript的区别.   1. 项目所用:angular2+ionic2 ...

  10. iOS开发之浅谈MVVM的架构设计与团队协作

    今天写这篇博客是想达到抛砖引玉的作用,想与大家交流一下思想,相互学习,博文中有不足之处还望大家批评指正.本篇博客的内容沿袭以往博客的风格,也是以干货为主,偶尔扯扯咸蛋(哈哈~不好好工作又开始发表博客啦 ...

随机推荐

  1. Go-数组-实现队列

    package main import ( "errors" "fmt" ) // 队列 // 特征: // 1. 按照元素的添加顺序排序,并且容量固定 // ...

  2. Nginx reload重新加载配置文件的异常情况

    Nginx reload重新加载配置文件的异常情况 背景 临近年底, 很多业务工作量都上来了. 今天同事告知, nginx的log 里面出现了大量的 too many openfiles 的提示信息. ...

  3. [转帖]解决Java/MySQL性能问题的思路

    https://plantegg.github.io/2023/08/28/%E8%A7%A3%E5%86%B3%E9%97%AE%E9%A2%98%E6%80%9D%E8%B7%AF/ 10年前写的 ...

  4. Redis监控方法之二

    Redis监控方法之二 背景 前期整理过使用 exporter + prometheus 方式进行Redis监控的搭建过程 最近给同事研究clickhouse时发现 clickhouse 有对应的pl ...

  5. [转帖]clickhouse使用clickhouse-keeper代替zookeeper

    目录 异常现象: 1. clickhouse的异常日志 2. 追踪对应节点的zookeeper日志 使用clickhouse-keeper代替 zookeeper的步骤: 1: 准备 clickhou ...

  6. [转帖]JMeter InfluxDB v2.0 listener plugin

    https://github.com/mderevyankoaqa/jmeter-influxdb2-listener-plugin Support my Ukrainian Family ️ Lik ...

  7. [转帖]JSR223控件简介

    JSR223控件简介 1.调用内置函数 2.执行外部java文件 3.执行jar包 JSR223取样器允许执行JSR223脚本代码用于创建/更新所需的某些变量. 由于JSR223脚本编译方式基本相同, ...

  8. 【转帖】ChatGPT重塑Windows!微软王炸更新:操作系统全面接入,Bing也能用插件了

    https://cloud.tencent.com/developer/article/2291078?areaSource=&traceId= 金磊 丰色 西风 发自 凹非寺 量子位 | 公 ...

  9. 一键升级Openssh的方法

    快速升级OpenSSH8.6的办法 首先: 最终的方法 创建一个文件夹,并且设置好一个启动脚本. 内容主要如下: ├── rpm │   ├── openssh-8.6p1-1.el8.x86_64. ...

  10. 【译文】IEEE白皮书 6G 太赫兹技术的基本原理 2023版

    第一章 简介 太赫兹波是介于微波和光波之间的光谱区域,频率从 0.1THz ~ 10THz 之间,波长在 3mm ~ 30μm 之间.提供大块连续的频带范围以满足对 Tbit/s 内极高数据传输速率的 ...