Tellegens Principle

2020 年 05 月 18 日发布.

问题

给出一个 $m\times n$ 的矩阵 $A$,以及一个用于计算 $u\mapsto Au$ 的(线性的)算法,求一个几乎同样次数乘、同样次加减法的用于计算 $v\mapsto A^Tv$ 的算法。

本篇 Blog 是个人口嗨。

形式描述

我们有一个函数式的计算模型:

一个具有 $n$ 个输入位和 $m$ 个输出位的线性算法定义如下:

一个自然数 $l$, $l$ 条以 $i=n+1,\dots,n+l$ 编号的指令:

以及一个输出位的映射:$f:\{1,2,\dots,m\}\to\{1,2,\dots,n+l\}$。

一个算法计算一个矩阵 $P_{m\times n}$ 当且仅当:

对于任意列向量 $u=(u_1,u_2,\dots,u_n)^T$,如果定义:

则 $\forall i, r_{f(i)}=(Pu)_i$。

我们需要做的是:给定一个计算 $A$ 的算法,求一个计算 $A^T$ 的算法,要求两者中的乘法次数相同,加法次数相差 $m-n$。我们假定对于 $A,A^T$ 都不存在恒为 $0$ 的输出。

我们也假设算法里没有“无用变量”,即不出现在后面的计算也不作为输出位的变量。

构造

为了方便表示,我们把变量记做不同的英文字母。我们以 $I_x$(仅出现在前 $n$ 个位置,占位用)表示 $x$ 这个变量是输入的;以 $O_x$(仅出现在最后,表示输出位映射)。如下是两对例子:

$I_a;I_b;c=2a;d=3b;e=c+d;O_e$ 计算了 $\begin{pmatrix}2&3\end{pmatrix}$。对应地,$I_d;a=2d;b=3d;O_a;O_b$ 计算了 $\begin{pmatrix}2\\3\end{pmatrix}$

$I_a;I_b;I_c;d=a+b;e=c+d;O_e;O_e$ 计算了 $\begin{pmatrix}1&1&1\\1&1&1\end{pmatrix}$。对应地,$I_a;I_b;c=a+b;O_c;O_c;O_c$ 计算了 $\begin{pmatrix}1&1\\1&1\\1&1\end{pmatrix}$。

那么我们定义一个算法的转置如下:

证明

首先我们证明这样定义的转置和原来的乘法、加法次数满足要求:如果原算法中一个变量在 $a$ 个指令里被作为加数($y=x+x$ 的情况算两遍),$b$ 个指令里被作为乘数,$c$ 个位置作为输出,那么在转置中,就会出现 $b$ 次乘法、以及 $a+b+c-1$ 次加法。所以若原算法中共有 $a$ 次加法指令和 $b$ 次乘法指令,那么新算法就会有 $2a+b+m-(a+b+n)=a+(m-n)$ 次加法,$b$ 次乘法。

接下来还要证明新算法正确地计算了 $A^T$。对于原算法一个变量 $x$,及一个输出位 $i$,定义 $f_{x,i}$ 为 “$x$ 对 $i$ 的贡献”。严格的说,定义为:若强行将算法中所有在 $x$ 之前的所有变量置为 $0$(若 $x$ 本身为输入变量,则改为把除 $x$ 外的所有输入变量置为 $0$),而 $x$ 置为 $1$,$x$ 后面的变量照常计算,此时算法的第 $i$ 个输出位的值。

显然若 $t$ 为第 $j$ 个输入变量,则 $f_{t,i}=P_{j,i}$。

对于一个变量 $x$,定义 $g_{x,i}$ 表示当转置算法的第 $i$ 位输入为 $1$ 而其它为 $0$ 的时候 $x'$ 的值(如果 $x$ 是那个“特殊情况”,那么改为代替 $x'$ 的变量)。因此不难发现若 $t$ 是原算法第 $j$ 个输入变量,那么 $g_{t',i}$ 就表示新算法计算的矩阵中 $i,j$ 位置的值。因此只需证明 $f_{t,i}=g_{t',i}$ 即可。

而 $f_{t,i}=g_{t',i}$ 其实是显然的:固定 $i$,对于 $t$ 在原算法中的出现位置从后往前进行归纳,容易证明此结论。

因此,定理成立。