You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

类卷积表达式高效计算:如何以O(m·2^m)复杂度求解ν(z₁,…,zₘ)?

问题与解法

问题背景

已知$x_i, z_i \in {0,1}$($i=1\ldots m$),需高效计算所有$z_1\ldots z_m$对应的表达式:
$$\nu(z₁,…,zₘ)=\sum_{x₁,…xₘ} \prod_{i=1}^m p(z_i|x_i)μ(x₁,…,xₘ)$$
其中$p(z|x)$是与$i$无关的概率分布:
$$p(z|x)=\begin{cases}1-q, & (z,x)=(0,0) \ q, & (z,x)=(1,0) \ 1/2, & (z,x)=(0,1) \ 1/2, & (z,x)=(1,1)\end{cases}$$
希望找到复杂度为$O(m·2^m)$的算法(类似FFT卷积的效率,此前尝试FFT卷积类方法未成功)。

高效解法:基于快速沃尔什-哈达玛变换(FWHT)

可以利用FWHT实现$O(m·2^m)$复杂度的计算,核心思路是将问题转化为沃尔什基下的对角变换,具体步骤如下:

  • 步骤1:对$\mu$做FWHT
    将$\mu$视为长度为$2^m$的数组(索引对应$x_1\ldots x_m$的二进制表示),执行FWHT得到$\hat{\mu}$,复杂度$O(m·2^m)$。FWHT的核心是通过分治实现快速变换,与FFT的分治逻辑类似。
  • 步骤2:逐系数加权
    对每个FWHT后的索引$s$(二进制表示为$s_1\ldots s_m$),计算:
    $$\hat{\nu}(s) = \hat{\mu}(s) · \left( \frac{1-2q}{2} \right)^{|s|}$$
    其中$|s|$是$s$中1的个数(即每个$s_i=1$时乘一次$\lambda_1$,$s_i=0$时乘$\lambda_0=1$)。这一步是逐元素操作,复杂度$O(2^m)$。
  • 步骤3:逆FWHT得到结果
    对$\hat{\nu}$执行逆FWHT,得到最终的$\nu(z_1\ldots z_m)$数组,复杂度$O(m·2^m)$。

复杂度验证

整个流程的总复杂度为$O(m·2^m)$,与FFT卷积的复杂度完全一致,满足需求。

内容的提问来源于stack exchange,提问作者tiX5eeMo

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.15 15:49:57