ハノイの塔にまつわる伝説
もちろん、これは作り話ですが、64枚の円盤を移し替えるのに果たしてどのくらいかかるのか、興味のあるところです。
ハノイの塔のルール
ハノイの塔のルールは非常にシンプルです。
- 積み上げられた円盤をすべて他の棒に移し替えなければならない。
- 動かすことができる円盤は一度に一枚だけ。
- 小さな円盤の上に大きな円盤を置いてはならない。(ピラミッド型を維持すること)
- 3本の棒を必ず使うこと。円盤を他のところに置いてはならない。
ハノイの塔は典型的な自己回帰プログラム
ハノイの塔のアルゴリズムは非常にシンプルです。複雑そうに見えますが、プログラムではわずか数行で書くことができます。
なぜなら、このアルゴリズムは、
- 最下段の円盤を左端から右端へ移動させる
- 最下段以外の上のピラミッドを他の棒へ移動させる
の繰り返しに過ぎないからです。マトリョーシカのような構造ともいえます。
円盤が3枚の場合を考えてみたいと思います。
左端の棒に円盤が3枚重ねられています。この3枚の円盤を右端に移動させます。
そうすると、1番下の円盤を右端に移動させなければなりません。となると、上の2枚は真ん中の棒に移動しておく必要があります。次は、真ん中の2枚の円盤を右端に移動させることになります。ここで、3枚の移動の問題が2枚の移動の問題に変化します。
最後に、一番下の円盤を右端に移動させるために、一番上の円盤は左端に移動させます。
要するに、一番下の円盤を移動させるために、残りの円盤を左端と真ん中の2本の棒を行ったり来たりさせることになります。
結論だけを書くと、円盤を移し替える回数は、円盤の枚数をnとすると、
2n − 1
という、シンプルな形になります。これは指数関数なので、枚数が増えると回数が急激に増えることになります。
1枚移動させるのに1秒かかるとして、どのくらいの時間がかかるか、ざっと計算すると、以下の表のようになります。64枚になると、もはや永遠ともいえる時間になってしまいます。
戦国時代に、部下が褒美として、将棋盤に最初は1粒、次は2粒と、ひとマスごとに米粒を倍にして欲しいと提案をして、殿様がそのくらいなら、と甘く見ていたら、破産してしまった、という逸話があります。紙をどんどん折り曲げていくと、やがて月にたどり着く、といったように、指数関数がいかに急激に増えるものなのか、実感させられると思います。
枚数n | 移し替える回数 | 時間 |
1 | 1 | 1秒 |
2 | 3 | 3秒 |
3 | 7 | 7秒 |
5 | 31 | 31秒 |
10 | 1,023 | 17分 |
64 | 約18,446,744兆 | 5,849億年 |