【算法基础】平衡三进制(Balanced Ternary)

本文介绍了平衡三进制系统,其每位数字可为-1,0,或1,用Z替代-1。文章详细阐述了如何通过普通三进制转换到平衡三进制,以及两个示例展示了转换过程。
摘要由CSDN通过智能技术生成

本文为翻译文章
原文链接 :https://cp-algorithms.com/algebra/balanced-ternary.html

平衡三进制(Balanced Ternary)

在这里插入图片描述

介绍

这是一个不太标准的数字符号系统(numeral system)。它的特点是每一位数字可以是-1, 01。它是一个基于三进制的数字符号系统。因为使用-1来作为一个数字不太方便,我们接下来会使用字母Z来代替-1。图片里展示的是一台使用这种系统的计算机。

下面是一些使用这种平衡三进制来表示的数字:

    0    0
    1    1
    2    1Z
    3    10
    4    11
    5    1ZZ
    6    1Z0
    7    1Z1
    8    10Z
    9    100

这种符号系统允许你在书写符号的时候不使用前置的负号:在将正数转换成负数时,你需要将每一位数字转置( 1变成ZZ变成1)。

    -1   Z
    -2   Z1
    -3   Z0
    -4   ZZ
    -5   Z11

注意到,负数都是Z开头,正数都是1开头。

转换算法

通过将一个给定的数转换成普通的三进制形式,我们很容易将它表示成平衡三进制的形式。当一个数以三进制的形式表示时,它的每一位都是0, 1, 2中的一个数。要将它转换成平衡三进制,我们从低位开始,如果遇到了01,那么这一位保持不变,如果遇到数字2,那么将1变成Z,并且让下一位加1。如果加1后变成了数字33应该变成0,并且下一位要加1

例1:将64转换成平衡三进制。首先我们先将64写成普通的三进制数形式:
6 4 10 = 0210 1 3 64_{10} = 02101_{3} 6410=021013
我们从最右边一位开始处理:

  • 101被跳过,保持不变。
  • 2被转换成Z并且左边以为加1,我们得到了1Z101

最终的结果是1Z101
我们通过把每一位的权重加起来把它转换成普通的10进制数字:
1 Z 101 = 81 ⋅ 1 + 27 ⋅ ( − 1 ) + 9 ⋅ 1 + 3 ⋅ 0 + 1 ⋅ 1 = 6 4 10 1Z101 = 81 \cdot 1 + 27 \cdot (-1) + 9 \cdot 1 + 3 \cdot 0 + 1 \cdot 1 = 64_{10} 1Z101=811+27(1)+91+30+11=6410
例2:将237平衡三进制。首先我们先将237写成普通的三进制数形式:
23 7 10 = 222103 237_{10} = 22210{3} 23710=222103
我们从最右边一位开始处理:

  • 01被跳过,保持不变。
  • 2被转换成Z,左边一位加1,我们得到了23Z10
  • 3被转换成0,左边一位加1,我们得到了30Z10
  • 3被转换成0,左边以为加1,我们得到了100Z10

最终的结果是100Z10
我们将它转换成普通的10进制数字:
10 Z 10 = 243 ⋅ 1 + 81 ⋅ 0 + 27 ⋅ 0 + 9 ⋅ ( − 1 ) + 3 ⋅ 1 + 1 ⋅ 0 = 27 3 10 10Z10 = 243 \cdot 1 + 81 \cdot 0 + 27 \cdot 0 + 9 \cdot (-1) + 3 \cdot 1 + 1 \cdot 0 = 273_{10} 10Z10=2431+810+270+9(1)+31+10=27310

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值