10

嘘つきクイズを線型代数で解く

1215
0

導入

こんにちは. 今回は, 次のような簡単な嘘つきクイズを面白い方法で解いてみましょう.

A~Eの5人が以下のように発言している. この5人の誰が嘘つきか?もし一意に決まらないならばそれは何通りあるか?

A「Cは正直者だ」
B「C, Eは嘘つきだ」
C「A, Dは正直者だ」
D「Aは正直者だ」
E「Bは嘘つきだ」

変数をおく

A~Eが嘘つきか正直者かを, 変数aeで表すことにします. 嘘つきの場合は1, 正直者の場合は0としておきましょう.

以下, F2=Z/2Z(2で割った余りの世界)で考えます.

Aの主張「Cは正直者だ」は, そのまま式で表すと「c=0」となりますが, これでは正しくありません. 実際にはAが嘘つきかどうかで変わってくるからですね.

ではどう変わるかというと, Aが嘘つきならば右辺の0or1が反転することになります. つまり, 左辺にaを足して「c+a=0」とすれば, Aの嘘も加味した正しい式になるのです!

(実際, a=0のときは「c=0」となりCは正直者という主張で, a=1のときは「c=1」となりCは嘘つきだったことになります.)

この調子で数式に書き換えていけば,

A「Cは正直者だ」    →  c+a=0
B「C, Eは嘘つきだ」   →  c+b=1, e+b=1
C「A, Dは正直者だ」   →  a+c=0, d+c=0
D「Aは正直者だ」    →  a+d=0
E「Bは嘘つきだ」    →  b+e=1

となり, いくつか被りがありますから整理すると, 問題は次のように書き換えられます.

F2上で次の連立方程式を解け. 一意に解けない場合, 解は何通りあるか?

{a+c=0a+d=0b+c=1b+e=1c+d=0

線型代数を使う

線型代数の言葉を使えば, 先の問題は次のように書けます.(有限体上の線型代数は知らないよという方でも, 以下は普通の行列の話と思って読んでもらって大丈夫です.)

(1010010010011000100100110)(abcde)=(00110)

左辺の5×5行列をAとおいておきます. このような方程式を調べるにはArankを見れば良いですね.

あとは計算するだけです. 1行目と2行目を5行目に足し, 1行目を3行目に足せば
A(1010010010110000100100000)
となり, 適当に並べ替えればrankA=4であることが分かります. 従って特に, 上の方程式は一意には解けません.

上の方程式の右辺がImAに入っていれば解が求められますが, 実際bのみ1とすると方程式を満たします. 従って解は

(01000)+KerA

の元となります. rankA=4よりdimKerA=1ですから, (F21次元なので)解は2であるとわかります.

KerAを求めれば解を具体的に求めることもできます.

おわりに

発言に「少なくとも」といった主張が出てくると積を使わないといけないので線型代数では解けなくなってしまいます. またよくある「嘘つきは何人いる」といった条件もうまく表現できません. なのでこれは観賞用解法といったところですね.

ここまで読んでくださった方, ありがとうございました.

投稿日:2024623
OptHub AI Competition

この記事を高評価した人

高評価したユーザはいません

この記事に送られたバッジ

バッジはありません。
バッチを贈って投稿者を応援しよう

バッチを贈ると投稿者に現金やAmazonのギフトカードが還元されます。

投稿者

東大理数B4です

コメント

他の人のコメント

コメントはありません。
読み込み中...
読み込み中
  1. 導入
  2. 変数をおく
  3. 線型代数を使う
  4. おわりに