科普

四块砝码的极限:平衡三进制

PDF · 8 页

正文文字 6695 字约 19 分钟公式 150 处2 图

给你四块不可拆分的砝码,可以自行决定每块的质量,天平两边都允许放.要求1克、2克、3克……都能用这些砝码一次配平,中间不能漏掉.最多能称到多少克? 答案是40克,砝码取1克、3克、9克、27克.例如,称20克时,物体与9克、1克砝码同盘,另一盘放27克、3克:

$$20=27-9+3-1$$
20克物体与9克、1克砝码同盘,另一盘放27克、3克砝码,两侧均为30克

把27克换成28克,不就能称到41克了吗?确实能,但14克丢了.不用28克时,其余三块最多凑出 $\displaystyle 1+3+9=13$ 克;用了28克,即使把其余砝码全部放到另一侧,正的质量差也至少是 $\displaystyle 28-13=15$ 克.

第四块取27克时整数质量13与14衔接,取28克时新覆盖从15克开始,漏掉14克

想换一组重量,让1到41一个不漏,也做不到.每块砝码只有“同侧、对面、不用”三种放法,四块一共 $\displaystyle 3^4=81$ 种.若能称出1到41,交换砝码两侧的位置,还能得到−1到−41的质量差,加上0,就需要 $\displaystyle 41+41+1=83>81$ 种不同结果,已经超过全部放法.

计数给出了40的上界,但还没有证明它能达到.接下来要说明:1、3、9、27确实能称出中间的每个整数.

数字也可以取负值

普通三进制使用 $\displaystyle 0,1,2$ 三个数字,位权是 $\displaystyle 1,3,9,27,\ldots$.平衡三进制保留位权,把数字换成 $\displaystyle -1,0,1$.记 $\displaystyle \bar1=-1$,上横线只属于这一位,则

$$(a_k\cdots a_1a_0)_3=\sum_{i=0}^{k}a_i3^i,\qquad a_i\in\{-1,0,1\}$$

例如,$\displaystyle (1\bar1)_3=3-1=2$,$\displaystyle (10\bar1)_3=9-1=8$,20写成 $\displaystyle (1\bar11\bar1)_3$.四个数字分别告诉我们:27克放对面,9克放同侧,3克放对面,1克放同侧.数字0表示不用.

“平衡”指三个数字关于0对称.数字可以取负值,位权仍是3的幂.

从余数开始,就能写出每个整数

整数除以3,通常取余数0、1、2.其中余2也可以改成余 $\displaystyle -1$,只要把商加1:例如,$\displaystyle 20=3\times6+2=3\times7-1$.因此,$\displaystyle -1,0,1$ 恰好对应除以3的三种余数,任意整数 $\displaystyle N$ 都能写成

$$N=3q+r,\qquad q\in\mathbb Z,\quad r\in\{-1,0,1\}$$

当 $\displaystyle N\ne0$ 时,

$$|q|=\frac{|N-r|}{3}\le\frac{|N|+1}{3}<|N|$$

继续分解商,绝对值严格减小,有限步后必到达0.各次余数从低位到高位排好,便得到所求表示.正数、负数都适用,0直接写成0.

算20时,过程是

$$\begin{gathered} 20=3\times7-1,\quad 7=3\times2+1,\\ 2=3\times1-1,\quad 1=3\times0+1 \end{gathered}$$

余数依次为 $\displaystyle -1,1,-1,1$,倒过来读就是 $\displaystyle (1\bar11\bar1)_3$.

同一个数会不会有另一种有限写法?假设有两种不同的表示,各位数字为 $\displaystyle a_i$ 与 $\displaystyle b_i$.补齐前导零,设从低位起首次不同的是第 $\displaystyle j$ 位.两式相减,再除以 $\displaystyle 3^j$,更高位仍是3的倍数,故

$$a_j-b_j\equiv0\pmod3,\qquad a_j-b_j\in\{-2,-1,1,2\}$$

矛盾.所以,忽略前导零,每个整数恰有一种有限平衡三进制表示.

