平衡三进制

定义

平衡三进制,也称为对称三进制.这是一个广义进位系统.

正规的三进制的数字都是由 0,1,2 构成的,而平衡三进制的数字是由 -1,0,1 构成的.它的基数也是 3(因为有三个可能的值).由于将 -1 写成数字不方便,我们将使用字母 Z 来代替 -1.

解释

这里有几个例子:

十进制平衡三进制十进制平衡三进制
0051ZZ
1161Z0
21Z71Z1
310810Z
4119100

该数字系统的负数表示起来很容易:只需要将正数的数字倒转即可(Z 变成 1,1 变成 Z).

十进制平衡三进制
-1Z
-2Z1
-3Z0
-4ZZ
-5Z11

很容易就可以看到,负数最高位是 Z,正数最高位是 1.

过程

在平衡三进制的转转换法中,需要先写出一个给定的数 x 在标准三进制中的表示.当 x 是用标准三进制表示时,其数字的每一位都是 0、1 或 2.从最低的数字开始迭代,我们可以先跳过任何的 0 和 1,但是如果遇到 2 就应该先将其变成 Z,下一位数字再加上 1.而遇到数字 3 则应该转换为 0 下一位数字再加上 1.

应用一

把 64 转换成平衡三进制.

首先,我们用标准三进制数来重写这个数:

6410=021013\text 64_{10} = 02101_3

让我们从对整个数影响最小的数字(最低位)进行处理:

  • 101 被跳过(因为在平衡三进制中允许 0 和 1);
  • 2 变成了 Z,它左边的数字加 1,得到 1Z101;
  • 1 被跳过,得到 1Z101.

最终的结果是 1Z101.

我们再把它转换回十进制:

1Z101=81×1+27×(−1)+9×1+3×0+1×1=6410\texttt {1Z101}=81 \times 1 +27 \times (-1) + 9 \times 1 + 3 \times 0 + 1 \times 1 = 64_{10}

应用二

把 237 转换成平衡三进制.

首先,我们用标准三进制数来重写这个数:

23710=222103\text 237_{10} = 22210_3
  • 0 和 1 被跳过(因为在平衡三进制中允许 0 和 1);
  • 2 变成 Z,左边的数字加 1,得到 23Z10;
  • 3 变成 0,左边的数字加 1,得到 30Z10;
  • 3 变成 0,左边的数字(默认是 0)加 1,得到 100Z10;
  • 1 被跳过,得到 100Z10.

最终的结果是 100Z10.

我们再把它转换回十进制:

100Z10=243⋅1+81⋅0+27⋅0+9⋅(−1)+3⋅1+1⋅0=23710\mathtt{100Z10} = 243 \cdot 1 + 81 \cdot 0 + 27 \cdot 0 + 9 \cdot (-1) + 3 \cdot 1 + 1 \cdot 0 = 237_{10}

性质

对于一个平衡三进制数 X3X_3 来说,其可以按照每一位 xix_i 乘上对应的权值 3i3^i 来唯一得到一个十进制数 Y10Y_{10}.

那对于一个十进制数 Y10Y_{10},是否 唯一对应一个平衡三进制数 呢?

答案是肯定的,这种性质被叫做平衡三进制的唯一性.

证明

我们利用 反证法 来求证:

假设一个十进制数 Y10Y_{10},存在两个 不同的平衡三进制数 A3,B3A_3,B_3 转化成十进制时等于 Y10Y_{10},即证 A3=B3A_3 = B_3.分情况讨论:

  1. 当 Y10=0Y_{10}=0,显然 A3=B3=03A_3 = B_3 = 0_3,与假设矛盾.

  2. 当 Y10>0Y_{10}>0:

    • 将 A3A_3,B3B_3 的数位按低位到高位编号,记 aia_i 为 A3A_3 的第 ii 位,bib_i 为 BB 的第 ii 位.在 A3,B3A_3,B_3 中,必存在 ii 使得 ai≠bia_i\neq b_i.可以发现第 i−1,i−2,…,0i-1,i-2,\dots,0 位均与证明无关.因此,将 A3,B3A_3,B_3 按位右移 ii 位,得到 A3′,B3′A_3',B_3',原问题等价于证明 A3′=B3′A_3'=B_3'.
    • 对于 A3′,B3′A_3',B_3' 第 00 位,a0≠b0a_0 \neq b_0.假设 b0>a0b_0 > a_0(a0>b0a_0>b_0 时结果相同),易知 b0−a0∈{1,2}b_0 - a_0 \in \{1,2\}.A3′A_3' 的位 i=1,2,3,…i=1,2,3,\dots 对于 A3′A_3' 的值的贡献为 S1=a1×31+a2×32+…S_1 = a_1 \times 3^1 + a_2 \times 3^2+ \dots,B3′B_3' 的位 i=1,2,3,…i=1,2,3,\dots 对于 B3′B_3' 的值的贡献为 S2=b1×31+b2×32+…S_2 = b_1 \times 3^1 + b_2 \times 3^2 + \dots.由于 A3′=B3′A_3' = B_3',得 S1−S2=b0−a0S_1 - S_2 = b_0 - a_0.S1,S2S_1,S_2 有公因子 33,而 b0−a0b_0 - a_0 不能被 33 整除,与假设矛盾,因此 A3′≠B3′A_3'\neq B_3'
  3. 当 Y10<0Y_{10}<0,证法与 Y10>0Y_{10}>0 相同.

故对于任意十进制 Y10Y_{10},均有唯一对应的平衡三进制 X3X_3.

练习题

Topcoder SRM 604 PowerOfThree

本页面部分内容译自博文 Троичная сбалансированная система счисления 与其英文翻译版 Balanced Ternary.其中俄文版版权协议为 Public Domain + Leave a Link;英文版版权协议为 CC-BY-SA 4.0.

本文内容来自 OI Wiki《平衡三进制》;作者与修订历史见原文。AIOJ 对排版、站内链接和资源路径做了格式适配。

内容依 CC BY-SA 4.0 与 SATA 许可共享;附加条款以原文声明为准。感谢 OI Wiki 作者与贡献者;请按 SATA 约定前往 OI Wiki 仓库 Star 支持。