12枚硬币称量问题——矩阵学习笔记

2024-03-22 17:10

本文主要是介绍12枚硬币称量问题——矩阵学习笔记,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

问题:有12枚硬币,至多有一枚质量不同的假币。有一座天平,有3次称量机会,解决以下问题:

      1.是否有假币?

      2.如果有假币,它的编号是多少?

      3.如果有假币,它比普通的硬币轻和重

思路:矩阵;提前设计好每一步的称量方案,先收集每次称量的结果,再用处理方法把称量结果转化成和假币有关的信息;编码+查列

核心:编码论中的校验矩阵。校验矩阵的原理:作用在一条经过编码的信息上,由校验结果能够确定其中是否有噪声引起的错误,设计得当还可以定位并纠错。在该题中,称量矩阵充当了校验矩阵,硬币的质量是输入的信息,称量结果则用来差错与纠错。

     其实硬币称量问题和平衡三进制紧密相关,虽然二者在运算细节上稍有差异,但是两个框架下的问题依然可以相互转化,答案也能够彼此借鉴。

 

1.将称量用数学来描述:用 “m1,m2,m3,……”来代表对应编号的硬币的质量,将“*(-1)“代表放在左盘,将“*1”代表放在右盘,将“0”代表不加入称量。那么一次称量可以转换为“(-1)*m1+(-1)*m2+(-1)*m3+(-1)*m4+1*m5+1*m6+1*m7+1*m8+0*m9+0*m10+0*m11

+0*m12”,改变称量方式,只需要改变相应的系数。当天平平衡,该式等于0;当天平向左倾斜,该式小于0;当天平向右倾斜,该式大于0。各项系数反映硬币的摆放情况,计算结果反映称量后天平的状态。

2.将系数整理成行向量,硬币质量整理成列向量,转换为矩阵乘法的形式。如图:

在多次称量的情况下,代表质量的列向量彼此相同,所以包含系数的行向量可以整合起来,形成一个矩阵。如图:

其中第n行对应第n次称量,第n列对应n号硬币。相应的,矩阵乘法的结果也是一个向量,第n个元素对应第n次称量的结果,”1”代表“向右倾斜”,“0”代表“平衡”,“-1“代表”向左倾斜“如图:

将左边的叫“称量矩阵“,右边的叫”结果向量“,中间的叫”质量向量“。质量向量的12个元素还可以继续拆分成两项,一项是真币的质量m,称为“标准向量”,一项是硬币的偏差值”b1,b2,b3……”,称为“偏差向量”。真币的偏差值为0,偏轻的假币的偏差值用-1表示,偏重的硬币的偏差值用1表示。最后转换为如图的形式:

用天平称量就是在“质量向量”前乘上“称量矩阵”,称量的结果就是“结果向量”。我们需要通过“称量矩阵”得到“结果向量“,再借助“结果向量”去反推“偏差向量”。

3.称量矩阵是作用在标准向量和偏差向量上的,因为m是一个未知的常数,所以标准向量处理起来比较麻烦,因此进行“归零”,也就是让称量矩阵与标准向量的乘积是零向量。根据矩阵乘法进行转换可得出如图的式子:

按照矩阵乘法要实现“归零”,需要让称量矩阵每一行元素的和是零,满足这个条件,标准向量就不再产生影响,可以去掉,得到如图的式子:

    当所有硬币是真的,那么偏差向量就是零向量,因此结果向量也始终是零向量。当某个硬币是假币时,那么它的编号所对应的偏差向量中的元素不是0,那么当称量矩阵与它作用时,只有它所对应的称量矩阵中的一列能够保留下来。假币如果偏重,那么它的编号所对应的偏差向量中的元素就是“+1“,留下来的是正的一列,同理,假如假币偏轻则是”-1“,留下来的是负的一列。所以结果总是称量矩阵的其中一列,或者是负的其中一列,加上没有假币时的零向量。一种有25种可能。

4.这样就知道了称量矩阵的要求,第一,零向量单独出现,所以称量矩阵不能出现全零的列。第二,任意两列不同,可以避免不必的额外的称量。第三,任意两列的和不为零向量,因为假如-a列与b列相同,那么假币为b列所对应的硬币且假币偏重时,无法判断假币究竟是偏轻的a币还是偏重的b币。满足这三个条件,可以保证25个结果向量必然不同,也就能实现从结果反推偏差的初衷了。

   除此之外,还要额外加两个条件:第四,称量矩阵本身的元素只能是-1、0或1;第五,每一行的元素和为0(为了实现“归零“以此消掉m)。同时满足五个条件,称量矩阵就是合适的,可以实现通过结果去反推偏差的需求。

