Log of ROYGB

はてなダイアリーが廃止されるので、引っ越しました。

天秤にかけろ

Googleの採用試験として次のような問題が紹介されていました。

あなたは同じサイズのボールを8つもっています。
そのうち7つは同じ重さですが、1つはほかのものよりもわずかに重いです。
秤を2回だけ使ってこのわずかに重いボールを見つけるには
どうすればいいですか

https://twitter.com/bunkei_kanojo/status/349686416122454019


これはGoogleの採用試験としては簡単すぎるので、おそらくは本当ではないと思います。あえて関連を見つけ出すならば、8個のボールから他と違う1つを見つけるのもある種の検索であるのだという点くらいでしょうか。
他にも問題の不備はあります。秤がどういう種類のものか書いていないことです。もし体重計のようなバネばかりだとしたら問題が成り立ちません。でも、バネばかりを使ったこんな問題もあります。


金貨が入った袋が4袋あって、そのうち1袋にはすべて偽の金貨が入っている。本物が10グラム、偽者が9グラムだったとして、どの袋に偽の金貨が入っているかを一度だけ秤をつかって見つける方法を示せ。


こんな問題ならばバネばかりでなければいけません。答えとしては4つの袋をABCDとして、Aの袋から1枚、Bの袋からは2枚、Cからは3枚、Dからは4枚の金貨を取り出して重さをはかる方法があります。合計10枚の金貨が全部本物ならば100グラムですが、偽物の金貨の分だけ軽くなるのですがそれが10グラムならばAの袋が偽だということがわかります。
もう少し発展させた問題として、偽の金貨の袋が1つではなく複数の場合なんてのもありますが、これは取り出す金貨を1枚、2枚、4枚、8枚のようにすることで対応できます。


話を最初の問題に戻すと、8個のボールから1つの重いボールを見つけるのに使う秤は天秤ばかりです。さらに、秤を使う場合にボールを乗せながら観察する方法などは禁止されていると考える必要があります。そうでないと、両方の皿にまず1個づつボールを乗せて天秤の傾きを見ながらボールを追加していき、天秤が傾いたときに乗せたボールが重いボールだなんてことができてしまいます。だから4個のボールを乗せるのならば、一度に乗せて天秤のがかたむくかつりあうのかを観察するのが1回としなければいけません。そうしないと何がいけないのかというのを聞かれても困るのですが、問題が成立するためにはそうしないとならないということはご理解願います。


さて、8個のボールから天秤を2回使って1個の重いボールを見つけ出す問題を考える前に、天秤を1回使った場合について考えてみます。1回天秤を使う場合には、何個のボールから1つのボールを見つけ出すことができるでしょうか。
答は3個のボールとなるのですが、一応方法も説明しておきます。
3個のボールをABCとおいて、AとBのボールの重さを天秤で比べます。天秤が傾いた場合は、下がった方のボールが重いことがわかり、天秤がつりあった場合は残ったCのボールが他よりも重いことがわかります。AとBしか天秤に載せていないのに、Cが重いことがわかるのは問題でどれか1つが重いとなっているからで、問題の言うことを信じるのならばAとBが同じ重さであった場合には残る1つのCが重たいのだということがわかります。これは消去法と言われる考え方です。考えられる答から、1つ以外がすべて否定された場合には残るひとつが正解だというのが消去法です。


天秤を1回使うと3個のボールの中から重たい1個を見つけることができるので、天秤を2回使う場合には最初の1回で重たいボールがどれか3個の中にあることがわかれば良いことがわかります。3個の中から1つの重い玉を見つけるには、天秤を1回使えば大丈夫なのは先ほどの説明の通りです。
具体的には天秤の片方に3個もう片方に3個乗せて、天秤が傾いたら下がったほうの3個に重いボールがあることがわかります。もし天秤がつりあった場合にも、残ったボールが3個以下ならば残り1回で重いボールを見つけることができます。だから8個ではなく、9個のボールからでも天秤を2回使うことで重いボールを見つけ出すことができます。
では、天秤を3回使える場合はどうか。これは、最初の1回で重いボールがどれか9個の中に入っていることがわかれば残り2回で見つけられます。27個のボールを9個づつ3つに分けて天秤を使うことで、どの9個の中に重いボールが入っているのかがわかるので、天秤を3回使った場合には27個のボールから重いボールを見つけることができます。このような考え方を帰納法といいます。


いまさら説明する必要もないでしょうが、最初の問題の答を書いてみます。

8個のボールをABCDEFGHとして、ABCとDEFを天秤ばかりに乗せる。ABCが下がったらAとBを天秤に乗せ、下がったほうが重いボール。もし釣り合えば残りのCが重いボール。DEFが下がった場合も同様。
ABCとDEFが釣り合った場合にはFとGを天秤に乗せてどちらかが下がれば下がったほう、釣り合ったら残ったHが重いボールということになる。


ではボールが8個ではなく、80個だとしたら天秤を何回使えば重いボールを見つけることができるでしょうか。


8個の場合の10倍なので、天秤も2回の10倍の20回使えば見つけ出せることはあきらかですが、もっとずっと少ない回数でも見つけることができます。
先ほどの天秤を3回使った場合には27個のボールから1つの重いボールを見つけ出せることがわかりましたが、4回の場合は27個の3倍の81個の中から重いボールを見つけることができます。つまり80個の場合でも天秤を4回使うことで、1つだけ混ざった重いボールを見つけることができるわけです。
個数が8個と80個で10倍になっても、天秤を使う回数は2回から4回と2倍にしかならないのと同様に、検索する個数が増えた場合にでも検索方法を工夫することで個数が増えたほどには検索の手間が増えないようにできる。なんて書くと、最初のGoogleの採用試験だというのにも何か信憑性が増してきたりしないでしょうか。