FWT
时间:2021-08-11
本文章向大家介绍FWT,主要包括FWT使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
FWT
本文全部大部分参考自yyb的博客
概述
FWT(快速沃尔什变换)用于解决类似B
\[A_n = \sum_{n = i\otimes j} B_i \cdot C_j
\]
其中\(\otimes\)表示二元位运算的问题。
类似FFT,我们先将数组经过FWT变换然后对应位置一一相乘,再IFWT即可。
约定
\(C = A \times B \Leftrightarrow C_n = A_n \cdot B_n\)
\(C = A+B \Leftrightarrow C_n = A_n+B_n\)
\(C = A \otimes B \Leftrightarrow C_n = \sum_{i \otimes j = n} A_i \cdot B_j\)
\(A_x\)表示数组\(A\)中下标最高位为\(x\)的位置组成的新数组。
\((A, B)\)表示将A与B拼接组成新数组。
\(F(A)\)表示对A数组进行FWT变换。
\(IF(A)\)表示对A数组进行IFWT变换。
内容
\[F_{|}(A) = (F_|(A_0), F_|(A_0)+F_|(A_1)) \\
F_\&(A) = (F_\&(A_0)+F_\&(A_1), F_\&(A_1)) \\
F_\oplus(A) = (F_\oplus(A_0)+F_\oplus(A_1), F_\oplus(A_0)-F_\oplus(A_1))
\]
这里直接介绍\(\otimes = \oplus\)的情况。
性质1:
\[F(A+B) = F(A)+F(B)
\]
证明(数学归纳法):
\[\begin{aligned}
F(A+B)
& = (F(A+B)_0+F(A+B)_1, F(A+B)_0-F(A+B)_1) \\
& = (F(A_0)+F(B_0)+F(A_1)+F(B_1), F(A_0)+F(B_0)-F(A_1)-F(B_1)) \\
& = (F(A_0+A_1)+F(B_0+B_1), F(A_0-A_1)+F(B_0-B_1)) \\
& = ((F(A))_0 + (F(B))_0, (F(A))_1+(F(B))_1)
& = F(A)+F(B)
\end{aligned}
\]
性质2:
\[F(A\oplus B) = F(A) \times F(B)
\]
证明(数学归纳法):
\[\begin{aligned}
F(A\oplus B)
& = (F(A\oplus B)_0+F(A \oplus B)_1, F(A \oplus B)_0 - F(A \oplus B)_1) \\
& = (F(A_0 \oplus B_0 + A_1 \oplus B_1 + A_0 \oplus B_1 + A_1 \oplus B_0), \\
& \qquad F(A_0 \oplus B_0 + A_1 \oplus B_0 - A_0 \oplus B_1 - A_1 \oplus B_0)) \\
& = (F(A_0)\times F(B_0) + F(A_1) \times F(B_1) + F(A_0)\times F(B_1) + F(A_1) \times F(B_0), \\
& \qquad F(A_0)\times F(B_0) + F(A_1) \ times F(B_1) - F(A_0) \times F(B_1) - F(A_1) \times F(B_0)) \\
& = (F(A_0+A_1) \times F(B_0+B_1), F(A_0-A_1) \times F(B_0-B_1)) \\
& = ((F(A))_0 \times (F(B))_0, (F(A))_1 \times (F(B))_1) \\
& = F(A) \times F(B)
\end{aligned}
\]
其余同理。
那么我们就可以愉快地计算了。
最后的问题是怎么得到原数组:逆过来就可以了。
\[IF_|(A) = (IF(A_0), IF(A_1)-IF(A_0)) \\
IF_\&(A) = (IF(A_0)-IF(A_1), IF(A_1)) \\
IF_\oplus(A) = (\frac{(IF(A_0)+IF(A_1)}{2}, \frac{IF(A_0)-IF(A_1)}{2})
\]
原文地址:https://www.cnblogs.com/BunnyLutts/p/15128895.html
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法