導讀: 12個外表同樣的小球 其中11個球重量相同 1個球爲[異常球] 可能重量比較重也可能比較輕 如何利用天平稱重3次來找出這個[異常球]?
git
本文做者爲 簡書-melo的微博 / 掘金-melo的微博 / Github-meloalright
轉載請註明出處哦。github
稱球問題是一個經典的數學問題
理論上稱球問題只要球的數量小於等於 (3^n − 3)/2 就必定可解
spa
維基百科的解釋以下:
.net
稱球問題 是指若在最多 (3^n − 3)/2 個球中有一個特殊球的重量不同凡響(不知道偏重仍是偏輕)
而其餘球的重量所有相同 則用無砝碼的天平稱n次能夠找出特殊球 並肯定特殊球是偏輕仍是偏重
若是有 (3^n − 1)/2 個球 則一樣能夠保證找出特殊球 但不必定能肯定特殊球是偏輕仍是偏重
3d
1.分三組 {A1, A2, A3, A4} {A5, A6, A7, A8} {A9, A10, A11, A12}
code
2.前兩組稱重 {A1, A2, A3, A4} --- {A5, A6, A7, A8}
blog
狀況1: 左邊重
(ps:證實[異常球]在前兩組8個球裏 多是第一組有球異常重-或者第二組有球異常輕)
ip
狀況2: 右邊重
(ps:證實[異常球]在前兩組8個球裏 多是第一組有球異常輕-或者第二組有球異常重)
文檔
狀況3: 平衡
(ps:證實[異常球]在第三組4個球裏)
get
ps:若是[平衡]那就好說了 證實[異常球]在第三組的四個球{A9, A10, A11, A12}裏 這種狀況咱們稍後再作分析
ps:下面先介紹未平衡的複雜狀況 以[狀況1左邊重]舉例
0.聲明: {A9, A10, A11, A12}都是[無辜球] 由於第一步已經確認[異常球]在前兩組
1.爲前兩組引入1個[無辜球]來分組 {A1, A2, A3, A4, A5, A6, A7, A8, 無辜} 如今有9個球
2.再把9個球再分三組
# 這裏分組方法比較複雜
>>> 此次3組的分組方式首先爲
''' {A1, A2, A3} {A5, A6, 無辜} ----- / | \ / | \ {A1, A2, A3, A4, A5, A6, A7, A8, 無辜} \ | / --------{A4, A7, A8} '''
>>> 咱們看到[原先的第一組]去掉了{A4} [原先的第二組]去掉了{A7}{A8}
>>> 去掉的這3個球組成了第三組{A4, A7, A8}
>>> 第二組則補上了一個[無辜球]
>>> 目前獲得的3個分組爲
>>> {A1, A2, A3}
>>> {A5, A6, 無辜}
>>> {A4, A7, A8}
>>> 而後再讓前兩組的{A2}和{A6}互相交換
>>> 咱們稱之爲[叛變球]
''' {A1, A2, A3} ^| |v {A5, A6, 無辜} '''
>>> 最終的3個分組爲
>>> {A1, A6, A3}
>>> {A5, A2, 無辜}
>>> {A4, A7, A8}
複製代碼
3.把前兩組稱重 {A1, A6, A3} --- {A5, A2, 無辜}
狀況1: 發生反轉 右邊重
(ps:證實[異常球]還在前兩組中 並且就在[叛變球]-{A2}和{A6}中)
狀況2: 仍是 左邊重
(ps:證實[異常球]還在前兩組中 並且在這兩次稱重都沒動位置的{A1}{A3}{A5}中)
狀況3: 平衡
(ps:證實[異常球]在第三組{A4, A7, A8}中)
ps:若是是[發生反轉]那就好說了 證實異常球在[叛變球]-{A2}和{A6}中 這種狀況咱們稍後再作分析
ps:若是是[左邊重] 證實了相比[第一次稱重結果] 去掉{A4, A7, A8}和叛變{A2}與{A6}都不能改變左邊重的這個結果 因此異常球必定在這兩次稱重都沒動位置的{A1}{A3}{A5}中 必定是{A1}{A3}其中一個異常重-或者{A5}異常輕
ps:[左邊重]和[平衡]的接下來處理方案實際上是思路同樣的 咱們以[狀況2左邊重]爲舉例繼續
0.聲明:異常球必定在{A1}{A3}{A5}中 必定是{A1}{A3}其中一個異常重-或者{A5}異常輕
1.直接{A1}和{A3}互相稱重一下
狀況1: {A1}重
(ps:答案已找到 => {A1}是異常球 重量異常重)
狀況2: {A3}重
(ps:答案已找到 => {A3}是異常球 重量異常重)
狀況3: 平衡
(ps:答案已找到 => {A5}是異常球 重量異常輕)
ps:答案已找到
2.2-本文在[第一次稱重]未詳細分析的[狀況2右邊重]狀況一樣能夠以同一思路解決
2.3-本文在[第一次稱重]未詳細分析的[狀況3平衡]狀況 可得知[異常球]在{A9, A10, A11, A12}當中 能夠在[第二次稱重]將{A9, A10}與{A11, 無辜}互相稱重 若[平衡]就好說了 直接得知[異常球]是{A12} 若[左邊重]則可能{A9, A10}存在[異常球]且異常重-或{A11}爲異常球且異常輕 接下來[第三次稱重]以上文同一思路解決便可
3.1-本文在[第二次稱重]未詳細分析的[狀況1發生反轉]狀況 可得知[異常球]在{A2}或{A6}當中 可得知可能{A2}爲異常球且異常重-或者{A6}爲[異常球]且異常輕 接下來[第三次稱重]直接取任意[無辜球]與{A2}稱重便可得知答案
3.3-本文在[第二次稱重]未詳細分析的[狀況3平衡]狀況 可得知{A4, A7, A8}爲[異常球] 並對比[第二次稱重]結果可知 可能{A4}爲[異常球]且異常重-或{A7}{A8}存在[異常球]且異常輕 接下來[第三次稱重]以上文同一思路解決便可
關於這道題的可解性: 有一個信息熵的解釋你們能夠看下
其中12個球找到異常球的信息熵是 log(12)
找到異常球后得知輕重信息的信息熵是 log(2)
因此問題的總信息熵是 log(12) * log(2) = log(24)
每次稱重包含左-右-平衡三種狀況 因此每次稱重的信息熵是 log(3)
3次稱重的總信息熵是 log(3) * 3 = log(27)
由於: log(27) > log(24)
因此: 3次稱重內必定可解
本文的12球稱重問題就分析到這裏啦 (∩_∩)求點贊求關注哦