无环的逻辑运算网络

布尔电路是表示布尔函数的抽象计算模型。输入节点承载0或1,内部节点执行与、或、非等逻辑运算,连线把输出送往后续节点。作为有向无环图,电路没有反馈环,因此可以按拓扑顺序逐门求值,最终读取指定输出。

这一定义抓住的是逻辑依赖,而不是实体芯片的全部性质。电压、晶体管尺寸、传播延迟和散热并未自动包含在模型中。讨论电路复杂度时,还须说明允许哪些门、每个门能接受多少输入,以及输出是否可以分送给多个门。

参考:[1]

电路与公式树的差别

布尔公式可以画成一棵树,每个内部运算结果只供一个上层运算使用;同一子表达式出现多次时,通常要复制表示。一般电路允许一个门的输出连接多个后继,因而能够共享计算过的中间值。这种扇出自由度可能显著减少规模。

例如若多个输出条件都依赖t=x∧y,电路可计算一次t并分送到后面的门;按树状公式逐个书写时,则可能重复x∧y。把电路展开为公式虽然不改变函数,却可能复制大量子结构,不能假设两种表示总有相近的大小。

参考:[2]

异或例子中的大小与深度

以二输入异或为例,x⊕y可写成(x∧¬y)∨(¬x∧y)。若使用二输入与、或门和单输入非门,并把所有门都计入,则需要两个非门、两个与门和一个或门,共五个门;最长输入到输出路径经过三个门。这个计数明确了采用的门基和约定。

不同资料可能不计非门,或允许无界扇入,因此具体数值要随约定解释。大小衡量逻辑硬件量,深度衡量最长串行依赖链,两者不能互代。把多个异或单元排成平衡树,可用线性数量的门、对数深度计算多位奇偶性;串联结构则会有更长依赖链。

参考:[1] [2]

固定输入长度与统一生成

一个n输入电路只计算从{0,1}^n到输出位的函数。要处理任意长度字符串,需要为每个n指定电路C_n,形成电路族。仅要求这些电路分别存在,并没有要求一个算法能够生成它们,这便是非统一计算的重要特点。

P中的语言都有多项式大小电路族,但反向不能仅凭大小成立;无限电路族的选择可以携带不可计算的信息。统一性条件把生成过程也纳入约束,例如要求一台多项式时间图灵机在输入1^n时输出C_n的描述。这样才把“每个长度有一个小电路”与“存在统一有效的构造算法”区分开。

参考:[3] [4]