这里也能看出为什么偏偏用3.仍讨论整数的有限表示,若保留 $\displaystyle -1,0,1$ 三个数字,只把位权改为2的幂,就有 $\displaystyle (1)_2=(1\bar1)_2=1$,表示不再唯一.若把位权改为4的幂,这些数字串表示的整数模4只能同余于 $\displaystyle -1,0,1$,因此不能表示2.底数为3时,三个数字恰好各占一个余数类,不多也不少.

四位恰好覆盖−40到40

计入前导零,$\displaystyle n$ 位共有 $\displaystyle 3^n$ 种不同表示,且

$$\left|\sum_{i=0}^{n-1}a_i3^i\right|\le\sum_{i=0}^{n-1}3^i=\frac{3^n-1}{2}$$

由唯一性,这些表示互不重复;区间内的整数个数又恰为 $\displaystyle 2\times\frac{3^n-1}{2}+1=3^n$.所以,$\displaystyle n$ 位恰好表示

$$\left[-\frac{3^n-1}{2},\,\frac{3^n-1}{2}\right]\cap\mathbb Z$$

其中没有缺口.取 $\displaystyle n=4$,范围便是 $\displaystyle -40$ 到 40.

一个数的正负由最高非零位决定:若这一位权重为 $\displaystyle 3^k$,全部低位的绝对贡献至多为 $\displaystyle (3^k-1)/2<3^k$,不足以抵消最高位.因此不必另设独立符号位.

1、3、9、27为什么是最优方案

设有 $\displaystyle n$ 块正整数质量的砝码 $\displaystyle w_1\le\cdots\le w_n$,每块至多使用一次,允许放在两盘.物体放在固定的一侧,砝码放对面记为1,放同侧记为−1,不用记为0.可配平的质量满足

$$x=\sum_{i=1}^{n}\varepsilon_iw_i,\qquad \varepsilon_i\in\{-1,0,1\}$$

要求1到 $\displaystyle M$ 的每个整数质量都能一次配平.

把四块推广到 $\displaystyle n$ 块,同样需要 $\displaystyle 2M+1$ 个不同的质量差,而放置状态只有 $\displaystyle 3^n$ 种,故

$$2M+1\le3^n,\qquad M\le\frac{3^n-1}{2}$$

取 $\displaystyle w_i=3^{i-1}$ 时,前面的表示定理保证区间内每个整数都能称出,恰好达到上界.因此

$$M_{\max}=\frac{3^n-1}{2},\qquad (w_1,\ldots,w_n)=(1,3,\ldots,3^{n-1})$$

到这里,上界与构造已经配合完整:计数排除了更好的方案,平衡三进制给出了达到上界的方案.竞赛中的最值题常需要这两步,单独猜中一组重量还不够.

如果连续范围已经达到上界,砝码也只能取这组重量.此时,全部 $\displaystyle 3^n$ 个状态必须与 $\displaystyle -M,\ldots,M$ 一一对应.任何重复或区间外的结果,都会挤掉一个需要称出的整数.全取正号得到最大值,故砝码总质量为 $\displaystyle \sum_{i=1}^{n}w_i=M$.

把所有系数加 1,便有

$$\sum_{i=1}^{n}(\varepsilon_i+1)w_i=\sum_{i=1}^{n}\varepsilon_iw_i+M$$

于是,系数取 $\displaystyle 0,1,2$ 的所有组合恰好一次覆盖 $\displaystyle 0,1,\ldots,3^n-1$.这里的2只是平移后的系数,并不是允许一块砝码使用两次.这些系数均非负,要得到1,必须有 $\displaystyle w_1=1$.

前 $\displaystyle k$ 块一旦确定为 $\displaystyle 1,3,\ldots,3^{k-1}$,系数取 $\displaystyle 0,1,2$ 就恰好覆盖 $\displaystyle 0,\ldots,3^k-1$.下一块的重量

$$\begin{cases} w_{k+1}<3^k&\text{会造成重复},\\ w_{k+1}>3^k&\text{会漏掉 }3^k \end{cases}$$

