このとき、どんな場合にも満点をとるには何回繰り返せば良いか?
今回は論理パズルのお話です。
※上の目次のうち、重要な(そして面白い)のは 4. 論理的に考えてみる 以降です。数学的な話以外に興味がなければそこから読んでください。
1. 抽象化○×クイズ
問題の意味を確認します。
○×クイズとは、正解が○か×である問題に対し、○か×かで回答する二択形式のクイズのことです。
例:
Q . 太陽は地球の周りを回っている。○か×か?
A . ×
このように、正解が×であるときは、×と答えると正しい回答になります。正しい回答をしたら○とか、間違った回答をしたら×、とかいうことではないので注意しましょう。
さて、今回は問の○×クイズがあり、何度か挑戦してそれら全てに正解することを目指し、最悪の場合での最小手数を考えます。ただし正解/不正解のフィードバックは、個々の問題についてはされず、総合得点のみ分かるという状況です。例えば正解が"○×○"である場合に"×××"と回答すれば問正解となります。
また、満点と書かれていましたが、問正解すると何点得られるのかは不明です。とりあえず点として一般性は失われませんが、この点については後で議論します。
それでは早速やっていきましょう。
2. 愚直な方法
当たり前ですが、個々の問題の正解を知ることができれば全問正解です。なので個々の問題について一つ一つ正解を確認していけば良いです。
前述のとおり、○×クイズは二択です。よって特定の問以外の回答を統一して、その問について○と×の場合の得点を比較することで正解がわかるはずです。
1問目について○と×の場合を比較し、1問目の回答を判明した正解に固定して2問目について○と×の場合を比較し、2問目の回答を判明した正解に固定して3問目について○と×の場合を比較し……というのをn問目まで繰り返せばすべての正解がわかり、満点が得られます。
この方法では回の試行が必要……そうですが、実は正解を知るだけなら回でも十分です。n問目の正解については一度確認すれば点か点かがわかるので、回確認する必要がないのです。回目の試行で全ての正解がわかり、その時点で全問正解を達成するか、回目の試行で全問正解するかのどちらかです。
ということで、この方法での最小手数は最悪の場合で です。
3. もう少し賢い方法
得点しか情報がないので、基本的には各試行の得点の差を使って考えていくしかありません。上の方法も得点差を利用したものですが、もっと効率的な方法があります。一つの共通の基準と個々の問題を比較するのです。
回目は(キャリブレーションとして)全て○で回答を出し、その得点を確認します。回目は1問目だけを×にして回答し、その得点を確認します。問だけ回答を変えているので得点は増えるか減るかのどちらかです。増えれば×が正解だったことになり、減れば○が正解だったということです。どちらであれ1問目の正解がわかります。
以降も同様に得点の増減を確認することで、各問題の正解を決定できます。
この方法は最初のキャリブレーションの回と後の正解決定の回の合計回が必要……そうですが、全ての正解を決定するだけであれば、やはり回で十分です。
回目の試行が終わった時点での状況をよく見てみると、1問目~n-1問目までの正解が判明していて、回目の試行は1問目~n-2問目までが正しい解答を選んでいて、n-1問目が正解か不正解のどちらか(どちらかは判明している)で、n問目はどちらかわからない状態です。このとき、回目の試行の得点によって場合分けすることができます。
1. 点の場合:運良く全問正解だった場合です。この時点で全問正解が達成されました。
2. 点の場合:更に場合分けします。
2-1. 問目が正解の場合:n問目が不正解であるとわかるので、回目の試行で全問正解が可能です。
2-2. 問目が不正解の場合:n問目が正解であるとわかるので、回目の試行で全問正解が可能です。
3. 点の場合:n-2問目までは全て正しい解答を選んでいるので、残り2問はどちらも不正解であったということです。それらの回答を変えることで、回目の試行で全問正解が可能です。
以上から、どの場合でも回目の試行までには全問正解できることがわかります。
※一応書いておくと、○と×は入れ替えても問題ありません。シンボル自体に意味はないからです。
4. 論理的に考えてみる
上2つの方法はどちらも直観によって得られたものです。特に2つ目の方法は非常に効率が良さそうですが、今回知りたいのは"最小"手数です。直感的な方法ではなかなか最小性を保証できません。
そこでほしくなるのが数学による保証です。公理に従っていれば数学は公理の範囲で常に正しさを保証してくれるいいヤツなので、どうにか今回の問題を数学の言葉で表現したいところです。
そこで、2つ目の方法を数学の言葉に置き換えてみましょう。
回目の試行での回答セットを行ベクトル、個の正解を順番に並べた列ベクトルを、各試行での得点をとします。
ところで、回答セットと正解はすべて○か×ですが、普通これらは計算できないので、このままでは扱いにくいです。そこで、○と×を対応する計算可能なものと置き換えます。具体的には○をに、×をに対応付けます。
こうすると、○×クイズの挙動と計算が以下のようにXOR(排他的論理和)っぽく上手く対応します。
回答が○、正解が○の場合:× (正解)
回答が○、正解が×の場合:× (不正解)
回答が×、正解が○の場合:× (不正解)
回答が×、正解が×の場合:× (正解)
つまり、○と×にとを、正解/不正解と積を対応付けることができるのです。
具体的に見てみましょう。
正解が"○×○"である場合に回目の試行として"×××"と回答する状況では、、なので、となります(右上のTは転置記号です)。
上で見たようにこの場合の得点は点ですが、です。このズレは不正解のときの点数の違いが原因で、内積を利用した対応付けにより最小値はとなります。
これを回の試行に関して考えると、を積み重ねた回答行列と得点ベクトルにより、と表せます。
知りたいのは正解、つまりです。が正則であればとして回の試行と得点から計算できるので、回の試行を一次独立になるように気をつけて行えば良いです。
ここで本題である最小性について考えます。との内積を計算するためにはは行である必要があり、正解の完全な情報を含むを得るには正則な回答行列を得る必要があります。よってを得るには次正則行列が必要になるのです。これは最低でも回は試行が必要であることと同値なので、回の試行の最小性が保証されます。
これで正解がわかることを2つ目の方法で確認してみましょう。
、回目の回答を"○○○"、回目の回答を"×○○"、回目の回答を"○×○"とすると、
となり、は正則になっています。よってこの回の試行でが計算でき、
全ての正解が"○×○"であることがわかります(今回は更に運良く回目で全問正解もできていますが、常にこうなる訳ではありません)。
以上のことから、問の○×クイズで全問正解するために必要な最小回数は最悪でです。
5. 得点の変換
ここまで○×クイズの得点を点と点、○と×を点と点に対応させてきました。この変換の正当性を確認しておきます。
変換前の得点の組を、問正解したときの変換前の合計得点を、変換後の得点の組を、問正解したときの変換後の合計得点をとする。このとき
となる。
からへの変換は変換関数: を定義することで可能になる。
は任意なので、とすることで、上の議論で行った変換が可能であることが保証される。
6. 感想
自然言語で書かれた論理パズルを数学の言葉で書き直すことで厳密で見通しの良い議論ができました。
数学の効力は数学の提供する公理系が実際の問題と同一視できる場合に発揮されますが、その場合には非自明な結論を行うのに非常に強力です。このことを簡潔に評した言葉を引用して今回は終わりにしたいと思います。
"数学は着想や概念をフォーマリズム(形式化された理論的手続き)に翻訳し, そのフォーマリズムを適用して, あまり形式的でない分析が通常なら施せないような洞察を導き出す."