在计算复杂性理论中,算术电路是计算多项式的标准模型。算术电路能够从变数或数字中获取输入,并通过加法或乘法来计算先前计算出的表达式的结果。这种模型使得我们能够形而上地了解计算多项式的复杂性。
电路的基本问题是“怎样以最有效的方式计算给定的多项式?”
一个算术电路由导向无环图所构成,图中的每个入度为零的节点被称为输入闸,并标记为变数或者域中的元素。其他的闸则是加法闸或乘法闸。算术公式是一种电路,每个闸的出度均为一,形成一棵有向树。电路有两个重要的复杂性度量:大小和深度。电路的大小是指闸的数量,而深度则是指在电路中最长的有向路径的长度。
算术电路在计算多项式方面有其自然的方法。输入闸计算其标记的多项式;加法闸计算其子节点所计算出多项式的和,而乘法闸则计算其子节点所计算出的多项式的乘积。以图为例,输入闸依序计算 x1、x2 和 1,加法闸计算 x1 + x2 和 x2 + 1,乘法闸计算 (x1 + x2) x2 (x2 + 1) 的值。
当我们面对一个多项式 f 时,问题在于如何以最好的方式来计算它——例如,计算单位电路的最小大小。这个问题通常由两个部分组成。第一部分是找到一个计算该多项式的电路,称之为上界复杂度;第二部分是证明其他电路不能达到更好的性能,称之为下界复杂度。
尽管这两个任务密切相关,但证明下界通常更具难度,因为需要对所有电路进行同时的讨论。
在此,值得注意的是,我们关心的是多项式的正式计算,而非多项式所定义的函数。例如,考虑二元域的多项式 x2 + x,该多项式在此域上代表零函数,但它并不是零多项式。这是算术电路研究与布林电路研究之间的差异之一,也是一个原因使得布林复杂性更难于算术复杂性。
在计算多项式复杂度的研究中,发现了一些聪明的电路或算法。例如,著名的 Strassen 矩阵乘法算法,使用的电路大小约为 n2.807,相较于简单的 n3,大大降低了复杂度。另一个引人入胜的故事是有关n × n 矩阵的行列式计算,虽然原始的计算方法需要的电路大小为n!,但我们知道可以用多项式大小的电路来计算行列式,虽然该电路的深度是线性与n。
与此同时,关于 n × n 矩阵的常数电路 (permanent),为了计算其大小也存在类似的挑战,最佳电路的大小约为 2n。
在证明下界的方面,我们目前的知识非常有限。例如,计算很大度数的多项式通常需要大的电路;例如,度数为 2^2n 的多项式需要的电路大小约为 2n。主要的问题便在于对于小度数的多项式证明下界,尤其是多项式大小的 n。
当前的主要开放问题是,找到一个明确的多项式,使其被计算所需的电路大小超过多项式级别。
在计算复杂性理论中,最有趣的开放问题是 P 与 NP 问题。约略来说,这个问题在于确定一个问题的解是否能够和证明解的存在一样容易。 Valiant 提出了 VP 与 VNP 问题的代数类比,这涉及到多项式大小与电路大小的关系。
对于我们了解多项式计算的一个重要基准是 Valiant、Skyum、Berkowitz 和 Rackoff 的研究。他们表明,如果一个度数为 r 的多项式拥有大小为 s 的电路,则该多项式也拥有大小为多项式 r 与 s 的电路。
这一结果在布林设定下的类似结果被认为是错误的。此结果的推论之一是,对有关多项式的电路的模拟,这是相对较小的公式;在这种情况下,一个度数为r 的多项式拥有大小s 的电路则需要的公式的大小为s^ (O(log(r)))。
算术电路的设计、大小及深度等,都是计算多项式的关键要素,研究这些要素不仅是数学理论上的挑战,还与实际应用紧密相连。在这些复杂的计算中,是否能够找到更高效的方法来解决更大型的问题,将是未来研究的方向之一?