只能是 $\displaystyle w_{k+1}=3^k$.如此逐块确定,得到的就是1、3、9、27…….

反过来,如果要求称到指定的 $\displaystyle M$,就取使 $\displaystyle 3^n\ge2M+1$ 成立的最小整数 $\displaystyle n$.用对数写成

$$n_{\min}=\left\lceil\log_3(2M+1)\right\rceil$$

状态数给出下界,取3的幂又能达到这个下界,因为此时 $\displaystyle (3^n-1)/2\ge M$.

不使用对数,也可以直接比较3的幂.例如,要称出1到100克,连同0与负的质量差,共需201个结果,而

$$3^4=81<201<243=3^5$$

所以至少需要五块.取1、3、9、27、81克,能够连续称到121克,足以覆盖所需范围.例如,$\displaystyle 100=81+27-9+1$.

“块数最少”和“达到这几块的最大量程”要分清.前者的方案未必唯一.只要求称出1、2、3,砝码1、2与砝码2、3都只需两块,后者用 $\displaystyle 1=3-2$.因此,“要称出1,就必须有一块1”的说法并不成立.证明最优方案唯一时,先把系数移成 $\displaystyle 0,1,2$,就是为了排除这种通过相减凑出小重量的情形.

若砝码只能放在物体对面,每块只有“用”和“不用”两种状态.全部子集至多产生 $\displaystyle 2^n$ 个结果,扣除空集对应的 0,有 $\displaystyle M+1\le2^n$.于是

$$M_{\max}=2^n-1,\qquad n_{\min}=\left\lceil\log_2(M+1)\right\rceil$$

取 $\displaystyle 1,2,4,\ldots,2^{n-1}$ 即可达到上界.称到 40,两盘放置最少四块,单盘放置最少六块.

小数也能用负数字

在小数点右边继续使用 $\displaystyle 3^{-1},3^{-2},\ldots$ 作为位权,就得到平衡三进制小数.例如

$$\frac13=(0.1)_3,\qquad \frac23=(1.\bar1)_3=1-\frac13$$

一个最简分数 $\displaystyle p/q$($\displaystyle q>0$)能写成有限平衡三进制小数,当且仅当分母只含质因子3,也允许分母为1.也就是 $\displaystyle q=3^m$,其中 $\displaystyle m$ 为非负整数.

必要性很直接:若小数点后至多有 $\displaystyle m$ 位,则 $\displaystyle 3^m(p/q)$ 为整数,故 $\displaystyle q\mid3^m$.反过来,若 $\displaystyle q=3^m$,把整数 $\displaystyle p$ 写成平衡三进制,再将小数点左移 $\displaystyle m$ 位即可.

所以 $\displaystyle 1/2$ 没有有限表示,但它有两种很整齐的无限表示:

$$\frac12=\sum_{j=1}^{\infty}3^{-j}=(0.111\ldots)_3$$

以及

$$\frac12=1-\sum_{j=1}^{\infty}3^{-j}=(1.\bar1\bar1\bar1\ldots)_3$$

这与前面的唯一性并不矛盾:前面证明的是有限表示.两个不同的有限数字串逐位相减,一定有最低非零位;无限向右延伸时,这一步未必还能做.十进制中的 $\displaystyle 1=0.999\ldots$ 也有类似现象.

负数字怎样参与计算

有了表示法,就可以按位计算.二进制的一位叫bit,三进制的一位叫trit.普通三进制使用 $\displaystyle 0,1,2$,本文采用平衡三进制,每位取 $\displaystyle -1,0,1$.

取负和移位

取相反数只需逐位反号:

$$-\sum_{i=0}^{n-1}a_i3^i=\sum_{i=0}^{n-1}(-a_i)3^i$$

也就是交换 $\displaystyle 1$ 与 $\displaystyle \bar1$,$\displaystyle 0$ 不变.减法因而可以交给加法器完成:$\displaystyle A-B=A+(-B)$.

左移一位、末尾补0,对应乘以3:

