十二个小球称重问题及其Python实现

python小球方案问题_十二个小球称重问题及其Python实现 一、问题描述在12个外观完全相同的小球中,有一个与其它球重量不同。如何只用一架天平找到这个球并判断它比其它球轻还是重?最少需要称几次?39个球呢?二、问题分析这是一个很经典的信息论问题,最开始的思路是用分组称重的方法,发现每次测量的次数不固定,而且当球数增多时称重次数会明显增加,所以不是次数最优的方法,于是参考了网上编码的方法并做了一点调整。一共有12个小球,每个小球都可能偏轻或偏重,共有24种可... 阅读详情
一、问题描述

  在12个外观完全相同的小球中,有一个与其它球重量不同。如何只用一架天平找到这个球并判断它比其它球轻还是重?最少需要称几次?39个球呢?

二、问题分析

  这是一个很经典的信息论问题,最开始的思路是用分组称重的方法,发现每次测量的次数不固定,而且当球数增多时称重次数会明显增加,所以不是次数最优的方法,于是参考了网上编码的方法并做了一点调整。
  一共有12个小球,每个小球都可能偏轻或偏重,共有24种可能,其信息量为 log224≈4.58bit l o g 2 ⁡ 24 ≈ 4.58 b i t 。利用天平进行称重,天平每次显示结果可能为左倾、右倾或平衡三种,假如出现每种情况的概率相同,则每次称重结果的信息量为 log23≈1.58bit l o g 2 ⁡ 3 ≈ 1.58 b i t 。 4.58bit1.58bit≈3 4.58 b i t 1.58 b i t ≈ 3 ,所以理论上3次称重可以找出质量不同的球并判断出它是偏轻还是偏重。
  根据文献The Problem of the Pennies, F. J. Dyson, The Mathematical Gazette , Vol. 30, No. 291 (Oct., 1946), pp. 231-234 的证明可知,N次称重最多可以从 3N−32 3 N − 3 2 个小球中找出不同的球,当N=3时可以判断12个小球的质量。

三、算法设计

  要以最少次数称重得到结果,则每次称重应获取尽可能多的信息,也就是每次天平称重结果都应包含左倾、右倾、平衡三种可能的情况。于是称重时小球应该分为三堆,特殊小球随机分布于其中一堆,选择两堆置于天平两侧。对此,可以将每个小球进行编码,每次称重时根据编码选择三分之二的小球,对称重结果进行记录,并根据每次称重结果,找出异常小球,

3.1 编码要求

  由于天平结果有三种,我们选择 ‘0’,‘1’,‘2’ 三种字符对小球进行编码,12个小球三次可以测出,因此每个小球由三位编码构成,编码应满足以下三个条件:

  • 编码互不相同;
    保证编码唯一性,每个编码对应唯一小球。
  • 编码每一位均含有4个‘0’,‘1’,‘2’;
    例如12个小球对应12个编码,这12个编码的第一位中‘0’,‘1’,‘2’各出现四次,第二第三位同理。目的是为了保证每次称重小球均分为三份。
  • 每个小球编码对其中的‘0’,‘1’同时取反后,反编码不存在于已编好的序列中。
    取反指编码中的‘0’变为‘1’,‘1’变为‘0’。结合前两条,该条件可以保证每个小球至少上一次天平,同时保证根据结果能够正确找出异常小球。

下一节将具体介绍这样编码的原因,以及利用这些编码称重的过程。

3.2 称重方法

  每次称重天平结果有左倾、右倾、平衡三种,因此需要三种字符对小球进行编码,这里使用 ‘0’,‘1’,‘2’ ;12个球需要称重三次,则每个编码用三位字符表示。根据小球编码判断每次称重时该小球的位置。第 i i 次称重,选择编码第 i 位为‘0’的小球置于左盘,第 i i 位为‘1’的小球置于右盘,记录天平结果并生成结果序列,为了保证每次称重左右两盘球数相同,编码序列每一位应均包含相同个个数的‘0’,‘1’,‘2’。我们用 h e a v y 表示重球序列, light l i g h t 表示轻球序列,序列生成规则如下:

天平结果 可能原因 处理方式
左倾 左盘含有重球 heavyi
R语言灰色关联分析法 输入数据并用DT包的datatable函数展示数据 ABDDEF分别对应第1到第6个供应商产品质量、技术水平、供应能力、经济效益、交货情况、市场影响度指标属于效益型指 产品价格、地理位置、售后服务指标属于成本型指标。现分别对上述指标进行规范化: 对于效益型指标(正项指标)标准化公式为: x∗=x−min(x)max(x)−min(x) x^{\ast}=\frac{x-min\left( x \right)}{max\left( x \right) -min\left( x \right)} x∗=max 阅读详情

相关推荐

