matlab最小字典序,12小球称重问题 完美解决方案(转自 skywind.name)

网上 有好几种 解决方案,skywind.name上的这个最棒, 赞一下!

可惜 偶 苦思冥想 3 个小时,思路换了3、4种,也没找到完美解决方案。

以下 是 转自 skywind.name

12个小球称重问题的完美解法

先看答案,设小球编号分别从A到L,不管每次的结果如何(没有条件分支),如下比较三次:

A B C D === E F G H

A H I K === C D E J

C G I L === A D F K

我们将天平左侧重称为结果1;右侧重为结果-1;平衡为结果0。显然,如果上面三次比较的结果为1,1,-1,则A是坏的,并且比较重。如果结果是-1,0,0,则B比较重。我们还能得出一个额外的解,就是三次都平衡,则没有错误的小球。

所有球比较重的情况列表如下,将结果取反就是轻球的情况。可以看出,每个小球是否轻重都有且只有一种结果状态相对应。

A B C D E F G H I J K L

1 1 1 1 -1 -1 -1 -1 0 0 0 0

1 0 -1 -1 -1 0 0 1 1 -1 1 0

-1 0 1 -1 0 -1 1 0 1 0 -1 1

那么这个表是如何来的呢?能不能有其他本质上不同(不是这个次序的重排列)的类似方案呢?

先说怎么作这个表,将每一竖列看做一个向量,向量的每个分量可能取值为-1,0,1;按字典序取12个排在(000)后面的向量就是:

A B C D E F G H I J K L

0 0 0 0 1 1 1 1 1 1 1 1

0 1 1 1 -1 -1 -1 0 0 0 1 1

1 -1 0 1 -1 0 1 -1 0 1 -1 0

检查每一行,要求-1和1的数目相同,如果不能满足,则将某个1或-1取反。第三行自然满足,第二行可以把C的1改成-1,第一行可以更改F、H、J、L的值来达到目的。修改后的矩阵如下:

A B C D E F G H I J K L

0 0 0 0 1 -1 1 -1 1 -1 1 -1

0 1 -1 1 -1 -1 -1 0 0 0 1 1

1 -1 0 1 -1 0 1 -1 0 1 -1 0

这个结果与前面看起来不同,但实质一样。另外,通过这种方式也可以看出,3次天平称量13个小球问题是无解的。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值