1
高校数学解説
文献あり

100人の囚人問題: 最善の戦略は? その1

1730
0

初めに

"100人の囚人問題"とか"100人の囚人と50個の箱"と呼ばれる数学のパズルがある。英語では"100 prisoners problem"、"The locker puzzle"、"100 lockers puzzle"などと言わるようである。大変有名な問題なので、web上探せばいくつも解説ページが出てくる。

これはある課題を達成するための良い戦略を考える問題である。後述するように、直観では不可能にも思える課題であるにも関わらず、驚くべき戦略が存在する。

一連の記事で、解答として一般に提示される戦略が、単に良いだけではなく最善であることに関してコメントする。その証明はRef.[1]に書かれている。数学的な証明というよりは解説文的な感じなので、大変平易に書いてある。が、それでも、自分にはちょっとわかりにくいところがあった。また、英語のWikipediaに100 prisoners problemのページ(Ref.[4])があり、その記事のoptimality(最良性)の項目を読んだのだが、いまいち解説が的を射てないように思う。さらに日本語の解説ページも見つけられなかったので、ここに記しておくことにした。

一つの記事にまとめると長くなるので、前座である本記事と、最善の証明を解説した次の記事に分けた。本記事"その1"ではまず、問題の提示と、ある程度詳しい解答を書いておく。これは長ったらしいので(他のサイトと同じだと面白くないと思い...)、短いのがお好みな方は例えばRef.[2]を参照されたい。最善の証明に関しては次の記事"その2"で解説する。すでに問題と解答を知っている方は、"その2"から読んでいただければと思う。

問題と解答

100人の囚人問題は、通常100人の囚人と50個の箱が出てくるが、ここではRef.[1]にならい、ロッカーを使った形で書いておく。

問題

100人の囚人問題

ある部屋に100人集められている。別の部屋に100個のロッカーがあり、それぞれのロッカーには100人のうち1人の名前が書かれた紙が入れてある。違うロッカーには違う名前の紙が入っている。

順番を決め、1人がロッカーの部屋に入り、50個のロッカーを開ける。その中に自分の名前があれば、ロッカーを元の状態に戻し、次の人がロッカー部屋に入り、50個のロッカーを開ける。これを繰り返し、100人が皆自分の名前を見つけられたらゲームは成功。1人でも名前が見つけられなければゲームは失敗である。

100人はゲームを始める前に議論し戦略を決めることができる。ただしゲームが始まったらお互いに話すこと・情報を伝えることはできない。

このゲームにおいて、30%以上の確率で成功する戦略を考えよ。

皆ランダムにロッカーを開けるとしたら、成功する確率は(1/2)100という絶望的な数字になる。

解答

この問題の解答として、"pointer following"(以下p.f.と称する)とか"pointer chasing"と呼ばれる以下の戦略が存在する:

Pointer following (p.f.)

人とロッカーに番号をふる。i番目の人はまずi番目のロッカーを開ける。その中に入っている人の名前に対応する番号のロッカーを次に開ける。これを繰り返し、50個のロッカーを開ける。

もう少し数学的にマシな言い方に変えると以下のようになる。

人とロッカーが2N人および2N個あるとする。人とロッカーに1から2Nまでの番号を振る。ロッカーの状態をPとして、
P=(σ(1),σ(2),,σ(2N))
i(=1,,2N)番目のロッカーにσ(i)(=1,,2N, σ(i)σ(j) for ij)番目の人の名前が書かれている紙が入っている状態とする。
この時、p.f.は以下の戦略である:

Pointer following (p.f.)