$$3(a_k\cdots a_0)_3=(a_k\cdots a_0\,0)_3$$

例如,$\displaystyle 2=(1\bar1)_3$,左移后得到 $\displaystyle 6=(1\bar10)_3$.有限字长时,结果仍可能超出表示范围,不能因为不需要独立符号位就忽略溢出.

加法与负进位

加法仍然从最低位算起.每一列接收两个数字 $\displaystyle a_i,b_i$ 和低位传来的进位 $\displaystyle c_i$,输出本位数字 $\displaystyle s_i$ 与新进位 $\displaystyle c_{i+1}$.完成这一步的电路叫全加器,它要满足

$$a_i+b_i+c_i=s_i+3c_{i+1},\qquad s_i,c_{i+1}\in\{-1,0,1\}$$

令 $\displaystyle t=a_i+b_i+c_i$,则 $\displaystyle -3\le t\le3$.本位数字与新进位可以统一写成

$$c_{i+1}=\left\lfloor\frac{t+1}{3}\right\rfloor,\qquad s_i=t-3c_{i+1}$$

三个输入各有三种取值,总共只有 $\displaystyle 3^3=27$ 种组合.可以把对应的输出预先列成表,再用逻辑门实现,不必真的按公式先做除法[1].

特别地,$\displaystyle 2=3-1$,故本位写 $\displaystyle \bar1$、进1;$\displaystyle -2=-3+1$,故本位写1、进 $\displaystyle \bar1$.例如

$$(10\bar1)_3+(1\bar1\bar1)_3=(111)_3=13$$

从低位到高位,三列计算分别为

$$\begin{aligned} (-1)+(-1)+0&=1+3(-1),\\ 0+(-1)+(-1)&=1+3(-1),\\ 1+1+(-1)&=1+3\cdot0 \end{aligned}$$

乘法则仍按分配律展开,下式各和遍历两个数的有限数位:

$$\left(\sum_{i} a_i3^i\right)\left(\sum_{j} b_j3^j\right) =\sum_{i,j}a_ib_j3^{i+j}$$

由于 $\displaystyle a_ib_j\in\{-1,0,1\}$,每个部分积只需选择“原数、零、相反数”,再移位相加.同一位上的部分积累加后仍要处理进位,并不是完全不需要算术电路.

截去低位,恰好得到最近整数

通常删去低位只是截断,平衡三进制却能同时完成舍入.把整数 $\displaystyle N$ 的最低 $\displaystyle k$ 位去掉($\displaystyle k\ge1$),剩余数字串表示 $\displaystyle Q$,则

$$N=3^kQ+R,\qquad |R|\le\frac{3^k-1}{2}$$

于是

$$\left|\frac{N}{3^k}-Q\right|\le\frac{1-3^{-k}}2<\frac12$$

所以 $\displaystyle Q$ 恰是 $\displaystyle N/3^k$ 的唯一最近整数.例如

$$8=(10\bar1)_3\ \longrightarrow\ (10)_3=3$$

去掉个位后得到3,恰是 $\displaystyle 8/3$ 的唯一最近整数.负数同样成立:$\displaystyle -8$ 去掉个位,得到 $\displaystyle -3$.这里舍入的是缩放后的数;若保留原位权,得到的就是最近的 $\displaystyle 3^k$ 的整数倍.不等式严格小于 $\displaystyle 1/2$,因此不会遇到两个整数同样近的情况.

三个数字怎样存进电路

数字 $\displaystyle -1$ 未必用负电压表示.例如,可约定低、中、高三个电压 $\displaystyle 0,V/2,V$ 依次表示 $\displaystyle -1,0,1$,设置两个分界值来识别它们.也可以用电流、磁性状态,或者用两个二进制位编码一个三值位.后一种方式可以直接在二进制机器上实现[2].

组成完整计算机时,寄存器暂存数值,存储器保存数据和指令,控制器安排取数、运算与写回.三值加法器只是其中一环;各部分还要约定字长、指令编码、溢出处理以及与外部设备的通信方式.