告别里程焦虑:手把手教你用MATLAB/Simulink仿真电动车AMT换挡规律(附代码)

本文详细介绍了如何使用MATLAB/Simulink仿真电动车AMT换挡规律,帮助解决里程焦虑问题。通过搭建完整的仿真系统,包括电机MAP图处理、Stateflow逻辑实现和动力性与经济性换挡曲线生成,优化电动车换挡策略以提升续航与性能。附带的代码示例和实用技巧使开发者能够快速上手并验证仿真结果。

weixin_26757925的博客 306

Spring Boot 3.2 集成 Shiro 2.0.1 踩坑实录:从 javax.servlet 到 jakarta.servlet 的完整迁移指南

本文详细介绍了Spring Boot 3.2集成Shiro 2.0.1时遇到的从javax.servlet到jakarta.servlet的迁移问题,提供了完整的解决方案和迁移指南。通过Maven依赖配置和代码调整,帮助开发者顺利跨越Jakarta EE的兼容性鸿沟,确保Shiro权限控制在Spring Boot 3.2环境中正常运行。

weixin_42570296的博客 484

项目经理面试 5 大高频题 + 实战回答模板,帮你稳拿 offer

项目经理面试5大高频问题及应答技巧 摘要:本文总结了项目经理岗位常见的5个面试问题及回答策略,帮助求职者更有针对性地准备面试。核心问题包括:1)描述负责过的典型项目;2)常用项目管理工具;3)项目遇到的挑战及解决方案;4)风险管理方法;5)项目成功标准。每个问题都从面试官考察重点、回答技巧、实战案例三个维度进行分析,强调要用STAR法则(情境-任务-行动-结果)结构化表达,突出解决问题的能力而非简单罗列经历。特别提醒要量化项目成果(如提前2周上线、节省8%预算等),并注意展示商业思维和团队协作能力。

逸尘谈PM 2105

Anroid8.1 强制修改系统可以adb remount

在Android6.0 (Android M)user版本上,发现使用adb root后再adb remount系统之后会提示这样信息:remount of /system failed: Read-only file system,这是不能对system分区进行操作,提示没有写权限,为只读文件系统Read-only file system,因为系统本身在user就不支持可写操作,我们就不能adb push来调试apk,如果想调试apk就需要修改system、vendor权限问题。 如下现象: C:\Use

wq892373445的博客 1408

CS224W图神经网络实战:如何用Motifs和Graphlets分析社交网络结构?

本文基于斯坦福CS224W课程,深入探讨了如何利用网络模体(Motifs)和图元(Graphlets)分析社交网络的微观结构。通过实战代码演示,文章介绍了如何识别具有统计显著性的关键连接模式,计算节点的图元度向量以刻画局部拓扑特征,并将这些结构洞见应用于社区发现、影响力分析及图神经网络的节点特征工程,从而提升模型在虚假账号检测等任务中的性能。

2w3e4r5t6y的博客 911

《数学建模与数学实验》第5版 线性规划 习题3.4

1. 某鸡场有1000只鸡,用动物饲料和谷物混合喂养. 2. 某工厂用A1,A2两台机床加工B1,B2,B3三种不同零件. 3. 某工厂利用两种原料甲、乙生产$A_1、A_2、A_3$三种产品. 4. 每班的护士在值班开始时向病房报到,连续工作8个小时. 5. 某工厂生产 A1 、A2 两种型号的产品 6. 有两个煤厂A,B 7. 某工厂制造三种产品,生产这三种产品需要三种资源 8. 已知某工厂计划生产1,2,3三种产品,各产品需要在ABC设备加工。...

hexiaosi_的博客 2万+

200、从零搭建具身智能实验平台:硬件选型软件栈与调试

我一开始图便宜,3D打印了一个平行夹爪,结果抓取力不够,稍微重点的物体就滑落,而且开合控制延迟大,VLA模型输出的动作指令根本跟不上。如果你非要自己做,记住两个原则:一是用谐波减速器而不是直驱,二是加力传感器,哪怕是一个简单的电阻应变片也行——没有力反馈,你的夹爪就是个瞎子。我的建议是,如果你用的是UR5老款,ROS1的ur_modern_driver包更成熟,但如果你要跑最新的VLA框架,很多库已经不支持ROS1了。所以,保持耐心,多备份代码,多记录日志,少熬夜。毕竟,这条路上,我们都是摸着石头过河。

sundong_81的博客 39

GPFS扩展技术原理(十一)-FMDN广播与EID加解密

GFPS扩展技术原理(十一)FMDN广播及EID加解密

十多年蓝牙协议软件开发,擅长蓝牙协议分析 935

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

上一篇: 用JabRef生成Latex参考文献
Vincent_Wu_
博客等级 码龄12年 47粉丝 9原创
评论 8
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值