≪1000人の小人≫問題を考えてみた
宿題は 彎曲していく日常 2005/05/08 http://d.hatena.ne.jp/noharra/20050508 にあるとおり.
一般化すると N人の小人が輪になっている. 妖怪ミツハノメが(例えば右回りに)一人おきに頭を触り,頭を触られた小人は輪から消えてゆく. 最後に残るのは 誰か? id:noharra:20050508 が二進数で考えていることをヒントに -- 一周する毎に人数が半分になっていくので, 2の倍数が関係する だろう -- 考えてみる.
最初に小人の人数が (2のk乗)人の場合
【小人の人数が (2のk乗)人の輪の場合】
(1) k = 1, 2人の時
(1周目) #1,
#2→ #1 が残る
(2) k = 2, 4人の時
(1周目) #1,
#2, #3,#4, #1, #3(2周目) #1,
#3→ #1 が残る
(3) k = 3, 8人の時
(1周目) #1,
#2, #3,#4, #5,#6, #7,#8, #1, #3, #5, #7, ……(2周目) #1,
#3, #5,#7, #1, #5(3周目) #1,
#5→ #1 が残る
(k) 以下, (2のk乗)人の時は
(1周目),(2周目), …… ,(k周目)のいずれでも #1が 残る位置を確保している → #1 が最後まで残る
と考えることができるだろう.
(2のk乗) > n > (2の(k-1)乗) の場合, どうなるかを次に考えてみた. 具体的に 10人の小人から始めてみよう.
【16>10>8 10人の時】
#1,
#2, #3,#4, #5, #6, #7, #8, #9, #10と 2人が消えて 8人になったところで, (2の(k-1)乗)人の場合となる.#5, #6, #7, #8, #9, #10, #1, #3 の8人の輪から出発して最後まで残るのは, 先頭にいる #5 となる.*1
ということで, エイヤと 1000人の場合, 誰が最後まで残るか考えてみた.
【1024>1000>512 1000人の時】
512人の輪となった時点で先頭に誰がいるかを求めればよい. 1000-512=488人が消えた時,その先頭にいるのは 488*2の次の小人 #977 である → #977 が最後まで残る*2
*1: 10人の時についての結論は, -- 求め方は異なるが -- id:noharra:20050508 と一致する.
*2: id:noharra:20050508 EXCELLさんが出した結果とは異なる, 要検討