i番目の人は最初にiのロッカーを開ける。次に開けるロッカーはσ(i)、次はσ(σ(i))を開ける。これを続ける。つまりj回目(最初にロッカーを開けるのを0回目とする)には
σj(i)={i  (j=0),σ(σ((σj(i))))  (j1)
を開ける。

成功率30%以上の証明

問題では50個のロッカーを開けるが、以下自分の名前を見つけるまでロッカーを開け続けることとし、開けたロッカーの個数が皆50個以下なら成功ということにしよう。これは元のゲームと等価である。

このゲームにおいて、以下が成り立つ:

iの人が自分の番号を見つけるまでにかかる回数をNiとすると、σ
σNi(i)=i, Ni1
を満たす。
この時σ1(i),σ2(i),,σNi1(i)番目の人もNi回で自分の番号を見つける

これは次のようにしてわかる:

k=0,1,,Ni1に対し、σk(i)番目の人のめぐる番号の列を考える。σj(i)の定義より、a,bNに対して
σa(σb(i))=σ(σ((σ(a+b)(i))))=σa+b(i)
である。よって
σNi(σk(i))=σNi+k(i)=σk(σNi(i))=σk(i)  (σNi(i)=i)
であり、かつj<Niの時σj(σk(i))σk(i)と等しくなることはないので(もし等しいものがあれば、このループの長さはNiではない)、 Nσk(i)=Niであることがわかる。また、σk(i)番目の人がめぐる列は
σk(i)σk+1(i)σNi(i)=i=σ0(i)σ1(i)σk(i)
である。

σ1(i),,σNi1(i),σNi(i)(=i)の番号の人は、同じ番号の列を巡回する。この巡回列を「長さNiのループ」と呼ぶことにする。

以上の準備でp.f.における成功率を求めることができる。この確率は
ランダムに状態Pを発生させるとき、Pに50以下のループのみ存在する確率
である。
これを計算するため、ランダムなPに長さk (k>N)のループが存在する確率を求める。これをPr(k) とすると

Pに長さk (k>N)のループが存在する確率

Pr(k)=1k   (k>N)

である。

Pr(k)=1/k  (k>N)の証明

k>Nの時、もしPに長さkのループがあれば、それは1つだけである。2N個の番号から、kループを作るためのk個の番号を選び出す組み合わせは2NCkである。選び出したk個の番号からkループを作る通りの数を考える。k個の番号として{a1,a2,,ak}(ただしaiaj for ij)と選んだとき、この通りの数は
   {σ(a1),σ2(a1),,σk(a1)}{a1,a2,,ak}
である。ただしσk(a1)=a1。(記事末の(注)参照)

σ(a1)a1以外のk1通りの数が可能。σ2(a1)a1,σ(a1)以外の数が可能なのでk2通り。これを繰り返せば、σとして可能な写像は(k1)!通り存在することがわかる。
また、a1からak以外の数字を並べる通りの数は(2Nk)!通り存在する。

以上から、長さk (k>N)のループが存在するPの数は
2NCk×(k1)!×(2Nk)!
である。Pは全部で(2N)!存在するので、ランダムにPを選んだ時、kループが存在する確率Pr(k) (k>N)
Pr(k)=2NCk×(k1)!×(2Nk)!/(2N)!=(2N)!/k!/(2Nk)!×(k1)!×(2Nk)!/(2N)!=1k
である。

ゲームの成功率は長さ51以上のループが存在する確率を1から引いたものなので、
1(Pr(51)+Pr(52)++Pr(100))
と書ける。ここで、k>Nならば、長さkのループとl (lk)のループが同時に存在することはなく、それらは排反の事象であることを用いた。

以上より、このゲームに成功する確率は

ゲームに成功する確率

1(Pr(51)+Pr(52)++Pr(100))=1(1/51+1/52++1/100)10.688170.3118

である。確かに成功率は30%を超えている。

ちなみに、
k=N+12N1k=k=12N(1)k+1k
であり、かつこの右辺はlog(1+x)のマクローリン展開にx=1を入れたものであるから、Nにおけるゲームの成功率は
1log20.3069
である。すなわち、どんなに人とロッカーが増えても、成功率は3割を超えることがわかる。厳密には、上記のマクローリン展開の収束半径は1であり、x=1で数列が収束するかは別に議論する必要があるが、まあ直感的にはこれで十分であろう。

付記:"その2"への導入

問題および解答の解説は以上である。私が最初にこの問題を知ったのは、togetterの"あなたは解けるか?面接合格をかけた超難問論理パズル"(Ref.[3])という記事による。最初の方にも書いた通り、みんながランダムにロッカーを開ければ成功率は(1/2)100という絶望的な確率である。証明なしに解答を聞いても信じられず、証明を探しているうち、Ref.[2]のサイトで、Ref.[1]にp.f.が最善の戦略であることが証明してあることを知った。俄かにはどのように証明するかわからなかったので、興味を持って読んでみたところ、簡単で面白い証明方法であり、かつこの証明は日本語での解説が見つけられなかった(あったらすみません)。次の記事でこれについて私なりにコメントしたい。

100人の囚人問題: 最善の戦略は? その2




(注)「最初の値」をa1以外にした{σ(ai),σ2(ai),,σk(ai)}という写像は考慮しなくてよいのか?と思うかもしれないが、これと同じループは{σ(a1),σ2(a1),,σk(a1)}の中に必ず含まれる。例えばσ(a2)から始まる合成写像の列を考えるとしよう。σl(a2)=a1だとしたら、σ(a2)から始まる列においてσσl+1とすれば、{σ(a2),σ2(a2),,σk(a2)}{σ(a1),σ2(a1),,σk(a1)}となる。

具体的にa1=1,a2=2,a3=3とする。
このときσi(a1)
   σ(1)=2,σ2(1)=σ(2)=3   [1a],   σ(1)=3,σ2(1)=σ(3)=2   [1b],
の2通り存在。
一方σi(a2)
   σ(2)=3,σ2(2)=σ(3)=1   [2a],   σ(2)=1,σ2(2)=σ(1)=3   [2b],
の2通り存在。
しかし[1a]と[2a]はどちらも「1のロッカーに2, 2のロッカーに3、3のロッカーに1の番号が入っている」という、同じロッカーの状態に対応する。[2a]でσσ3とすると、[1a]に帰着する。
[1b]と[2b]も「1のロッカーに3, 2のロッカーに1、3のロッカーに2の番号が入っている」という同じ状態。[2b]でσσ3にすると、[1b]に帰着する。

参考文献

投稿日:202125
OptHub AI Competition

この記事を高評価した人

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

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

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

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

投稿者

bisaitama
bisaitama
143
67011

コメント

他の人のコメント

コメントはありません。
読み込み中...
読み込み中
  1. 初めに
  2. 問題と解答
  3. 成功率30%以上の証明
  4. 付記:"その2"への導入
  5. 参考文献