首页 > 其他分享 >位运算卷积

位运算卷积

时间:2024-02-25 20:13:05浏览次数:32  
标签:xor 运算 卷积 fmt ifwt fwt oplus sum

位运算卷积

快速求序列 \(C\):

\[C_i=\sum_{j\oplus k=i}A_jB_k \]

其中 \(\oplus=or,and,xor\)。

类似 FFT 的思路,对于序列 \(a\) 构造新序列 \(fmt(a)\),使得满足 \(fmt(a*b)_i=fmt(a)_i\times fmt(b)_i\)

在位运算情况下,\(fmt(a)_i\) 均可以表达成关于序列 \(a\) 的可逆线性变换,即:

\[fmt(a)_i=\sum_j g(i, j)a_j \]

将这个表达式带入上面 \(fmt\) 的性质:

\[\begin{aligned} fmt(a*b)_i &= fmt(a)_i\times fmt(b)_i \\ \sum_x g(i, x)(a*b)_x &= \sum_yg(i,y)a_y\sum_zg(i,z)b_z \\ \sum_j\sum_kg(i, j\oplus k)a_jb_k &= \sum_y\sum_zg(i, x)g(i, y)a_yb_z \end{aligned} \]

考虑直接令 \(j=y,k=z\) 的每一对 \((j,k,y,z)\) 都存在 \(g(i,j\oplus k)=g(i,x)g(i,y)\) 即可满足性质。

分别将 \(\oplus\) 带入 \(or,and,xor\) 找到合适的函数 \(g\)。

or

\(g(i, x)=[x\subset i]\)。

即对 \(i\) 求 子集和

\(fwt\quad ifwt\):SOSDP。

and

\(g(i, x)=[x\supset i]\)。

即对 \(i\) 求 超集和

\(fwt\quad ifwt\):SOSDP。

xor

\(g(i,x)= (-1)^{|x\cap i|}\)

\(fwt\) 操作:\(A={A_0+A_1},A_0-A_1\)

\(ifwt\) 操作:\(A=\frac{1}{2}(A_0+A_1),\frac{1}{2}(A_0-A_1)\)


可以手动验证上述函数的正确性。

标签:xor,运算,卷积,fmt,ifwt,fwt,oplus,sum
From: https://www.cnblogs.com/edisnimorF/p/18032864

相关文章

  • 位运算合集
    目录题目位运算分为两类:1.逻辑位运算符(1)位与(&)(2)位或(|)(3)异或(^)(4)按位取反(~)2.位移运算符(1)左移(<<)(2)右移(>>)231.2的幂题解342.4的幂题解191.位1的个数题解面试题16.01.交换数字(中)题解136.只出现一次的数字题解461.汉明距离题解693.交替位二进......
  • Java基础07:基本运算符
    运算符1.Java语言支持如下运算符:1.1算术运算符:+,-,*,/,%,++,--1.2赋值运算符:=1.3关系运算符:>,<,>=,==,!=instanceof1.4逻辑运算符:&,|,^,~,>>,<<,>>>(了解)1.5条件运算符?:1.6扩展赋值运算:+=,-=,*=,/= ......
  • 《程序是怎样跑起来的》第三章“计算机进行小数运算时出错的原因”
    当我们使用计算机进行小数运算时,可能会遇到一些意想不到的错误。这些错误并非计算机的缺陷,而是由于其内在的特性所导致的。深入了解这些原因,有助于我们更好地理解计算机运算的局限性和应对策略,从而在编程和数据处理时更加得心应手。计算机在进行小数运算时出错的原因包括二进......
  • 第三章 计算机进行小数运算
    用二进制数来表示整数和整数的方法有很大不同,例如:0次幂前面的位的位权按照1次幂、2次幂……的方式递增,0次幂以后的位的位权按照-1次幂、-2次幂……的方式递减(这一规律在十进制数和16进制数中也同样适用)。在了解了将二进制数表示的小数转化成10进制数的方法后,计算机运算出错的原因......
  • 深度学习-卷积神经网络-dropout-图像增强-优化器-45
    目录1.dropout2.数据增强3.优化器1.dropout使用L1和L2正则去限制神经网络连接的weights权重在深度学习中,最流行的正则化技术,它被证明非常成功,即使在顶尖水准的神经网络中也可以带来1%到2%的准确度提升,这可能乍听起来不是特别多,但是如果模型已经有了95%的准确率,获......
  • 计算机进行小数运算时出错的原因
    通过此章的学习我了解的计算机出错的几个重大原因,以及什么是浮点数,让我对计算机有了更加深刻的认知和理解,我也了解到如何在实际程序中确认和如何避免计算机出错计算机运算出错的原因计算机之所以会出现运算错误,是因为“有一些十进制数的小数无法转换成二进制数”。代码清单3-1......
  • C# 的运算符和作用域
    //C#运算符//表达式表达式有操作数(operand)和运算符(operator)构成;//常见的运算符+-*/和new//x??y如果x为null,则计算机过为y否则计算结果为x;//匿名函数(lamba表达式)//前置的++直接执行后......
  • 数据库基础4 关系代数运算
    基本操作前提条件:并相容性是并、差、交等关系代数操作的前提参与运算的两个关系及其相关属性之间必须又一定的对应性、可比性或关联性两个关系的属性数量必须相同对于任意i,关系R的第i个属性必须与另一个关系的第i个属性的域相同(数据类型、取值范围)一、传统集合运算并......
  • ES6扩展运算符(...)
    在ES6中,扩展运算符(...)是一种用来展开数组和对象的语法。它可以将一个数组或对象展开,以便在函数调用、数组字面量或对象字面量中使用。1//1.在数组中的应用:2letarr=[1,2,245,6]3letarr1=[...arr,3,5,7]4console.log(arr1)//[1,2,245,6,3,5,7]56......
  • C++的箭头运算符
    以前学类的时候,一个指针指向类的实例,当我们想通过指针访问某些类的成员的时候,书上直接告诉你,使用->来访问这些成员,不能用.运算符。我以前也是默默接受了这个观点,平时也没细想,今天才知道是怎么回事。string*p=string("hello");*p.empty();//错误。会先执行p.empty(),之后再......