if文が「真」になる回数
例えば
- 「単純な考え方」で条件分岐の処理をして、
if文が「真」になる回数が3回の場合と、 - 「巧みな考え方」で条件分岐の処理をして、
if文が「真」になる回数が2回の場合について、
「単純な考え方」の場合、if文が「真」になる回数が1回多いけれど、「単純な考え方」で条件分岐の処理をするほうが「わかりやすい」と思います。
ビリヤードの球の問題
先日「ビルゲイツの面接試験」という雑誌記事を、読みました。面接の質問で、ビリヤードの球の問題について、質問がありました。
「ビリヤードの球が8個あります。そのうち1個は欠陥品で、他よりも重くなっています。天秤を使い、重さを2回量るだけで、どの球が欠陥品か見分けなさい」
この問題は、コンピュータのプログラミング能力を見極めるのに「良い問題」だそうです。シミュレーションする能力を調べる問題と言えます。
単純な考え方
まずは「単純な考え方」で、欠陥品のビリヤードの球を見つける方法を書きます。
「重さ」を、3回量ります。
解答例
- 8個の球を、4個と4個に分けます。
▲○●● ■■■■
ここでは、記号文字で球を示します。 - 1回目は、4個のグループを量ります。
重たいほうの4個のグループに、欠陥品があります。
ここでは「▲○●● グループ」に、欠陥品があるとします。 - 「▲○●● グループ」を、2個と2個のグループに分けます。
▲○ ●● - 2回目は、2個のグループを量ります。
重たいほうの2個のグループに、欠陥品があります。
ここでは「▲○ グループ」に、欠陥品があるとします。 - ▲○ グループを、1個と1個に分けます。
▲ ○ - 3回目は、▲ と ○ を、量ります。
重たいほうが欠陥品です。
以上の手順の場合、分岐処理は次のようになります。
ビリヤードの8個の球 ▲○●● ■■■■ について。
「単純な考え方」の分岐処理 |
もし ▲○●● のほうが重たいなら 「▲○●● グループ」に、欠陥品があります。 そうでないなら 「■■■■ グループ」に、欠陥品があります。 ここでは「▲○●● グループ」に、欠陥品があるとします。 もし ▲○ のほうが重たいなら ここでは「▲○ グループ」に、欠陥品があるとします。 もし ▲ のほうが重たいなら |
「単純な考え方」で欠陥品のビリヤードの球を見つける場合、「重さ」を3回量ります。
つまり、もしという分岐処理が―― if文の条件式が――3回「真」になります。
巧みな考え方
次は「巧みな考え方」で、欠陥品のビリヤードの球を見つける方法を書きます。
「重さ」を、2回量ります。
解答例
- 8個の球を、3個・3個・2個に分けます。3つのグループに分ける事が、巧みな(奇妙な?)考え方だと思います。
●●● ■■■ ▲▲
ここでは、記号文字で球を示します。 - 1回目は、3個のグループを量ります。
●●● ■■■ - 次の「2通り」の結果があります。
- (結果その1)●●● ■■■ 「両者の重さ」が同じの場合。
2回目は、2個のグループ ▲▲ を量ります。
どちらか重いほうが、欠陥品です。 - (結果その2)●●● ■■■ 一方が重い場合。
欠陥品は、重い3個のグループにあります。
ここでは重いグループを「●1 ●2 ●3」とします。
2回目は、重いグループから2個選び、量ります。
●1 ●2
●1または●2の一方が重ければ、それが欠陥品です。
●1と●2が「同じ重さ」なら、●3が欠陥品です。
以上の手順の場合、分岐処理は次のようになります。
ビリヤードの8個の球 ●●● ■■■ ▲▲ について。
「巧みな考え方」の分岐処理 |
もし ●●● のほうが重たいなら 欠陥品は ●●● にあります。ここでは ●1 ●2 ●3 とします。 もし ●1 のほうが重たいなら ●1 が、欠陥品です。 そうではなく、もし ●2 のほうが重たいなら ●2 が、欠陥品です。 そうでないなら ●3 が、欠陥品です。 そうではなく、もし ■■■ のほうが重たいなら そうでないなら |
「巧みな考え方」で欠陥品のビリヤードの球を見つける場合、「重さ」を2回量ります。
つまり、もしという分岐処理が―― if文の条件式が――2回「真」になります。
「単純な考え方」のほうが、わかりやすい
「単純な考え方の分岐処理」と「巧みな考え方の分岐処理」のどちらが、理解しやすいでしょうか?
本記事では「単純な考え方の分岐処理」のほうが「わかりやすい」という結論にしたい、と思います。
※この記事は、2004年8月当時の記事になります。