問題24-5 (boojam さん)
【ハノイの塔】
大きさの異なる8枚の円盤と垂直に立った3本の棒、A、B、Cがある。各円盤の中心には棒の太さと同じ大きさの穴が
空いていて、それぞれの棒に突き刺すようにして積みあげることができるようになっている。
最初、8枚の円盤は、一番大きい円盤が一番下、一番小さな円盤が一番上になるように、大きさの順に棒Aに積まれている。
この時、すべての円盤を棒Aから棒Bに移すことを考える。ただし、円盤の移動は、次の規則にしたがうこと。
規則1 円盤は1度に1枚ずつしか移動できない。
規則2 大きな円盤は小さな円盤の上には積むことができない。
規則3 円盤は任意の棒から棒へ移動できるだけで、その他の場所には移動できない。
《問題5》
問題4と同様に、棒Aに大きさの順に積まれた大きさの異なる8枚の円盤2組計16枚の円盤すべてを、最初の3つの移動規則を使って、
棒Bに移すことを考える。
この時、棒Bにすべての円盤が移動できた際に、大きさの同じ円盤の順序が最初棒Aに積まれていた順序となるようにするには、
最低でも何回の円盤の移動が必要か?
なお、順序を保証するのはすべての円盤が棒Bに移動し終わった時で良く、移動の手順の途中で順序を保証する必要はない。
《詳細解答5》 1019回。
まず、《問題4》を振り返って、棒Bに円盤をすべて移動し終わった時の円盤の重なる順序を考えてみる。まず、一番下にある2枚の円盤の
順番が入れ替わっていることは直ぐに判る。それ以外の円盤については、必ず偶数回移動したことになるので、順番が保存されていることが判る。
つまり、一番下にある2枚の円盤の順序は入れ替わっているが、残りの円盤の重なる順序は保存されている。
この結果から、単純に考えてみる。まず、すべての円盤を一旦棒Cに移する。その後、それらを棒Bに移動する。すると、すべての円盤の
重なる順序は保存されることになる。
この手順だと、円盤が2枚、つまり、同じ大きさの円盤が2枚の時、上の手順だと計4回の移動が必要になる。しかしながら、実際には、3回の移動で済む。
2枚の円盤を、円盤uと円盤vとする。最初、円盤uが上にあるものとする。まず、円盤uを棒Cに移す。次に、円盤vを棒Bに移す。最後に、棒Cにある
円盤uを棒Bに移す。重なる順番を保存したまま、3回の移動できたことになる。
そこで、本当の最少手順を考える。
まず、(n−1)の2倍の数の円盤を順番を関係なく棒Bに移す。次に、棒Aに残っている2枚を、順番に関係なく棒Cに移す。さらに、棒Bにあるすべて
の円盤を順番に関係なく棒Aに移す。この時、棒Aでは元の順番が保存されているはず。そして、棒Cにある2枚の円盤を順番に関係なく棒Bに移す。
この時、棒Bでは元の順番が保存されているはず。そこで、棒Aにある円盤すべてを、順番を保存して棒Bに移す。
ここで、n種類2組みの円盤を元の順番を保存して移動する手順の最少手順数を
A5(n) として、問題4の結果を利用すれば、この手順は次のように表わせる。
A5(n) = A4(n-1) + 2 + A4(n-1) + 2 + A5(n-1)
= A5(n-1) + 2 * A4(n-1) + 4
= A5(n-1) + 2 * (2^n - 2) + 4
= A5(n-1) + 2^(n+1)
これを、
A5(1) = 3
として一般項を求めると(解き方省略)、
A5(n) = 2^(n+2) - 5
となる。
念のため、もう1つ別の手順を考えてみる。
最初の手順は同じく、(n−1)の2倍の数の円盤を順番を関係なく棒Bに移す。次に、棒Aの残り2枚のうち1枚を棒Cに移す。さらに、棒Bにあるすべての
円盤を順番に関係なく棒Cに移す。この時、棒Cでは元の順序が保存されいるはず。その後、棒Aに残っている最後の1枚の円盤を棒Bに移す。
そして、棒Cにある(n−1)の2倍の数の円盤を順番を関係なく棒Aに移す。その後、棒Cに残った最大の円盤の残りの1枚を棒Bに移す。
最後に、棒Aにあるすべての円盤を棒Bに移す。これで順番を保存したまま、すべての円盤を移せたことになる。
この手順を、B5(n) とすると、
B5(n) = A4(n-1) + 1 + A4(n-1) + 1 + A4(n-1) + 1 + A4(n-1)
= 4 * A4(n-1) + 3
= 4 * (2^n - 2) + 3
= 4 * 2^n - 4 * 2 + 3
= 2^(n+2) - 8 + 3
= 2^(n+2) - 5 [n > 0]
となり、先に求めた A5(n) と同じ。
ちなみに、この B5(n) の手順で、順序を保存して移動を行なうと、手順が増えることは明らか。また、これらの手順 A5(n) と B5(n) も、一番下にある
円盤を動かすための最少手順をとっているので、これらが順序を保存して移動するための最小手順であることが判る。
蛇足ながら、
A5(n) = 2^(n+2) - 5
= 2^(n+2) - 4 - 1
= 2 * 2^(n+1) - 2 * 2 - 1
= 2 * (2^(n+1) - 2) - 1
= 2 * A4(n) - 1
となっている。