三值位比二值位多一种状态,能多存多少信息?仍然可以计数:$\displaystyle n$ 个三值位有 $\displaystyle 3^n$ 种状态,若用 $\displaystyle b$ 个二进制位一一编码,必须有

$$2^b\ge3^n,\qquad b\ge\left\lceil n\log_2 3\right\rceil$$

因此,每个三值位的信息容量为 $\displaystyle \log_2 3\approx1.585$ bit.这里比较的是可区分的状态数;实际编码时,若每个trit固定占用两个bit,仍要用 $\displaystyle 2n$ 位.

数位少了,实现每一位的电路却可能更复杂.例如,总电压跨度同为 $\displaystyle V$,若采用等距电平,二值的间隔为 $\displaystyle V$,三值则只有 $\displaystyle V/2$.中间状态要经得起噪声和器件差异,门电路也要能稳定连接起来.电平间隔本身不等于实际噪声容限,但足以提醒我们:数位数量并不能直接换算成芯片面积或功耗.

1958年,它已经被做成过计算机

1958年12月,莫斯科大学完成了Setun样机.它采用平衡三进制,用小型铁氧体磁芯和半导体二极管构成逻辑元件,具有存储器、指令系统和乘法运算能力.

开发者的回顾记载,Setun共生产约50台,应用于大学、研究机构和工厂.1970年推出的Setun-70采用两个栈,分别保存运算数据和程序返回信息,并把6个trit组成一个“tryte”[3].一组6位三值数字有 $\displaystyle 3^6=729$ 种状态,折合约 $\displaystyle 6\log_2 3\approx9.51$ bit的信息容量.

这些机器证明了三进制可以支撑完整计算系统.

今天为什么又有人研究三值计算

今天仍有人研究三值器件,也有人把三值数据用在现有计算机上.

2025年,《Nature Communications》的一项研究通过调节晶体管的控制电压,展示了可在二值、三值之间切换的器件及反相器[4].它解决的是如何产生、控制中间状态,尚不是一台完整计算机.

神经网络中需要反复计算加权和,其中的系数称为权重.BitNet b1.58让部分线性层的量化权重取 $\displaystyle -1,0,1$.暂时略去量化缩放因子,计算就变成

$$\sum_{i=1}^{n}w_ix_i =\sum_{w_i=1}x_i-\sum_{w_i=-1}x_i,\qquad w_i\in\{-1,0,1\}$$

乘以权重变成加、减或跳过.2025年的BitNet b1.58 2B4T报告采用三值量化权重,线性层输入采用8位整数,累加另需足够精度;报告也提供了CPU、GPU上的推理实现[5].因此,权重用了三个值,并不表示其他数据和底层电路也都改成了三进制.

截至2026年10月,官方bitnet.cpp项目已经提供二进制CPU、GPU上的相关推理实现,并扩展到嵌入模型等应用[6].三值结构在这里主要用于减少权重存储和计算开销.

三值数据已经能在二进制机器上发挥作用.从现有实现看,低比特模型和专用运算单元是较现实的近期方向;是否进一步走向通用三进制计算机,还要看整套硬件与软件能否配合.

参考资料

[1] Douglas W. Jones.Fast Ternary Addition.

[2] Douglas W. Jones.Binary Coded Ternary and Its Inverse.

[3] N. P. Brousentsov、S. P. Maslov、J. Ramil Alvarez、E. A. Zhogolev.Development of Ternary Computers at Moscow State University.

[4] Y. A. Kwon等.Reconfigurable binary and ternary logic devices enabling logic state modulation.Nature Communications,2025,16:6740.

[5] Shuming Ma等.BitNet b1.58 2B4T Technical Report.2025.

[6] Microsoft.bitnet.cpp官方项目.查阅于2026年10月31日.

留言

正常留言提交后可直接显示,无需人工审核;仍会经过防刷与垃圾内容过滤。请不要留下手机号等私人信息。解法、疑问都可以说;公式用 LaTeX:行内 $…$,整行 $$…$$。