問題24-3 (boojam さん)  

 【ハノイの塔】

大きさの異なる8枚の円盤と垂直に立った3本の棒、A、B、Cがある。各円盤の中心には棒の太さと同じ大きさの穴が
空いていて、それぞれの棒に突き刺すようにして積みあげることができるようになっている。

最初、8枚の円盤は、一番大きい円盤が一番下、一番小さな円盤が一番上になるように、大きさの順に棒Aに積まれている。

この時、すべての円盤を棒Aから棒Bに移すことを考える。ただし、円盤の移動は、次の規則にしたがうこと。
        規則1 円盤は1度に1枚ずつしか移動できない。
        規則2 大きな円盤は小さな円盤の上には積むことができない。
        規則3 円盤は任意の棒から棒へ移動できるだけで、その他の場所には移動できない。
《問題3》
  最初の円盤の移動規則3を、次のように変更する。
      規則3″ 円盤は、棒Aから棒B、棒Bから棒C、または、棒Cから棒Aにしか直接移動できない(棒から棒への移動は一方通行)。
           当然のことながら、棒以外の場所には移動できない。
  この時、最初に棒Aに積まれた8枚の円盤すべてを棒Bに移すためには、最低でも何回の円盤の移動が必要か?

《詳細解答3》 2447回

これまでと同様な考え方をする。棒Aにある円盤8を棒Bに移動するには、まず、上の7枚の円盤を棒Cに移動させる必要がある。そして、
円盤8を棒Bに移動後、棒Cにある7枚の円盤を棒Bに移動する。

ここで、A3(n) を、n枚の円盤を棒Aから棒Bに移す最少手順数。B3(n)、棒Bから棒Aへ移す最少手順数とする。ここで、順方向の移動である。
棒B→Cへの移動と棒C→Aへ移動の最少手順数は A3(n) に同じ。同様に、逆方向の移動、棒A→C、棒C→Bの最少手順数は B3(n) に同じ。

すると、上の手順は以下のようになる。

A3(8) = B3(7) + 1 + B3(7)
: : :
: : → 棒Cにある7枚の円盤を棒Bに移動
: → 棒Aにある円盤8を棒Bに移動
→ 棒Aにある上の7枚の円盤を棒Cに移動

次に、B3(7)、つまり、7枚の円盤を棒Aから棒Cに移すことをで考えてみる。
7枚の円盤のうち一番大きな円盤7を、棒Aから棒Cに移すとすると、移動規則により直接棒Aから棒Cへ移動できないので、
棒A→B、棒B→Cの二段階の移動の手順が必要。最初の棒Aから棒Bへの移動では、小さい6枚を棒Cに移動しなければならない。
この移動には、B3(6) の手順が必要。この後、円盤7を、棒Bに移動する。次に、棒Cには、小さい6枚の円盤があるので、
これを棒Aに移動した後でないと、棒Bにある円盤7を棒Cに移動できない。つまり、小さな6枚の円盤を棒Aへ移さなければなければならない。
この手順は、順方向への移動だから A3(6) の手順が必要。この後、円盤7を棒Cに移動。
そして、棒Aにある小さな6枚の円盤を棒Cに移動。この手順は、B3(6)。

この手順は、以下のようになる。

B3(7) = B3(6) + 1 + A3(6) + 1 + B3(6)
: : : : :
: : : : → 棒Aにある6枚の小さな円盤を
: : : : 棒Cに移動
: : : → 棒Bにある円盤7を棒Cに移動
: : → 棒Cにある6枚の小さな円盤を棒Aに移動
: → 棒Aにある円盤7を棒Bに移動
→ 棒Aにある6枚の小さな円盤を棒Cに移動

これらのことから、以下のようなる。

A3(8) = B3(7) + 1 + B3(7)
B3(7) = B3(6) + 1 + A3(6) + 1 + B3(6)
A3(6) = B3(5) + 1 + B3(5)
B3(6) = B3(5) + 1 + A3(5) + 1 + B3(5)
A3(5) = B3(4) + 1 + B3(4)
B3(5) = B3(4) + 1 + A3(4) + 1 + B3(4)
A3(4) = B3(3) + 1 + B3(3)
B3(4) = B3(3) + 1 + A3(3) + 1 + B3(3)
A3(3) = B3(2) + 1 + B3(2)
B3(3) = B3(2) + 1 + A3(2) + 1 + B3(2)
A3(2) = B3(1) + 1 + B3(1)
B3(2) = B3(1) + 1 + A3(1) + 1 + B3(1)
A3(1) = 1
B3(1) = 1 + 1

これを逆順に計算する。

B3(1) = 1 + 1 = 2
A3(1) = 1 = 1
B3(2) = B3(1) + 1 + A3(1) + 1 + B3(1)
= 2 + 1 1 + 1 2 = 7
A3(2) = B3(1) + 1 + B3(1)
= 2 + 1 + 2 = 5
B3(3) = B3(2) + 1 + A3(2) + 1 + B3(2)
= 7 + 1 + 5 + 1 + 7 = 21
A3(3) = B3(2) + 1 + B3(2)
= 7 + 1 + 7 = 15
B3(4) = B3(3) + 1 + A3(3) + 1 + B3(3)
= 21 + 1 + 15 + 1 + 21 = 59
A3(4) = B3(3) + 1 + B3(3)
= 21 + 1 + 21 = 43
B3(5) = B3(4) + 1 + A3(4) + 1 + B3(4)
= 59 + 1 + 43 + 1 + 59 = 163
A3(5) = B3(4) + 1 + B3(4)
= 59 + 1 + 59 = 119
B3(6) = B3(5) + 1 + A3(5) + 1 + B3(5)
= 163 + 1 119 + 1 + 163 = 447
A3(6) = B3(5) + 1 + B3(5)
= 163 + 1 + 163 = 327
B3(7) = B3(6) + 1 + A3(6) + 1 + B3(6)
= 447 + 1 + 327 + 1 + 447 = 1223
A3(8) = B3(7) + 1 + B3(7)
1223 + 1 + 1223 = 2447

これが答え。


一般化すると、A3(n) と B3(n) は、以下のように表わすことができる。

A3(1) = 1
A3(n) = 2 * B3(n-1) + 1 [n > 1]

B3(1) = 2
B3(n) = B3(n-1) + 1 + A3(n-1) + 1 + B3(n-1)
= (B3(n-1) + 1 + B3(n-1)) + A3(n-1) + 1
= A3(n) + A3(n-1) + 1 [n > 1]

これから、A3(n) は、次のように表わせる。

A3(1) = 1
A3(2) = 2 * B3(1) + 1 = 2 * 2 + 1 = 5
A3(n) = 2 * B3(n-1) + 1
= 2 * (A3(n-1) + A3(n-2) + 1) + 1
= 2 * A3(n-1) + 2 * A3(n-2) + 3 [n > 2]

∴ A3(n) = ((1+sqrt(3))^(n+1) - (1-sqrt(3))^(n+1)) / (2 * sqrt(3)) - 1
[n > 0]


解き方は省略。

数列サイトに、A005665 として掲載されている。