Aritalab:Lecture/Algorithm/Towers of Hanoi

From Metabolomics.JP
< Aritalab:Lecture | Algorithm(Difference between revisions)
Jump to: navigation, search
m (ハノイの塔)
m
Line 1: Line 1:
 
==ハノイの塔==
 
==ハノイの塔==
(E. リュカ, 1883)  
+
(フランスの数学者 エドゥアール リュカ によるパズル, 1883)  
台の上に3本の棒が固定されており、一番左の棒をA、真ん中の棒をB、一番右の棒をCとする。Aにはn枚の円盤がはまっており、円盤は下へいくほど半径が大きくなっている。次のルールに従い、棒Bを利用して全ての円盤をAからCに移すとき、何回の移動が必要になるか。
+
[[Image:TowersOfHanoi.jpg|thumb]]
 +
 
 +
台の上に3本の棒が固定されていて、一番左の棒をA、真ん中の棒をB、一番右の棒をCとします。Aにはn枚の円盤がはまっており、円盤は下へいくほど半径が大きくなっています。次のルールに従い、棒Bを利用して全ての円盤をAからCに移すとき、何回の移動が必要になるでしょうか。
 
# 一回に一枚の円盤しか動かしてはいけない。
 
# 一回に一枚の円盤しか動かしてはいけない。
 
# 常に大きい方の円盤が下になるようにする。(移動の途中で円盤の大小を逆に積んではいけない。)
 
# 常に大きい方の円盤が下になるようにする。(移動の途中で円盤の大小を逆に積んではいけない。)
  
 
;解
 
;解
n (>0) 枚の円盤を移動する手数をT<sub>n</sub>と書く。上からn-1枚の円盤をまずBの棒に移し、一番大きい円盤をCに移してから、Bにあるn-1枚をもう一度全てCに移せばよいので、以下の漸化式を得る。
+
n (>0) 枚の円盤を移動する手数をT<sub>n</sub>と書きます。上からn-1枚の円盤をまずBの棒に移し、一番大きい円盤をCに移してから、Bにあるn-1枚をもう一度全てCに移せばよいので、以下の漸化式を得ます。
 
* T<sub>0</sub> = 0
 
* T<sub>0</sub> = 0
 
* T<sub>n</sub> = 2 T<sub>n-1</sub> + 1
 
* T<sub>n</sub> = 2 T<sub>n-1</sub> + 1
ここでS<sub>n</sub> = T<sub>n</sub>/2<sup>n</sup>とおく。
+
 
 +
ここでS<sub>n</sub> = T<sub>n</sub>/2<sup>n</sup>とおきます。
 +
 
 
* S<sub>0</sub> = 0
 
* S<sub>0</sub> = 0
 
* S<sub>n</sub> = S<sub>n-1</sub> + 2<sup>-n</sup> (n > 0)
 
* S<sub>n</sub> = S<sub>n-1</sub> + 2<sup>-n</sup> (n > 0)
 +
 
この漸化式を解くと
 
この漸化式を解くと
 +
 
: S<sub>n</sub> = 2<sup>-1</sup> + 2<sup>-2</sup> + ... 2<sup>-n</sup> = 1 - 2<sup>-n</sup>
 
: S<sub>n</sub> = 2<sup>-1</sup> + 2<sup>-2</sup> + ... 2<sup>-n</sup> = 1 - 2<sup>-n</sup>
従って T<sub>n</sub> = 2<sup>n</sup>S<sub>n</sub> = 2<sup>n</sup>-1となる。
+
従って T<sub>n</sub> = 2<sup>n</sup>S<sub>n</sub> = 2<sup>n</sup>-1となります。例えば 8 枚の円盤が棒にささっている場合、最短の手数で移動させても 2<sup>8</sup> - 1 = 255 手が必要だということです。ウェブ上で画像を検索すると、多くのパズルは7枚か8枚の円盤があるようですが、枚数がこれ以上の場合挑戦しないほうが時間を有効に使えそうです。

Revision as of 18:11, 28 December 2011

ハノイの塔

(フランスの数学者 エドゥアール リュカ によるパズル, 1883)

TowersOfHanoi.jpg

台の上に3本の棒が固定されていて、一番左の棒をA、真ん中の棒をB、一番右の棒をCとします。Aにはn枚の円盤がはまっており、円盤は下へいくほど半径が大きくなっています。次のルールに従い、棒Bを利用して全ての円盤をAからCに移すとき、何回の移動が必要になるでしょうか。

  1. 一回に一枚の円盤しか動かしてはいけない。
  2. 常に大きい方の円盤が下になるようにする。(移動の途中で円盤の大小を逆に積んではいけない。)

n (>0) 枚の円盤を移動する手数をTnと書きます。上からn-1枚の円盤をまずBの棒に移し、一番大きい円盤をCに移してから、Bにあるn-1枚をもう一度全てCに移せばよいので、以下の漸化式を得ます。

  • T0 = 0
  • Tn = 2 Tn-1 + 1

ここでSn = Tn/2nとおきます。

  • S0 = 0
  • Sn = Sn-1 + 2-n (n > 0)

この漸化式を解くと

Sn = 2-1 + 2-2 + ... 2-n = 1 - 2-n

従って Tn = 2nSn = 2n-1となります。例えば 8 枚の円盤が棒にささっている場合、最短の手数で移動させても 28 - 1 = 255 手が必要だということです。ウェブ上で画像を検索すると、多くのパズルは7枚か8枚の円盤があるようですが、枚数がこれ以上の場合挑戦しないほうが時間を有効に使えそうです。

Personal tools
Namespaces

Variants
Actions
Navigation
metabolites
Toolbox