经典纠错码 (error-correcting code) 解决的问题是:发送方把 个 information bits 编成 个 bits 发送,信道会翻转其中一些 bit,接收方拿到被污染的 received word 后,仍希望恢复原始消息。自 Shannon 1948 年建立信道编码定理、Hamming 1950 年给出第一个显式构造以来,编码(如何设计好码)与译码(如何高效地从噪声中恢复)一直是两个独立的问题:好码可以构造出来,但”对任意线性码做 maximum-likelihood decoding”这一通用任务已被证明是 NP-hard 的(Berlekamp、McEliece 与 van Tilborg,1978)。因此经典译码算法的全部艺术在于利用具体码族的结构:Reed—Muller 码用多数逻辑,Reed—Solomon 码用多项式插值,卷积码用 trellis 上的动态规划(Viterbi 算法,1967)。
那么量子计算能帮上什么忙?首先要泼一盆冷水:量子计算不会把这个一般的 NP-hard 问题自动变成 polynomial time——没有任何已知结果表明一般线性码译码属于 BQP。Zoo 收录的量子译码加速全部依赖额外的代数或组合结构:
- Simplex/Hadamard code 的 codewords 恰好是 上的 Fourier characters,译码等价于求 Walsh 变换的最大分量——这正是 Bernstein—Vazirani 算法的相位查询结构,对应 Barg—Zhou 的量子 simplex 译码算法(Zoo 239);
- Convolutional code 的合法 codewords 形成稀疏 trellis 上的路径,Viterbi 的动态规划可以被相干化,对应 Grice—Meyer 的 quantum Viterbi algorithm(Zoo 238);
- 对一般线性码,量子搜索(Grover)与量子行走只能把穷举译码的指数开平方或改进指数常数,这在密码分析中有实际意义(见量子密码分析),但不是多项式加速。
本词条逐一展开这三条路线。读者应已熟悉的内容,特别是相位反冲 (phase kickback)、Hadamard 变换与 Grover 算法、振幅放大。我们会反复回到一个主题:量子优势到底来自哪一步,又有哪些隐藏成本(输入电路、metric 精度、经典读出)必须如实计入。
1. 线性码与译码目标
1.1 基本定义
一个二元 linear code 是 的一个 维线性子空间。用 generator matrix ( 个基码字的行向量拼成)写出来就是
三个参数的含义: 是码长(每个 codeword 的 bit 数), 是维数(能编码 个 information bits), 是最小 Hamming distance,即任意两个不同 codewords 之间不同坐标个数的最小值。线性性带来一个常用简化:两个 codewords 之差仍是 codeword(),所以最小距离等于最小非零重量
与子空间对偶的是 parity-check matrix ,它的行张成 的正交补,因此满足
第二行的读法是: 给出了 个线性校验方程,一个向量是合法 codeword 当且仅当它通过全部校验。这个”判 membership 很容易”的性质是后面 syndrome 译码的基础。
1.2 信道模型与 syndrome
发送 。我们采用最简单的噪声模型 binary symmetric channel (BSC):每个 bit 独立地以概率 被翻转。等价地,信道加上一个 error vector ( 表示第 位出错),接收方拿到
译码器的输入只有 。第一步是计算 syndrome(校验子)
逐步看这个等式:第一步代入 ;第二步用矩阵对 的分配律(在 上加法就是逐位异或);第三步用 ,因为 。结论是:syndrome 只依赖 error,不依赖发送的是哪个 codeword。未知量从” 个候选 codewords”约化为”满足 的候选 errors”,这是线性码译码的标准化简。
1.3 为什么 ML 译码就是最小重量译码
BSC 下,给定发送 收到 的条件概率完全由错误个数 决定:
第一个等号是独立性(哪几位错、哪几位对,各自贡献因子 或 );第二个等号只是提出公因子。由于 ,比值 ,所以 是 Hamming 距离 的严格递减函数。因此 maximum-likelihood decoding(找使 最大的 )等价于 nearest-codeword decoding(找离 最近的 )。
结合 syndrome 语言:候选 error 必须满足约束 ,ML 译码就是在所有解中找重量最小的:
唯一性半径。 若真实错误满足 ,则最近 codeword 唯一。证明是标准的三角不等式:若另有一个 也满足 ,则
与最小距离为 矛盾(第一步是 Hamming 距离的三角不等式,第二步是两个距离都不超过 )。几何图像:以各 codewords 为球心、 为半径的 Hamming 球互不相交,球内的 received word 归属唯一。超出此半径时最近码字可能不唯一,就需要 list decoding(输出一个小候选列表)或 soft information(利用信道的模拟输出而非硬判决)等更强的框架。
难点所在。 “解线性方程组 “本身用高斯消元是多项式时间的;难的是约束最小重量解。对任意给定的 ,这个 syndrome decoding / nearest-codeword 问题在最坏情形是 NP-hard 的。所以一切高效译码算法——无论经典还是量子——都必须利用 code family 的 algebraic 或 trellis structure。下面两节先看一个”结构强到量子算法一步译码”的极端例子。
2. Simplex/Hadamard code 是 Fourier 字符
2.1 构造
取 -bit message 。Extended Hadamard code 把 编码成一个长度为 的向量,其坐标由所有 标记:
也就是说,codeword 是线性函数 的真值表:把函数在全部 个输入上的取值排成一行。这是编码理论中”函数 真值表”的标准对应,Hadamard code 正是所有线性函数的真值表构成的码(一阶 Reed—Muller 码的线性部分)。
坐标 对所有 都满足 ,不携带任何信息;去掉它就得到 simplex code。注意它的参数有多极端: 个 information bits 被膨胀到 个 bits,码率 指数小,换来的是巨大的相对距离 。这种码在实用通信中太奢侈,但在理论计算机科学( hardness amplification、伪随机性)和本节的量子算法中非常自然。
2.2 最小距离的完整证明
Lemma 1. 对任意 ,。因此 Hadamard code 的最小距离是 ,simplex code(删去恒零坐标不影响非零重量)同样是 。
证明。由线性性,,所以两码字的距离等于函数 的重量,其中 。我们要证明:非零线性函数在恰好一半的输入上取 。
取 的某个非零分量 。把 配成 对:每个 与 (把 的第 位翻转)配成一对。每一对内
即同一对中两个函数值恰好一 一 (第一步用 上内积的双线性,第二步用 )。 对每对贡献恰好一个 ,总重量为 。Q.E.D.
同一个配对论证还给出量子计算读者更熟悉的形式——character orthogonality:对 ,
因为每对贡献 ;而 时和显然为 。合并写成
这正是中 Bernstein—Vazirani 算法”一次 Hadamard 变换读出隐藏字符串”背后的同一个恒等式,第 3 节会反复使用它。
2.3 译码问题的重述
接收字是 (坐标同样由 标记)。译码要在全部 个 linear characters 中找与 相关性最强的一个。用 记号写出 与 的归一化内积(Walsh 相关系数):
逐坐标看:若 ,该项贡献 ;若不同,贡献 。设有 个坐标不同,则
所以”Walsh 系数最大”与”Hamming 距离最小”是同一件事的两种写法:nearest-codeword decoding 求 的最大分量。这个恒等式是整个 Barg—Zhou 算法的支点——它把译码问题翻译成了 Fourier 分析问题,而量子计算机恰好擅长对真值表做 Fourier 变换。
3. 相位查询与 Walsh—Hadamard 译码
3.1 输入模型:相位反冲
假设 input circuit 提供对 received word 的 coherent bit access(按索引读出第 位的标准 oracle):
第一个寄存器是 个 qubits 的 index register,第二个是单 qubit target。把 target 制备在 ,就是学过的 phase kickback 技巧:
中间的等号按 分别验证: 时 target 不变,因子为 ; 时 变成 ,因子为 。bit 值 被”踢回”成 index register 上的相位。对 index register 制备均匀叠加并整体作用 :
注意 就是 向量 归一化后的**量子态版本**:整个 -bit received word 被压缩进 个 qubits 的相位里。这一步只调用了一次 ,正是”查询复杂度”与”电路复杂度”分离的地方,第 4 节会回到这一点。
3.2 Walsh—Hadamard 变换一步求出全部相关系数
丢开 target(它与 index register 已解耦),对 index register 应用 位 Hadamard 变换 。用前面已建立的恒等式
代入 并按 归并系数:
方括号里 加法 就是 ,所以第 个振幅恰好是 2.3 节定义的 Walsh 系数 。结合那里的恒等式:
一次 ( 个 Hadamard gates)就把”与全部 个码字的距离”同时写进了振幅——测量分布直接偏向最近的码字。这就是 Barg—Zhou 算法的核心,也是”Hadamard code 译码 = Walsh 谱分析”的量子实现。
3.3 无噪声与有噪声的成功概率
无噪声情形。 若 ,由 2.2 节的 character orthogonality,
一次测量以概率 恢复 message。这正是 Bernstein—Vazirani 算法——“BV 算法就是 Hadamard code 的无噪声译码”这个对应关系值得记住。
有噪声情形。 设 error fraction 为 ( 个坐标被翻转)。正确 message 的振幅是
其余 个错误 candidate 分走剩余概率 。只要 有界地小于 ,单次测量就以常数概率命中正确 message;独立重复 次并对测量结果取多数表决(每个 candidate 是一个 -bit 串,逐位取多数即可),可以把 failure probability 压到 以下,总查询数是 次 oracle 调用——与 无关。
但原文的保留条款必须强调: 只是正确码字那一条振幅的贡献。当噪声接近相对距离边界( 接近 ,即 )甚至超过它时,其他 characters 也可能有与 相当甚至更大的相关性,此时”测到多数 “不再自动成立,不能只看这一项就宣称唯一译码——需要 list decoding 式的分析或对噪声模型的额外假设。
3.4 一个完整的小例子
取 ,,真实 message ,即 。按 列出真值表:
设信道翻转了坐标 这一位,收到 (粗体为错误位),。按公式,正确振幅应为 ,我们直接验证并顺便算出全部 个振幅。
把 向量写出来: 在除 外等于 ,在 处反号。于是对任意 candidate ,
第二步的依据:把求和分成""与""两部分;错误位上 与无错值相差一个符号,所以该点贡献要从 改为 ,净差 。于是
- :振幅 ,概率 ;
- (共 个):正交性使第一项为 ,振幅 ,概率各 。
检查归一化:,符合酉变换保持范数。单次测量以 的概率直接给出正确 message;重复三次取逐位多数,失败概率已低于 量级。这个小例子也说明了 3.3 节的保留条款:错误 candidates 的概率随 线性增长(每多一个错误位,部分 candidate 的振幅绝对值增大),噪声越重,“一枝独秀”越不明显。
4. 复杂度里最容易漏掉的输入电路
3.2 节的画面非常漂亮:译码 位的码字只用了 个 qubits 和 个 Hadamard gates。但这个账只算了”量子计算核心”。诚实的复杂度分析必须把数据进出量子处理器的过程也算上,这里正是量子译码文献中最常被误读的地方。
逐项拆开看:
- 量子计算核心确实很小:Walsh transform 只在 个 qubits 上,用 个 Hadamard gates。Barg—Zhou 的完整实现进一步把 computation subcircuit 压到 size/time 量级。
- 输入电路无法省略:按 index 读取一个任意 -bit received word 来实现 ,需要额外 的 input circuitry(数据选择/路由电路),其规模与被编码的 classical 数据量同阶。无论经典还是量子,“处理 个任意 bits”的物理成本都不可能低于读入它们。
- 与经典算法对比:经典并行 decoder 可以在 的 time(深度)内完成 fast Walsh transform——FWT 的 butterfly 结构共 层,每层 个加减操作完全并行——但总的 computation size 是 。量子方案的特点是深度与 size 都小(核心部分),代价是需要把数据以相干 oracle 的形式提供。
- oracle 假设必须单独报告:若 被当作免费 oracle,结论只是”查询复杂度 、时间复杂度 “;一旦要求从 classical RAM 中的 个 bits 构造 ,就必须单独报告它的构造和数据 movement 成本。
所以正确的表述是一个 circuit tradeoff:这是”查询/并行电路资源”意义上的优势,不是读取 个任意 classical bits 的无条件 logarithmic-time 算法。 凡是看到”量子译码指数加速”的说法,第一件事就是检查输入模型属于哪一类。
5. Convolutional code 与 trellis
5.1 编码器是一台状态机
前面讨论的 block code 把消息分块独立编码;convolutional code 则是流式的:编码器内部保持一个 memory state ( 个状态,对应移位寄存器的内容),每来一个 input symbol ,按确定规则更新状态并产生该步的输出:
其中 是状态转移函数、 是输出函数。关键观察:编码器是一台有限状态机,而一个长度为 的合法 codeword 与状态机的一条长度- 运行轨迹一一对应。把所有时刻的状态并排画出来、合法转移连成边,就得到 trellis(格图): 列、每列 个节点,codeword 对应 trellis 上一条路径
设每个 state 只有 个合法 outgoing transitions(fanout,通常 ,每步一个 input bit)。路径总数是 量级——随 指数增长,这就是译码难的原因;但”每一步只有 个选择、汇合到 个状态”的稀疏结构,正是经典与量子算法都要利用的东西。
5.2 从似然到路径度量
接收方逐时刻拿到 observations (BSC 下 是 的噪声版本;更一般的软判决下 可以是模拟值)。由信道的无记忆性(各时刻噪声独立),给定路径 的似然分解为逐时刻因子之积:
Maximum-likelihood 译码要最大化这个乘积。取负对数把乘积变和(对数单调,不改变 argmax;取负号把 max 变 min),定义 branch metric
则 ML 路径最小化可加的路径总度量
例:BSC 交叉概率 、每步输出一个 bit 时, 只取 或 两个值,所以 branch metric 只差一个常数因子地等于”该步输出与观测的 Hamming 距离”——第 1.3 节”ML = 最小距离”在这里以逐时刻的形式重现。“最小化可加度量”这个形状,是下面动态规划与量子振幅放大都能接上的原因。
6. Classical Viterbi 递推
6.1 最优子结构与递推
枚举全部 条路径显然不可行。Viterbi 算法(1967)的出发点是最优子结构:若最优路径在第 步经过状态 ,则它的前 步必须是”以 结尾的所有前缀中度量最小的那个”——否则把前缀换成更优者,总度量严格变小,矛盾。因此只需对每个 记录最佳前缀度量
它满足把最后一步拆出来的递推:
等式成立的理由:到 的最优前缀,其上一步必是某个能转移到 的 ,且前 段在”以 结尾”的前缀中最优(否则同样可替换改进),所以枚举 取最小即可覆盖全部候选。同时记录取得最小值的那个前驱作为 backpointer
递推到 后,从 出发沿 backpointer 回溯,即得完整的 ML 路径。
复杂度。 每个 的计算要枚举至多 个前驱,共 个格子,时间为 ;若 transition graph 稀疏(),这远小于路径数 。memory 取决于回溯策略(存全部 backpointer 是 ,也有省内存的分治回溯变体)。Viterbi 的力量正是合并拥有相同 suffix state 的指数多条 prefixes:两条路径一旦在某时刻汇合到同一状态,未来完全等价,较差者可以永久丢弃——指数大的路径空间被压缩成 个格子的动态规划表。
6.2 一个手算例子
取 、、 的完全 trellis(每个状态可向两个状态转移),起始状态固定为 (,)。Branch metrics 给定如下:
| 1 | 1 | 3 | — | — |
| 2 | 2 | 1 | 1 | 2 |
| 3 | 1 | 2 | 2 | 1 |
( 时只有从状态 出发的两条边可达。)逐层填表:
- :;。
- :,;,。
- :;,。
终点取 (状态 )。回溯:,,,得路径 ,验算总度量 ,与 一致。整个计算只做了 个格子的加法与比较,而暴力枚举要检查 条路径—— 大时这个差距是指数对线性。
7. Quantum Viterbi 的构造思路
7.1 为什么 trellis 适合相干化
Grice—Meyer 的 quantum Viterbi algorithm(Zoo 238)观察到 trellis 与 FFT butterfly 有相似的 tensor-product structure:演化是”每步一个局部转移”的重复复合,而局部性正是量子线路擅长表达的。概念步骤是:
- 相干生成路径:用每步 transition unitary 在叠加中生成所有合法 paths,而不是所有 bit strings——非法转移(不在 trellis 中的边)从一开始就不被生成,这相当于把搜索空间限制在结构化解集内;
- 可逆计算度量:reversible 地计算各 branch metrics,把 total likelihood/metric 写成 phase(或用辅助寄存器暂存,最后 uncompute);
- 标记较优路径:构造阈值或”较优路径”标记 oracle——例如翻转 的路径的相位;
- 振幅放大:用 specialized amplitude amplification 提高 most-likely path 的 amplitude;
- 读出与验证:测量路径 register,classically 重算 score 验证,必要时重复。
7.2 增益从哪来: 对
设初态中最优路径(或某个可接受的高似然路径集合)的总权重为 。两种策略的对比是的标准结论:
- generic repetition:制备—测量—检查,平均 次;
- 理想 amplitude amplification:把成功振幅相干地旋转放大, 次。
平方根的来源与 Grover 完全一样:振幅线性增长、概率平方增长。论文指出的有利 regime 是 state space 很大、frame 较短且 fanout :此时经典 Viterbi 的 受 拖累,而量子方案的 state preparation 成本随 (每步只需在 个后继上叠加)而非稠密 -by- transitions 增长,稀疏性直接转化为量子线路的浅度。
7.3 必须保留的注意事项
这不是对所有 Viterbi instances 的统一 quadratic theorem。以下每一条都会侵蚀或限定加速,引用该结果时必须一并说明:
- 阈值未知:标记”最优”路径需要阈值 ,而最优度量事先未知;需要搜索阈值或用对解数量不敏感的 amplification 变体,带来额外开销;
- metric 精度:branch metrics 是(负对数似然导出的)实数,写成 phase 时的有限精度会引入误差,precision bits 计入线路成本;
- 近简并路径:若次优路径的度量与最优非常接近,“较优路径”集合的成功权重 与目标定义敏感相关,成功率下降;
- 经典对手很强:classical DP 已经避免了 path-space brute force( 而非 ),量子方案比较的对象是这个多项式基线,不是枚举。
因此实际比较必须把 reversible metric oracle、state preparation、amplification 和完整 path readout(读出整条 -步路径的 classical description,而不是只读一个 bit)全部计入端到端成本。这与第 4 节的教训同构:量子内核的优势是真的,但只有放进完整输入输出管线里结算,才知道剩下多少。
8. 一般码上的量子搜索
回到没有特殊结构的一般线性码。1.3 节把 ML 译码化为”在 的解中找最小重量者”。一个直接思路是逐重量穷举:对固定的猜测重量 ,在
上搜索满足 的 (标记函数就是计算 syndrome 并比对,多项式时间)。候选数是组合数
因为重量为 的向量就是”从 个坐标中选 个出错位置”。经典穷举要 次查询;Grover 搜索把它降为 次 oracle 调用(每次调用的标记电路是多项式规模)。
这个加速的真实量级。 指数没有变:取 ,由 Stirling 近似(习题 4 推导)
所以经典穷举约为 、Grover 约为 ——指数减半,仍是 exponential。在经典信息集译码 (information-set decoding, ISD) 的更精细框架上,quantum walks 可进一步改进指数常数(而不止是整体开平方)。这类改进有切实后果:code-based cryptography(如 McEliece 型方案)的安全参数正是按”最佳已知译码攻击的复杂度”选取的,量子攻击压低指数常数就直接迫使增大密钥尺寸。但方向也要说清楚:这些结果没有证明一般 decoding 属于 BQP——指数级问题的指数级加速,不改变其复杂性类别。
9. 与量子纠错码译码的区别
名字相近,问题不同,值得单独辨析。
本词条的问题是 classical in / classical out:输入是 classical received word (或它的相干 oracle),输出是 classical message 或路径 ;量子计算机只是 decoder 的内部实现,噪声作用在 classical bits 上。
Quantum error-correcting code 的译码则保护未知 quantum state:噪声是作用在 data qubits 上的 Pauli error,译码器只能测量 stabilizer syndromes(设计上与 logical 信息对易、不泄露 logical state),并据此推断 Pauli-error 的 equivalence class(相差一个 stabilizer 的错误对 logical state 作用相同,只需校正到等价类)。两者共享 syndrome、trellis(如量子卷积码)和 maximum-likelihood 思想,但后者必须保留 logical coherence——不能先把 data qubits 测量再”复制”一份慢慢算(no-cloning,见),所有处理必须与 logical 信息解耦地进行。
还要区分”quantum algorithm decoding a classical codeword”(本词条)与近期文献中的 quantum decoding problem(输入本身可能是 codeword-state 的 superposition,例如在量子采样攻击与格/码密码分析中出现):三者的 oracle 形式、成功标准和安全含义都不相同,读文献时先确认问题设定再比较复杂度数字。
10. 小结与习题
小结。
- 一般 linear-code ML decoding 是 NP-hard 的;量子加速全部来自结构——simplex code 的 character 结构,或 convolutional code 的 trellis 结构。
- Simplex 译码的支点是一个恒等式:Walsh 系数 ,它把 Hamming distance 变成 Walsh amplitude; 一次给出全部 个相关系数,无噪声时退化为 Bernstein—Vazirani。
- 成功概率的诚实估计要算清两条账:正确振幅 ,以及噪声接近相对距离边界时其他 characters 的竞争。
- Quantum Viterbi 相干生成合法 paths 并放大高似然分支,增益是 ,优势只在明确参数区间( 大、 短、)成立。
- 输入电路( input circuitry)、soft-metric precision、阈值搜索和 classical path output 都必须计入端到端成本;“oracle 免费”的结论要如实标注模型。
- 对一般码,Grover/quantum walk 只把译码攻击的指数减半或改进常数——这足以影响 code-based cryptography 的参数选取,但不改变问题的指数本质。
习题。
- 对 写出全部 个 Hadamard codewords(即所有 的真值表),并验证每个非零 message 的 codeword weight 都是 。(提示:用 Lemma 1 的配对论证,不必逐个硬算。)
- 若 error fraction ,计算正确 simplex message 的单次测量 amplitude 与 probability;其余概率总量是多少?若重复 次独立测量并逐位多数表决,定性说明为什么失败概率被压低。
- 在 6.2 节的 trellis 上,把 从 改为 ,重新手算整张 Viterbi 表 并给出新的最优路径与总度量。(答案:最优变为 或经状态 的某条路径,总度量 ——请验证是哪一条。)
- 用 Stirling approximation 推导 ,从而说明 weight- 的 Grover syndrome search 查询数约为 。对 数值估计 与 Grover 后的指数。
- 证明 character orthogonality 的推广形式:对任意 ,,并用它严格推出 3.3 节无噪声时 。
- 推广 3.4 节的小例子:设 是 在坐标集合 ()上出错的结果,证明输出振幅满足 ,并用 、 自行取一组 验证概率归一化 。
参考文献与 Zoo 覆盖
- Zoo 编号 238:Jon R. Grice 与 David A. Meyer, A quantum algorithm for Viterbi decoding of classical convolutional codes。
- Zoo 编号 239:Alexander Barg 与 Shiyu Zhou, A quantum decoding algorithm of the simplex code。
- 延伸阅读:Bernstein—Vazirani、Amplitude amplification和量子 subset sum。
参考资料
- 本词条整理自《量子计算算法教程》原文:ch16-cryptanalysis-coding/quantum-decoding
- 内容遵循 CC BY-NC-SA 4.0 许可协议