然后就可以设计称量矩阵了,先排列出满足“元素只能是-1、0或1“的要求的列,除去零向量,还剩26列。将26列分为两组,每一组的两个向量的和为零向量,每一组最多只选1个向量作为列就可以满足“任意两列的和不为零向量”的条件。可以通过修改挑选的组(选出13列,只需12列,多出一列)和每组挑选的向量来解决“每一行的和为0”的条件。首先让第一行的和为0,然后在保证第一行和不变的条件下调整第二行的和为0,以此类推。

5.在经过计算后,由得出的“结果向量“去“称量矩阵“找到对应的列或对应的负的列,该列的编号就是假币的编号。如图,得到的结果向量是负的第5列,所以5号是偏轻的假币。

如果得到的是零向量,那么硬币都是真的。

这篇关于12枚硬币称量问题——矩阵学习笔记的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/835771

相关文章

线上Java OOM问题定位与解决方案超详细解析

《线上JavaOOM问题定位与解决方案超详细解析》OOM是JVM抛出的错误,表示内存分配失败,:本文主要介绍线上JavaOOM问题定位与解决方案的相关资料,文中通过代码介绍的非常详细,需要的朋... 目录一、OOM问题核心认知1.1 OOM定义与技术定位1.2 OOM常见类型及技术特征二、OOM问题定位工具

Vue3绑定props默认值问题

《Vue3绑定props默认值问题》使用Vue3的defineProps配合TypeScript的interface定义props类型,并通过withDefaults设置默认值,使组件能安全访问传入的... 目录前言步骤步骤1:使用 defineProps 定义 Props步骤2:设置默认值总结前言使用T

Web服务器-Nginx-高并发问题

《Web服务器-Nginx-高并发问题》Nginx通过事件驱动、I/O多路复用和异步非阻塞技术高效处理高并发,结合动静分离和限流策略,提升性能与稳定性... 目录前言一、架构1. 原生多进程架构2. 事件驱动模型3. IO多路复用4. 异步非阻塞 I/O5. Nginx高并发配置实战二、动静分离1. 职责2

解决升级JDK报错:module java.base does not“opens java.lang.reflect“to unnamed module问题

《解决升级JDK报错:modulejava.basedoesnot“opensjava.lang.reflect“tounnamedmodule问题》SpringBoot启动错误源于Jav... 目录问题描述原因分析解决方案总结问题描述启动sprintboot时报以下错误原因分析编程异js常是由Ja

MySQL 表空却 ibd 文件过大的问题及解决方法

《MySQL表空却ibd文件过大的问题及解决方法》本文给大家介绍MySQL表空却ibd文件过大的问题及解决方法,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考... 目录一、问题背景:表空却 “吃满” 磁盘的怪事二、问题复现:一步步编程还原异常场景1. 准备测试源表与数据

解决Nginx启动报错Job for nginx.service failed because the control process exited with error code问题

《解决Nginx启动报错Jobfornginx.servicefailedbecausethecontrolprocessexitedwitherrorcode问题》Nginx启... 目录一、报错如下二、解决原因三、解决方式总结一、报错如下Job for nginx.service failed bec

SysMain服务可以关吗? 解决SysMain服务导致的高CPU使用率问题

《SysMain服务可以关吗?解决SysMain服务导致的高CPU使用率问题》SysMain服务是超级预读取,该服务会记录您打开应用程序的模式,并预先将它们加载到内存中以节省时间,但它可能占用大量... 在使用电脑的过程中,CPU使用率居高不下是许多用户都遇到过的问题,其中名为SysMain的服务往往是罪魁

Unity新手入门学习殿堂级知识详细讲解(图文)

《Unity新手入门学习殿堂级知识详细讲解(图文)》Unity是一款跨平台游戏引擎,支持2D/3D及VR/AR开发,核心功能模块包括图形、音频、物理等,通过可视化编辑器与脚本扩展实现开发,项目结构含A... 目录入门概述什么是 UnityUnity引擎基础认知编辑器核心操作Unity 编辑器项目模式分类工程

MySQ中出现幻读问题的解决过程

《MySQ中出现幻读问题的解决过程》文章解析MySQLInnoDB通过MVCC与间隙锁机制在可重复读隔离级别下解决幻读,确保事务一致性,同时指出性能影响及乐观锁等替代方案,帮助开发者优化数据库应用... 目录一、幻读的准确定义与核心特征幻读 vs 不可重复读二、mysql隔离级别深度解析各隔离级别的实现差异

C++ vector越界问题的完整解决方案

《C++vector越界问题的完整解决方案》在C++开发中,std::vector作为最常用的动态数组容器,其便捷性与性能优势使其成为处理可变长度数据的首选,然而,数组越界访问始终是威胁程序稳定性的... 目录引言一、vector越界的底层原理与危害1.1 越界访问的本质原因1.2 越界访问的实际危害二、基