称球问题解析(2)-N球方法

本文介绍了使用三进制编码方法解决寻找一个质量异常的小球的问题,其中涉及将小球分为三组进行称量。通过三进制正序数和逆序数的特性,可以确定异常球及其重量状态。对于不能被3整除的小球数量,通过三元组的概念保证称量的平衡。这种方法可以有效减少称量次数,如2次最多可称3个球,3次最多可称12个球等。此外,还讨论了如何处理无法被3整除的情况以及一些问题的变体。
摘要由CSDN通过智能技术生成

作者: Phill King

邮箱: phillking1982@163.com

原创文章,转载请注明出处。

有N个外表一模一样的小球,除了有一个小球略轻或略重,其他的小球质量都是一样的。求用没砝码的天秤最少称多少次,才能找出的异常球,并且知道它是更轻还是更重?

本文介绍一种三进制(Ternary)编码的方法来解决任意数目的称球问题。

通常我们对二进制编码更为熟悉,二进制编码由0,1构成。而三进制编码由0,1,2构成。

我们先引入三进制正序数和逆序数的概念:

正序数:

  从左到右第一次变化是0->1, 1->2, 2->0。 如010,201等。

逆序数:

  从左到右第一次变化和正序数相反: 1->0, 2->1, 0->2。 如100,211等。

性质:

1. 正序数的 3 进制补码为逆序数: 001  <=>   221
2. 正序数和逆序数在 ( 0 - 3^{n} ) 范围内对称,且数目一样多
3. 本文 我们用正序数代表小球更重,逆序数代表小球更轻。

对于每一轮的称量,我们都将N个小球分成三组。同时给每个小球两个三进制编码。以12个小球为例:

第i论的称量规则:

第i次称,根据编码第i位的数值决定放置位置。0 放在左边,2放在右边。1不称。

假设六号小球是异常球:

 那么根据我们的称量规则,可以根据每一轮的结果获取异常球的三进制编码。

假设6号球更重,简单分析一下过程:

1. 第一轮:6号球编码是120.第一位是1,所以放在旁边不称。第一轮的结果是平衡,记录1.

2. 第二轮:6号球第二位编码是2,放在天平的右边。6号球更重,第二轮结果是左边轻,记录2

 3.第三轮:6号球第三位编码是0,放在左边。第三轮结果是左边重,记录0.

结果的编码是120,和6号球的正序数编码是一样的。如果6号球偏轻,结果是102和6号球的逆序数编码是一样的。

以上分析了12球的情况,那如果球的数目不能被3整除的时候。应该怎么做呢?

我们再引入三元组的概念:

三元组:

编码的每一位进行 0->1, 1->2, 2->0 转换 , 三个为一组 例如 : 012->120->201
同一个三元组的元素根据规则永远都会分配到不同的位置
我们利用三元组确保每次称球的平衡
例子 : 012->120->201

 结合三元组的分配规则如下:

1. 当总数能够被 3 整除时,按照三元组分配
2. 如果不能够被 3 整除时,为了保持第一次称球时的平衡 :
1. 如果剩余一个球,分配 1 开头的编码。第一次不称。
2. 如果剩余两个球,分别分配 0 2 开头的编码。第一次分别放在左右。

                后续出现称球不平衡时,用第一次称后已知的正常球补足。

下面以8个球为例:

 编码方案:

 具体过程:

 ###代表已知的正常球。第一轮至少可以获知两个正常球。通常我们只需要一个来保证天平两侧的平衡即可。这里仍然以6号球为例分析,读者可以自行假设一个异常球,根据其编码进行分析。

接下去我们分析一下使用该方法测量N个球的最少次数:

假设一共测n轮:

  1. n和三进制的长度一样
  2. 不能使用的编码(备注:在称球问题的一些变体中可以使用这些编码):
    1. 全1编码。如果一直不称量,无法知道其轻重
    2. 全0和全2编码。如果000和222代表同一个球,无法确定放在哪一边。

n位三进制的总数位3^{n},每个球需要两个编码。 所以我们一共可以测: \frac{3^{n} - 3}{2} 个球。

综上,我们可以确定对于jN个球称量的通用方法:

1. 通过公式 \frac{3^{n}-3}{2} >= N 确定称球次数 n ,将 n 作为三进制的位数

2. 构造 n 位三进制的正逆序三元组编码
3. 给每一球分配一对编码(正序和逆序)
4. 当总数不能被 3 整除时,需要处理多余的球
1. 如果多 1 个,分配 1 开头的编码。后续左右数目不平时用已知正常球补足
2. 如果多 2 个,分配 0 2 开头的编码。后续左右数目不平时用已知正常球补足
5. 每一轮根据编码对应位的值放置小球,并记录结果

结果编码所对应的小球即为异常球,并可根据编码的正逆序获知轻重。

根据公式可以推论称量次数和小球数目的关系:

1.2次最多3个小球

2.3次最多12个小球

3.4次最多39个小球

4.5次最多120个小球

扩展问题:

针对一些称球问题的变体,仍然可以用三进制编码方法来解决。

  1. 假如不需要知道异常球的轻重,可测  \frac{3^{n} - 1}{2}
    1. 增加一个球,编码为全1.  有且仅有一种情况无法知道轻重。
  2. 假如另外有一个已知正常球(不计算在可测球数内),可测 \frac{3^{n} - 1}{2}  
    1. 选一球编码为全0和全2, 始终放在左侧。额外正常球不编码,第一次放在右侧平衡。
  3. 结合1&2\frac{3^{n} + 1}{2}

总结:

本文介绍了用三进制(Ternary)编码方法解决称球问题的方案。下一篇文章会提供一个称球问题公式的证明:n次称量,最多可以测 \frac{3^{n} - 3}{2}个球。

称球问题解析(3) - 公式证明_Phill.King的博客-CSDN博客

  • 2
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值