给定三个 矩阵 ,计算 很贵——朴素算法要 次标量运算,即使用上目前最快的矩阵乘法算法也远超 ——但如果有人声称 ,我们只是想验证这个等式是否成立,事情可能便宜得多。经典的 Freivalds 算法用随机指纹在 时间内完成验证(只读一遍输入,这已是经典极限);量子算法则通过在两个 Johnson 图的乘积上做量子行走,把最坏情况下的真实运行时间降到 。
本词条分两条主线展开。第一条是组合搜索主线:把”验证”改写成”在行子集与列子集对 中搜索一个能暴露错误的子矩阵”,再用 Szegedy 的马尔可夫链量子行走框架求解,得到步数 。第二条是数据结构主线:量子行走框架只告诉你”走多少步”,却不保证”每步有多便宜”。如果每一步都显式计算一个 子矩阵乘积,时间复杂度会立刻退回 ,量子优势荡然无存。本词条尤其强调这个常被忽略的区别——查询复杂度下降不自动保证真实运行时间下降——而 Buhrman–Špalek 算法真正的技术贡献,正是设计了一套可用双侧随机指纹增量更新的压缩数据结构,把每步成本压到 。两条主线汇合后,用一个参数平衡得到 。
读者需要的前置知识:Grover 搜索与振幅放大的基本框架(见Grover 算法),以及量子行走与马尔可夫链谱隙的基本概念(见量子行走)。不需要事先了解 Szegedy 框架的细节,本词条第 3 节会给出所需的结论并解释其含义。
问题背景:验证为什么值得单独研究
矩阵乘法是整个线性代数计算的瓶颈操作。两个 矩阵相乘,按定义
每个条目需要 次乘法与 次加法,共 个条目,朴素算法总计 次标量运算。存在更快的算法(Strassen 及其后继者把指数压到 以下),但即便是最快的已知算法,代价也仍然显著高于”把输入读一遍”的 。
在许多应用场景里,我们并不需要亲自算出 。典型的情形是:某个不受信任的计算方(云服务器、协处理器、另一台机器)声称已经算出了 ,把 交给我们;我们想用一个比重新乘法便宜得多的程序来检查这份答案。这就是矩阵乘积验证 (matrix product verification) 问题:
给定 矩阵 ,判断 是否成立。要求算法允许以小概率出错,但必须比完整地计算 更快。
这个问题的历史值得一说。经典侧,Freivalds 在 20 世纪 70 年代末提出的随机指纹算法已经达到 ,与”读完输入”的下界匹配,经典故事到此基本结束。量子侧,Ambainis 等人在 2002 年的未发表手稿(文末 Zoo 编号 6)中最早研究了矩阵验证的量子算法,在查询复杂度的意义下给出了优于经典的结果;但查询复杂度只计算”读了多少个矩阵元素”,不计算读写之间的算术与数据搬运,因此查询上的加速并不自动转化为真实运行时间的加速。Buhrman 与 Špalek(文末 Zoo 编号 19)把 Szegedy 的马尔可夫链量子行走框架(文末 Zoo 编号 85)与一套精心设计的增量数据结构结合起来,给出了真实运行时间 的验证算法,这是本词条要讲解的内容。
在正式进入推导之前,先用一句话概括整个算法的核心思想,后面的每一节都是在为这句话填细节:
不要直接验证 ,而是在随机的行子集 与列子集 上检查子矩阵等式 ;用 Szegedy 量子行走在所有 中搜索一对”能看出错误”的子集;为了让行走的每一步足够便宜,不存储子矩阵本身,只存储它被两个随机向量 压缩后的指纹,并在行走时增量维护这些指纹。
1. 经典基线:Freivalds 指纹
1.1 算法与正确性分析
令
验证 等价于验证 。直接计算 就是直接计算 ,太贵;Freivalds 的想法是改为检验 在一个随机方向上的投影:如果 ,那么一个随机向量 大概率不在 的核里,从而 会暴露这一点。
Freivalds 算法:
- 从一个固定的有限集合(例如 )中独立均匀地随机选择 个分量,组成列向量 ;
- 依次计算
- 若 ,回答"";若 ,回答""(更准确地说是”未发现矛盾”)。
注意第 2 步的计算顺序至关重要:必须先算 再左乘 ,即算的是 而不是 。 是” 矩阵乘向量”,需 次标量乘法与约 次加法,即 ; 与 同理。三次矩阵–向量乘法加一次向量比较,总成本 。若误算成 ,先算 就要 ,整个验证就失去了意义。
算法的输出与 的关系由
给出(第二步只是矩阵乘法对加法的分配律)。因此”算法发现矛盾”当且仅当""。下面这条引理给出错误概率界,它是整个 Freivalds 方法的核心。
Lemma 1(Freivalds 指纹界). 设 是非零的 矩阵, 的分量独立均匀地取自 ,则
证明。 意味着 有某一行是非零行向量,记为 (取其第 行,)。只要证明 即可,因为 蕴含 的第 个分量非零,从而 。
设 。把所有 个可能的 两两配对: 与 一对,当且仅当它们仅在第 个分量上不同(即 ,其余分量完全相同)。这 个向量恰好被划分成 对。对每一对,
(若 则取 号,若 则取 号;两种情形相差的值都是 。)假如这一对中两个内积都为零,则两式相减得 ,与 矛盾。因此每一对中至少有一个向量满足 ,非零内积的比例至少是一半,即 。Q.E.D.
这个配对论证是本词条反复出现的技术原型:后面第 4 节分析双侧指纹时,用的还是同一个论证,只是连用两次。
单边错误 (one-sided error)。由引理立即读出 Freivalds 算法的错误结构:
- 若 (即 ),则对任何 都有 ,算法永远回答”相等”,永不误报;
- 若 ,算法单次运行以至少 的概率发现矛盾,但可能恰好选中一个落在 里的 而漏报。
也就是说,“正确乘积永不被拒绝,错误乘积可能因随机指纹碰撞而暂时通过”。要把漏报概率压低,只需独立重复:重复 次(每次重新随机选 ),全都未发现问题才接受,则错误接受的概率至多为 。取常数次的 (比如 使错误率降到 以下)即可把错误率压到任何常数以下,总时间仍是 。
1.2 一个 小例子
把上面的分析用具体数字走一遍。取
真实的乘积是
假设对方交来的答案是
即只有 位置的条目是错的( 应为 )。此时
现在模拟 Freivalds 算法。 有四种等可能的取值,我们逐个算 :
- :——漏报,算法回答”相等”;
- :——发现矛盾;
- :——发现矛盾;
- :——漏报(这个零向量对任何 都漏报)。
四种取值中有两种发现矛盾,检出概率恰为 ,与 Lemma 1 的界吻合(引理只说”至少一半”,本例恰好取到等号)。注意检出失败的两种情形里, 是平凡的,真正”倒霉”的情形只有 。
再把算法的三步完整算一遍(以 为例):
(第二个分量 ),算法正确地拒绝。请读者对照验证: 恰好是 ,所以 ,一切自洽。
1.3 经典极限与量子机会
Freivalds 算法的 在经典世界是最优的:任何(哪怕允许随机性的)验证算法都必须读完输入的相当部分——若有一个条目完全没被读到,对手就可以在那个条目上做手脚而不被发现,而矩阵共有 个条目。所以经典验证的复杂度故事已经讲完:。
量子算法的机会恰恰在于打破”必须读完每个条目”的经典直觉:振幅叠加允许我们”同时”探查所有位置,Grover 型的搜索可以把某些二次加速带进这个问题。但本词条反复强调的警示也在这里生效:查询次数的平方根加速只是潜力,要变成真实时间的加速,必须让量子行走的每一步都足够便宜。这正是第 4 节的任务。我们先在第 2、3 节搭好搜索的骨架。
2. 搜索对象:行子集与列子集
2.1 把验证改写成搜索
量子行走搜索需要一个有限的搜索空间和一个”标记”谓词。直接照搬 Freivalds(在 个 里 Grover 搜索一个满足 的 )行不通:单次检查 就要 时间,即使搜索本身只要常数步,总时间也没有改观。Buhrman–Špalek 的选择是把搜索空间取为子矩阵,而不是随机向量。
固定一个参数 (,最后会取 ),搜索空间是所有大小为 的子集对
其中 。约定如下记号:
- : 只保留 中的行得到的 矩阵;
- : 只保留 中的列得到的 矩阵;
- : 只保留 中的行与 中的列得到的 矩阵。
标记状态的定义。若子矩阵等式不成立,即
就称 为标记状态 (marked state)。这一定义之所以合理,依赖一个简单但关键的恒等式:
Lemma 2(限制的乘积等于乘积的限制). 对任意 ,
证明。比较两边 位置的条目(,记 的第 个元素为 、 的第 个元素为 )。左边按定义是 ;由矩阵乘法的定义,
右边, 的第 行就是 的第 行, 的第 列就是 的第 列,所以右边的 条目也是 。两边逐项相等。Q.E.D.
Lemma 2 说明: 位置的错误(即 )只与 的第 行和 的第 列有关,与矩阵的其余部分无关。因此,只要 且 ,子矩阵 与 在对应位置上就必然不同, 必为标记状态。反过来,若 ,由 Lemma 2 所有子矩阵等式都成立,没有任何标记状态。于是:
⟺ 不存在标记状态; ⟺ 存在标记状态(只要 )。
验证问题就此被精确地改写成了搜索问题:判断 的集合中是否存在标记状态。
2.2 标记比例
量子行走搜索的效率由两个量控制:标记状态占总状态的比例 ,以及行走图的谱隙 。本节算前者。
Lemma 3(单错误情形的标记比例). 设 在 位置有一个非零条目(即 )。若 各自独立均匀地从所有 元子集中选取,则 为标记状态的概率至少为
证明。由上节讨论,只要 且 , 就是标记状态。计算 的概率: 元子集共 个,其中包含指定元素 的子集共 个(先固定 ,再从剩下 个元素中选 个),因此
同理 。 与 独立选取,故
不等号是因为其他错误条目(如果还有)只会增加标记概率。Q.E.D.
最坏情形是 只有一个错误条目,此时 就是实际的标记比例,后面第 5 节的复杂度平衡就按这个最坏情形做。错误条目更多时 上升,算法只会更快(第 5 节末尾会回到这一点)。
3. Johnson 图与 Szegedy 量子行走
3.1 Johnson 图
搜索空间 是一个指数大的离散集合,要在其上做量子行走,先要给出一个图结构,让”走一步”对应一个可以廉价实现的局部操作。
Johnson 图 (Johnson graph) 的顶点集是 的全部 元子集(共 个顶点);两个顶点 相邻,当且仅当它们恰好相差一个元素,即
对某对 、 成立。换句话说,一步行走 = 从当前子集中删去一个元素、加入一个新元素(“交换一个元素”)。从任一顶点出发,有 种选择删哪个、 种选择加哪个,所以 是 正则图。
我们的行走发生在乘积图
上:顶点是子集对 ,一步行走同时在 中交换一个元素、在 中交换一个元素。这正对应验证问题的结构——错误位置 由行与列共同决定,行子集和列子集必须一起演化。
3.2 谱隙
马尔可夫链(随机行走)的谱隙 (spectral gap) 定义为其转移矩阵最大特征值(正则图上归一化后为 )与次大特征值之差。谱隙衡量随机行走”忘掉初始位置、收敛到平稳分布”的速度;在 Szegedy 框架中,它直接决定量子行走的步数。本小节推导 Johnson 图的谱隙。
是高度对称的图(它属于一类称为结合方案 (association scheme) 的结构),其邻接矩阵的全部特征值有已知的封闭表达式:对 ,特征值为
且严格递减()。这个公式本身的推导需要结合方案的表示论,超出本词条范围;我们把它作为已知事实引用,但从它出发计算谱隙只需一行算术。 给出
这正应该等于图的正则度(正则图邻接矩阵的最大特征值恒等于度数,对应的特征向量是全一向量),与上节的度数计算一致,是一个自洽性检查。 给出
(第一步展开 ,第二步合并同类项。)把邻接矩阵除以度数 得到归一化的随机行走转移矩阵,其谱隙为
当 时 ,于是
即 。
乘积链( 与 各走一步)的特征值是两个因子链特征值的乘积,其谱隙等于两者中较小的那个(这是一个关于乘积马尔可夫链的标准事实);两个因子相同,故乘积图 的谱隙仍是
直觉上这也合理:一次交换只改动 个元素中的一个,要把一个 元子集”洗匀”大约需要 步量级的交换,混合时间(以及谱隙的倒数)与 同阶。
3.3 Szegedy 搜索框架
现在引用 Szegedy 的通用定理(文末 Zoo 编号 85;另见的量子行走),它可以看作 Grover 搜索对一般马尔可夫链的推广:
Szegedy 量子行走搜索(结论性陈述). 设一个遍历对称马尔可夫链的谱隙为 ,顶点中被标记的比例为 。则存在一个量子行走算法,用 步行走,判定标记顶点是否存在(单边有界错误:无标记时总回答”无”,有标记时以至少 的概率回答”有”)。
与经典的随机行走命中时间 相比,这是一个二次加速——与 Grover 对朴素采样的加速完全同源。框架本身只负责”把谱隙与标记比例翻译成步数”,每一步的代价由使用者负责。把步数与每步代价写在一起,总时间复杂度形如
其中三项各有明确的职责,后文会逐项填充:
- :制备所有顶点的均匀叠加(对应随机行走的平稳分布),并把每个顶点附带的数据结构初始化好的一次性成本;
- :实现一步行走的成本——不仅要在相邻顶点间移动振幅,还要把附带的数据结构从旧顶点增量更新到新顶点;
- :实现”标记相位翻转”的成本——判断当前顶点是否被标记,若是则翻转其振幅的相位。
3.4 步数估计
把 (第 3.2 节)与最坏情形的 (Lemma 3)代入步数公式:
(第一步代入,第二步约去一个 ,第三步把根号拆开。)于是 Szegedy 搜索检测标记顶点所需步数的尺度为
到这里已经能看出参数平衡的雏形:步数 随 增大而减少(子集越大越容易罩住错误位置, 上升是主因),但可以预期每步成本随 增大而上升(要维护更大的子集)。最优的 在两者之间。若最终取 ,则步数 恰好与 同阶——这个”步数等于子集大小”的巧合正是平衡点的特征,第 5 节会严格解出它。但这一切都有一个前提:每步必须足够便宜。如果 本身是 ,那么总时间至少是 ,比经典算法还慢。下一节解决这个生死攸关的问题。
4. 压缩子矩阵检查
4.1 朴素检查为什么不行
按定义检查一个顶点 是否被标记,最直接的办法是显式计算 矩阵 与 矩阵 的乘积,再与 逐元比较。这一个 的矩阵乘积需要 次标量乘法:即使 取最优的 ,单次检查也要 量级——比整个经典 Freivalds 算法还贵。即使把检查压到”只算一个随机位置的条目”( 一次内积),也只能检测该位置的错误,无法覆盖子矩阵中任意位置的错误。
更根本的困难在于:标记检查在量子行走中是以**相位翻转预言机**的形式被调用的,调用次数等于行走步数 。任何 量级的单步成本都会让总时间重新达到 甚至更高,量子行走的二次加速被完全吃掉。结论:绝不能显式地计算或存储子矩阵乘积。
4.2 双侧随机指纹
出路是对 Freivalds 思想做一次”双侧”推广:不再检查子矩阵等式本身,而是检查它被两个随机向量压缩后的标量等式。在算法开始时(只选一次),随机选取一个行向量 和一个列向量 (分量独立均匀地取自有限集合,如 ),然后对每个顶点 维护如下三个量:
记号 表示把行向量 只保留 中的分量(长度 ), 同理。逐个看清这三个量的形状:
- :长度 的行向量 乘 矩阵 ,结果是长度 的行向量。展开写就是 ,即 中各行的加权和;
- : 矩阵 乘长度 的列向量 ,结果是长度 的列向量,即 ;
- 是一个标量。
于是每个顶点附带的数据总量只有 (两个长度 的向量加一个标量),与 的子矩阵相比是数量级的压缩。标记检查只需比较
左边是两个长度 向量的内积, 次运算;右边是一个标量的读取,。因此
这个等式为什么等价于(在随机意义下)原来的子矩阵检查?把定义展开:
(第一步只是代入定义,第二步用矩阵乘法的结合律。)与 的定义相减,检查等式等价于
记 ( 的”子矩阵错误”),检查就是问标量 是否为零。这正是 Freivalds 指纹,只是从”矩阵右乘一个随机向量”升级为”矩阵左右各乘一个随机向量”——双侧指纹 (two-sided fingerprint)。
4.3 指纹的可靠性
Lemma 4(双侧指纹界). 设 是非零的 矩阵, 的分量独立均匀地取自 ,则
证明。分两步,每步都是 Lemma 1 的配对论证。
第一步,先右乘 。 意味着 有某一列是非零列向量,记为 (长度 )。向量 在 所对应方向上的分量是 。由 Lemma 1 的配对论证(把 当作那里的 ),,因此
第二步,固定任意一个满足 的结果,再左乘 。 是非零列向量, 是 与 的内积;再用一次配对论证(这次在 上做,把 当作 ),
两步独立,合起来 。Q.E.D.
把 Lemma 4 翻译回算法的语言:
- 若子矩阵等式成立(),则对任何 都有 ,指纹检查恒通过——不会误报;
- 若子矩阵等式不成立(),随机 以至少 的常数概率使指纹非零,从而该顶点在指纹意义下”看起来是标记的”。
是个常数,它的具体数值不重要(取样集合的大小会影响它,见第 6 节),重要的是它与 无关:漏检的后果只是把有效的标记比例乘上一个常数因子,而常数因子不影响 复杂度。更稳妥的做法是把整个算法用独立重选的 重复常数次,把漏检概率指数压低。因此本词条余下部分都把”标记”理解为”被指纹揭示的标记”,标记比例仍记作 (最坏情形)。
4.4 初始化成本
算法开始时需要为均匀叠加中的顶点准备数据结构。量子行走的标准做法是先制备所有 的均匀叠加(这只需要对索引寄存器做 Hadamard 类的操作与拒绝采样,成本是关于 的低阶项),再为每个顶点计算 。从头计算一个顶点的数据:
- : 个长度 的向量相加(带标量系数),;
- :同理 ;
- :先算 (长度 向量乘 矩阵,),再与 做内积(),共 。
合计
其中第二个等号是因为 时 。
4.5 增量更新
这是整个算法最精巧的一步。行走一步把 变成 ,其中 ( 同理)。如果每个顶点都从头重算 ,就要 ,总复杂度立刻爆炸。关键观察是: 是求和形式 ,一次交换只改变求和式中的一项,因此
减去旧行的贡献、加上新行的贡献,各是 次标量运算,所以 的更新是 。同理
也是 。标量 的更新稍细:交换 中的一个元素 时,双重求和里所有含 的项(共 项)被含 的 项替换,即
每个内层求和是 ;交换 中的一个元素同理是 。把三者相加,
最后一步用了 。于是每步行走和每次相位标记都只需 ,而不是重新计算整个子矩阵。
还有一层量子实现上的细节值得点明:行走是相干地作用于所有顶点的叠加的,因此上述更新必须可逆地(用酉线路)完成。增量更新恰好适合这一点——“减去一项、加上一项”可以做成受控的可逆算术,而不需要为旧顶点保留整份垃圾数据。本词条按量子行走文献的标准做法,假定矩阵元素可以被相干地随机访问(量子 RAM 模型);这一假设的边界见第 6 节。
4.6 一个指纹小例子
用最小规模的数字把第 4.2–4.3 节走一遍。取 ,假设某个顶点 上的子矩阵错误为
即子矩阵只有右下角一个条目是错的。(行向量)与 (列向量)各等可能地取 中的四个值。计算 :先算
所以 当且仅当 ,概率恰为 (对应 Lemma 4 证明的第一步)。再左乘 :
非零当且仅当 ,联合概率恰为 (第二步:给定 ,需要 ,条件概率 )。四个 组合中只有一个,即 、,能检出这个错误——Lemma 4 的 在本例取到等号。反过来,如果 (子矩阵等式成立),则无论 取什么, 恒成立,指纹永不误报。单边错误的结构在小例子里一目了然。
再演示一次增量更新。设 、,,,且
则 (取 的第 分量),
现在行走一步,把 中的元素 换成 ,即 。从头算是 (注意 )。用增量公式:
两法结果一致,但增量法只做了两个长度 的向量加减,;从头算是 个向量相加,。 大时差距就是第 5 节复杂度平衡里”每步 而非 “的来源。
5. 总复杂度的平衡
现在把所有零件装进 Szegedy 框架的总公式
在最坏情形( 只有一个错误条目)下,逐项代入前四节的结果:
以及第 3.4 节算好的步数 ,得到
这个表达式的结构非常清晰,两个因子各有一段来历:
- 第一项 :初始化。 越大,要建立的指纹越长( 行求和,每行长度 )。它随 单调上升。
- 第二项 :行走。其中步数 随 下降( 越大 越大,标记越密,搜索越快),每步成本 与 无关(这是第 4 节压缩数据结构的全部意义—— 和 里没有 的影子)。
一项随 增、一项随 减,最优的 在两项同阶处取得(这是平衡两个幂律项的标准原理:若 偏离平衡点,较大的那一项都会超过平衡值)。令两项相等:
(第一步两边同除以 并同乘 ;第二、三步只是幂的整理。)代回任一项:
两项果然同阶,于是
比经典最优的 快了 的因子。作为自洽性检查:此时步数 ,即”行走步数恰好等于子集大小”,正应了第 3.4 节的预告——这不是巧合,而是”初始化项 与行走项同阶”这一平衡条件的直接推论( 两边除以 正是 )。
为什么压缩检查是不可或缺的? 回过头看,如果不用第 4 节的指纹,而是每次检查都显式计算子矩阵乘积(,见第 4.1 节),总复杂度会变成
第二项随 上升,平衡被打破:为了压低它只能把 往小取,而 时第二项是 ——恰好退回经典复杂度,量子加速完全消失。这就是为什么本词条说”必须设计可增量更新的数据结构”不是工程修饰,而是算法成立的先决条件。
错误更多时的改进。以上按最坏情形(单个错误)分析。若 有 个错误条目且分布较分散,能罩住错误的 对显著增多:粗略地说, 个错误散布在约 行、 列时, 从 上升到 量级,步数随之按 下降;但改进有一个饱和点——错误再密集,标记比例也不可能超过 ,且高度集中的错误(挤在少数几行里)并不能成比例地帮助搜索。把这一效应做严格后,论文给出的期望时间界为
这里 的截断正是上述饱和效应的体现;推导需要更精细地统计”行错误数×列错误数”的联合分布,超出本词条范围,我们只引用结论。无论 多大,这个界都不会比 的最坏结论 更差。
6. 正确性与模型边界
把散落于各节的正确性论证收拢成一个完整的画面,再明确算法的适用边界。
完备性( 时永不错拒)。若 ,由 Lemma 2,所有子矩阵等式 都成立,进而对任何 都有 (因为 )。于是不存在任何(指纹意义下的)标记状态,行走中的相位翻转恒为恒等操作,均匀叠加在 Szegedy 行走下保持不变,干涉检测永远指示”无标记”,算法总回答”相等”。
可靠性( 时以高概率拒绝)。若 ,任取一个错误位置 :由 Lemma 3,至少 比例的 对上子矩阵错误 ;由 Lemma 4,随机 以至少 的概率把这些对变成指纹可检的标记状态。两件事合起来,有效的标记比例是 (常数因子被吸收)。Szegedy 定理保证量子行走以至少 的单次概率把”存在标记”与”无标记”区分开——机制上,行走把标记顶点上的振幅与初始均匀叠加所对应的平稳态分离开,末段再做一次 Hadamard 型的干涉测量,检测末态与初始均匀态的内积是否偏离 。把整条算法(含重新随机选取 )独立重复常数次,即可把单边错误率压到任意常数以下,比如拒绝概率至少 。
单边错误的定性。与 Freivalds 一样,本算法是单边错误:相等的乘积永不被拒绝,不相等的乘积可能因”随机 恰好掩盖了所有错误”而被暂时接受,重复运行指数压低这一概率。
代数结构的边界。算法适用于无零因子的交换环(论文以整环 (integral domain) 表述),整数环 、任意域(如有理数、有限域)都是合法实例。限制的来源在指纹引理:Lemma 1 与 Lemma 4 的配对论证要求”非零元素 使得 与 不可能同时为零”,并进而要求随机线性组合以常数概率非零;在含零因子的环上这类概率界可能退化,随机指纹的具体成功概率也依赖取样集合的大小与结构。本词条的常数(、)是按 取样算的,换成别的取样集合结论仍是”常数”,只是数值不同。
计算模型的边界。复杂度 是在”矩阵元素可被相干地随机访问”的模型(量子 RAM / 量子查询模型)下成立的:第 4 节的增量更新要在叠加态上对任意指定的矩阵条目做受控读取。如果读取模型不允许这种相干随机访问(例如矩阵存在经典磁带、只能顺序读取),查询与门时间还要加上数据访问成本, 的结论不再自动成立。
问题本身的边界。本算法解决的是验证而非计算:它输出” 是否成立”的一个比特,不输出 的全部 个条目(输出本身就要 时间,不可能做到 )。它回答的是”信不信这份答案”,而不是”答案是什么”。
7. 小结与习题
小结。
- 验证 不必计算 :经典 Freivalds 用随机向量指纹 在 内完成,单边错误,配对论证给出检出概率 。
- 量子算法把验证改写为搜索:标记顶点是包含错误条目的行/列子集对 ,依据是限制的乘积等于乘积的限制(Lemma 2)。
- 搜索在乘积 Johnson 图 上进行;Johnson 图谱隙 与标记比例 共同决定量子行走步数 。
- 双侧随机指纹 把 子矩阵乘法压成一个长度 的内积,检查成本 ;交换一个元素时指纹可增量维护,更新成本同为 ——这是查询加速能变成时间加速的关键。
- 取 平衡初始化 与行走 ,得到 ;错误更多时界改进为 。
习题。
- (配对论证)补全 Lemma 1 中未写出的细节:设 为非零行向量、,证明把 按”翻转第 位”配对后,每对中至多有一个向量满足 ,从而 。取样集合换成 时,这个论证需要怎样修改?
- (标记比例)对单个错误位置 ,用组合数恒等式 严格推导 。若 有恰好 个错误条目且两两不同行不同列,标记比例的下界是什么?
- (谱隙)从 Johnson 图邻接矩阵特征值 出发,验证 ,并证明 时归一化谱隙 落在 内,即 。
- (增量更新)设一步行走把 中的 换成 、把 中的 换成 。写出 、、 三个量的完整更新公式(注意 在 、 同时变化时有一处交叉项需要小心处理),并逐项统计运算次数,验证 。
- (复杂度平衡)对 做数量级平衡:令两项相等解出 ,并验证偏离平衡( 与 )时总时间都严格变差。再计算:若标记检查改为显式计算子矩阵乘积(),最好的 能给出什么总时间?由此说明压缩检查的必要性。
- (概念)解释为什么”标记检查不增加矩阵查询”仍可能消耗 的门时间——即查询复杂度与时间复杂度的区别——并说明双侧指纹 + 增量更新是如何把二者同时压低的。
参考文献
- Zoo 编号 6:A. Ambainis 等,Quantum Matrix Verification,未发表手稿,2002。
- Zoo 编号 19:Harry Buhrman 与 Robert Špalek, Quantum Verification of Matrix Products.
- Zoo 编号 85:Mario Szegedy, Quantum Speed-up of Markov Chain Based Algorithms, FOCS 2004.
参考资料
- 本词条整理自《量子计算算法教程》原文:ch09-algebra-number-theory/matrix-product-verification
- 内容遵循 CC BY-NC-SA 4.0 许可协议